diff --git a/extras/Projucer/Source/Project/jucer_Project.cpp b/extras/Projucer/Source/Project/jucer_Project.cpp index 44b0f309c4..037b2ef68e 100644 --- a/extras/Projucer/Source/Project/jucer_Project.cpp +++ b/extras/Projucer/Source/Project/jucer_Project.cpp @@ -198,18 +198,17 @@ void Project::initialiseProjectValues() displaySplashScreenValue.referTo (projectRoot, Ids::displaySplashScreen, getUndoManager(), ! ProjucerApplication::getApp().isPaidOrGPL()); splashScreenColourValue.referTo (projectRoot, Ids::splashScreenColour, getUndoManager(), "Dark"); - reportAppUsageValue.referTo (projectRoot, Ids::reportAppUsage, getUndoManager(), ! ProjucerApplication::getApp().isPaidOrGPL()); useAppConfigValue.referTo (projectRoot, Ids::useAppConfig, getUndoManager(), true); addUsingNamespaceToJuceHeader.referTo (projectRoot, Ids::addUsingNamespaceToJuceHeader, getUndoManager(), true); cppStandardValue.referTo (projectRoot, Ids::cppLanguageStandard, getUndoManager(), "14"); - headerSearchPathsValue.referTo (projectRoot, Ids::headerPath, getUndoManager()); - preprocessorDefsValue.referTo (projectRoot, Ids::defines, getUndoManager()); - userNotesValue.referTo (projectRoot, Ids::userNotes, getUndoManager()); + headerSearchPathsValue.referTo (projectRoot, Ids::headerPath, getUndoManager()); + preprocessorDefsValue.referTo (projectRoot, Ids::defines, getUndoManager()); + userNotesValue.referTo (projectRoot, Ids::userNotes, getUndoManager()); - maxBinaryFileSizeValue.referTo (projectRoot, Ids::maxBinaryFileSize, getUndoManager(), 10240 * 1024); + maxBinaryFileSizeValue.referTo (projectRoot, Ids::maxBinaryFileSize, getUndoManager(), 10240 * 1024); // this is here for backwards compatibility with old projects using the incorrect id if (projectRoot.hasProperty ("includeBinaryInAppConfig")) @@ -896,29 +895,16 @@ void Project::createPropertyEditors (PropertyListBuilder& props) "license, or are using JUCE under the GPL v3 license."); StringPairArray description; - description.set ("Report JUCE app usage", "This option controls the collection of usage data from users of this JUCE application."); description.set ("Display the JUCE splash screen", "This option controls the display of the standard JUCE splash screen."); if (ProjucerApplication::getApp().isPaidOrGPL()) { - props.add (new ChoicePropertyComponent (reportAppUsageValue, String ("Report JUCE App Usage") + " (" + licenseRequiredTagline + ")"), - description["Report JUCE app usage"] + " " + licenseRequiredInfo); - props.add (new ChoicePropertyComponent (displaySplashScreenValue, String ("Display the JUCE Splash Screen") + " (" + licenseRequiredTagline + ")"), description["Display the JUCE splash screen"] + " " + licenseRequiredInfo); } else { - StringArray options; - Array vars; - - options.add (licenseRequiredTagline); - vars.add (var()); - - props.add (new ChoicePropertyComponent (Value(), "Report JUCE App Usage", options, vars), - description["Report JUCE app usage"] + " " + licenseRequiredInfo); - - props.add (new ChoicePropertyComponent (Value(), "Display the JUCE Splash Screen", options, vars), + props.add (new ChoicePropertyComponent (Value(), "Display the JUCE Splash Screen", { licenseRequiredTagline }, {}), description["Display the JUCE splash screen"] + " " + licenseRequiredInfo); } } diff --git a/extras/Projucer/Source/Project/jucer_Project.h b/extras/Projucer/Source/Project/jucer_Project.h index ae63928ee5..5deb8595f0 100644 --- a/extras/Projucer/Source/Project/jucer_Project.h +++ b/extras/Projucer/Source/Project/jucer_Project.h @@ -114,7 +114,6 @@ public: String getBinaryDataNamespaceString() const { return binaryDataNamespaceValue.get(); } bool shouldDisplaySplashScreen() const { return displaySplashScreenValue.get(); } - bool shouldReportAppUsage() const { return reportAppUsageValue.get(); } String getSplashScreenColourString() const { return splashScreenColourValue.get(); } String getCppStandardString() const { return cppStandardValue.get(); } @@ -417,7 +416,7 @@ private: ValueTree projectRoot { Ids::JUCERPROJECT }; ValueWithDefault projectNameValue, projectUIDValue, projectLineFeedValue, projectTypeValue, versionValue, bundleIdentifierValue, companyNameValue, - companyCopyrightValue, companyWebsiteValue, companyEmailValue, displaySplashScreenValue, reportAppUsageValue, splashScreenColourValue, cppStandardValue, + companyCopyrightValue, companyWebsiteValue, companyEmailValue, displaySplashScreenValue, splashScreenColourValue, cppStandardValue, headerSearchPathsValue, preprocessorDefsValue, userNotesValue, maxBinaryFileSizeValue, includeBinaryDataInJuceHeaderValue, binaryDataNamespaceValue, compilerFlagSchemesValue, postExportShellCommandPosixValue, postExportShellCommandWinValue, useAppConfigValue, addUsingNamespaceToJuceHeader; diff --git a/extras/Projucer/Source/ProjectSaving/jucer_ProjectExporter.cpp b/extras/Projucer/Source/ProjectSaving/jucer_ProjectExporter.cpp index a5a71d3c2e..4c26959bfa 100644 --- a/extras/Projucer/Source/ProjectSaving/jucer_ProjectExporter.cpp +++ b/extras/Projucer/Source/ProjectSaving/jucer_ProjectExporter.cpp @@ -455,7 +455,6 @@ StringPairArray ProjectExporter::getAppConfigDefs() const { StringPairArray result; result.set ("JUCE_DISPLAY_SPLASH_SCREEN", project.shouldDisplaySplashScreen() ? "1" : "0"); - result.set ("JUCE_REPORT_APP_USAGE", project.shouldReportAppUsage() ? "1" : "0"); result.set ("JUCE_USE_DARK_SPLASH_SCREEN", project.getSplashScreenColourString() == "Dark" ? "1" : "0"); result.set ("JUCE_PROJUCER_VERSION", "0x" + String::toHexString (ProjectInfo::versionNumber)); diff --git a/extras/Projucer/Source/ProjectSaving/jucer_ProjectSaver.h b/extras/Projucer/Source/ProjectSaving/jucer_ProjectSaver.h index 56f1edaad4..93e7bb7d36 100644 --- a/extras/Projucer/Source/ProjectSaving/jucer_ProjectSaver.h +++ b/extras/Projucer/Source/ProjectSaving/jucer_ProjectSaver.h @@ -452,11 +452,6 @@ private: << "#ifndef JUCE_DISPLAY_SPLASH_SCREEN" << newLine << " #define JUCE_DISPLAY_SPLASH_SCREEN " << (project.shouldDisplaySplashScreen() ? "1" : "0") << newLine << "#endif" << newLine << newLine - - << "#ifndef JUCE_REPORT_APP_USAGE" << newLine - << " #define JUCE_REPORT_APP_USAGE " << (project.shouldReportAppUsage() ? "1" : "0") << newLine - << "#endif" << newLine - << newLine << "// END SECTION A" << newLine << newLine << "#define JUCE_USE_DARK_SPLASH_SCREEN " << (project.getSplashScreenColourString() == "Dark" ? "1" : "0") << newLine diff --git a/extras/Projucer/Source/Utility/Helpers/jucer_PresetIDs.h b/extras/Projucer/Source/Utility/Helpers/jucer_PresetIDs.h index c838afd086..8105f98e45 100644 --- a/extras/Projucer/Source/Utility/Helpers/jucer_PresetIDs.h +++ b/extras/Projucer/Source/Utility/Helpers/jucer_PresetIDs.h @@ -43,7 +43,6 @@ namespace Ids DECLARE_ID (useAppConfig); DECLARE_ID (addUsingNamespaceToJuceHeader); DECLARE_ID (displaySplashScreen); - DECLARE_ID (reportAppUsage); DECLARE_ID (splashScreenColour); DECLARE_ID (position); DECLARE_ID (source); diff --git a/modules/juce_gui_basics/misc/juce_JUCESplashScreen.cpp b/modules/juce_gui_basics/misc/juce_JUCESplashScreen.cpp index 257b8cf98c..21940ea7f6 100644 --- a/modules/juce_gui_basics/misc/juce_JUCESplashScreen.cpp +++ b/modules/juce_gui_basics/misc/juce_JUCESplashScreen.cpp @@ -49,8 +49,7 @@ namespace juce static const int millisecondsToDisplaySplash = 2000, splashScreenFadeOutTime = 2000; static const int splashScreenLogoWidth = 123, splashScreenLogoHeight = 63; static uint32 splashDisplayTime = 0; -static bool splashHasStartedFading = false, appUsageReported = false; - +static bool splashHasStartedFading = false; static Rectangle getLogoArea (Rectangle parentRect) { @@ -59,175 +58,11 @@ static Rectangle getLogoArea (Rectangle parentRect) .removeFromBottom ((float) splashScreenLogoHeight); } -//============================================================================== -struct ReportingThread; - -struct ReportingThreadContainer : public ChangeListener, - public DeletedAtShutdown -{ - ReportingThreadContainer() {} - ~ReportingThreadContainer() override { clearSingletonInstance(); } - - void sendReport (String, String&, StringPairArray&); - void changeListenerCallback (ChangeBroadcaster*) override; - - std::unique_ptr reportingThread; - - JUCE_DECLARE_SINGLETON_SINGLETHREADED_MINIMAL (ReportingThreadContainer) -}; - -JUCE_IMPLEMENT_SINGLETON (ReportingThreadContainer) - -//============================================================================== -struct ReportingThread : public Thread, - private ChangeBroadcaster -{ - ReportingThread (ReportingThreadContainer& container, - String& address, - String& userAgent, - StringPairArray& parameters) - : Thread ("JUCE app usage reporting"), - threadContainer (container), - headers ("User-Agent: " + userAgent) - { - StringArray postData; - - for (auto& key : parameters.getAllKeys()) - if (parameters[key].isNotEmpty()) - postData.add (key + "=" + URL::addEscapeChars (parameters[key], true)); - - url = URL (address).withPOSTData (postData.joinIntoString ("&")); - - addChangeListener (&threadContainer); - } - - ~ReportingThread() override - { - removeChangeListener (&threadContainer); - - if (webStream != nullptr) - webStream->cancel(); - - stopThread (2000); - } - - void run() override - { - webStream.reset (new WebInputStream (url, true)); - webStream->withExtraHeaders (headers); - webStream->connect (nullptr); - - sendChangeMessage(); - } - -private: - ReportingThreadContainer& threadContainer; - URL url; - String headers; - std::unique_ptr webStream; -}; - -//============================================================================== -void ReportingThreadContainer::sendReport (String address, String& userAgent, StringPairArray& parameters) -{ - reportingThread.reset (new ReportingThread (*this, address, userAgent, parameters)); - reportingThread->startThread(); -} - -void ReportingThreadContainer::changeListenerCallback (ChangeBroadcaster*) -{ - reportingThread.reset(); -} - //============================================================================== JUCESplashScreen::JUCESplashScreen (Component& parent) { ignoreUnused (parent); - #if JUCE_REPORT_APP_USAGE - if (! appUsageReported) - { - const ScopedTryLock appUsageReportingLock (appUsageReporting); - - if (appUsageReportingLock.isLocked() && ! appUsageReported) - { - const auto deviceDescription = SystemStats::getDeviceDescription(); - const auto deviceString = SystemStats::getDeviceIdentifiers().joinIntoString (":"); - const auto deviceIdentifier = String::toHexString (deviceString.hashCode64()); - const auto osName = SystemStats::getOperatingSystemName(); - - StringPairArray data; - - data.set ("v", "1"); - data.set ("tid", "UA-19759318-3"); - data.set ("cid", deviceIdentifier); - data.set ("t", "event"); - data.set ("ec", "info"); - data.set ("ea", "appStarted"); - - data.set ("cd1", SystemStats::getJUCEVersion()); - data.set ("cd2", osName); - data.set ("cd3", deviceDescription); - data.set ("cd4", deviceIdentifier); - - String appType, appName, appVersion, appManufacturer; - - #if defined(JucePlugin_Name) - appType = "Plugin"; - appName = JucePlugin_Name; - appVersion = JucePlugin_VersionString; - appManufacturer = JucePlugin_Manufacturer; - #else - if (JUCEApplicationBase::isStandaloneApp()) - { - appType = "Application"; - - if (auto* app = JUCEApplicationBase::getInstance()) - { - appName = app->getApplicationName(); - appVersion = app->getApplicationVersion(); - } - } - else - { - appType = "Library"; - } - #endif - - data.set ("cd5", appType); - data.set ("cd6", appName); - data.set ("cd7", appVersion); - data.set ("cd8", appManufacturer); - - data.set ("an", appName); - data.set ("av", appVersion); - - auto agentCPUVendor = SystemStats::getCpuVendor(); - - if (agentCPUVendor.isEmpty()) - agentCPUVendor = "CPU"; - - auto agentOSName = osName.replaceCharacter ('.', '_') - .replace ("iOS", "iPhone OS"); - #if JUCE_IOS - agentOSName << " like Mac OS X"; - #endif - - String userAgent; - userAgent << "Mozilla/5.0 (" - << deviceDescription << ";" - << agentCPUVendor << " " << agentOSName << ";" - << SystemStats::getDisplayLanguage() << ")"; - - ReportingThreadContainer::getInstance()->sendReport ("https://www.google-analytics.com/collect", userAgent, data); - - appUsageReported = true; - } - } - #else - ignoreUnused (appUsageReported); - #endif - #if JUCE_DISPLAY_SPLASH_SCREEN if (splashDisplayTime == 0 || Time::getMillisecondCounter() < splashDisplayTime + (uint32) millisecondsToDisplaySplash) @@ -244,10 +79,6 @@ JUCESplashScreen::JUCESplashScreen (Component& parent) } } -JUCESplashScreen::~JUCESplashScreen() -{ -} - std::unique_ptr JUCESplashScreen::getSplashScreenLogo() { const char* svgData = R"JUCESPLASHSCREEN( diff --git a/modules/juce_gui_basics/misc/juce_JUCESplashScreen.h b/modules/juce_gui_basics/misc/juce_JUCESplashScreen.h index 591fec47d4..10b8c0ff5c 100644 --- a/modules/juce_gui_basics/misc/juce_JUCESplashScreen.h +++ b/modules/juce_gui_basics/misc/juce_JUCESplashScreen.h @@ -45,7 +45,6 @@ class JUCE_API JUCESplashScreen : public Component, { public: JUCESplashScreen (Component& parentToAddTo); - ~JUCESplashScreen() override; static std::unique_ptr getSplashScreenLogo(); @@ -58,7 +57,6 @@ private: void mouseUp (const MouseEvent&) override; std::unique_ptr content; - CriticalSection appUsageReporting; ComponentAnimator fader; JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (JUCESplashScreen)