From 8bfa54bbe9284f139e2422cbb001efe43ea856b0 Mon Sep 17 00:00:00 2001 From: Andrew Belt Date: Fri, 2 Oct 2020 12:34:36 -0400 Subject: [PATCH] Add "Library > Check for plugin updates" and "Help > Check for VCV Rack update" menu items. Rename "checkAppUpdates" setting to "autoCheckUpdates". Make it disable/enable plugin updates in addition to app update. --- include/library.hpp | 3 ++- include/settings.hpp | 2 +- src/app/MenuBar.cpp | 32 ++++++++++++++++++++++++++++++++ src/library.cpp | 26 ++++++++++---------------- src/settings.cpp | 10 +++++----- 5 files changed, 50 insertions(+), 23 deletions(-) diff --git a/include/library.hpp b/include/library.hpp index eac5a721..2b963cd9 100644 --- a/include/library.hpp +++ b/include/library.hpp @@ -23,12 +23,13 @@ struct Update { void init(); void destroy(); +void checkAppUpdate(); bool isAppUpdateAvailable(); bool isLoggedIn(); void logIn(const std::string& email, const std::string& password); void logOut(); -void queryUpdates(); +void checkUpdates(); bool hasUpdates(); void syncUpdate(const std::string& slug); void syncUpdates(); diff --git a/include/settings.hpp b/include/settings.hpp index 73a96ac1..2254bb4d 100644 --- a/include/settings.hpp +++ b/include/settings.hpp @@ -53,7 +53,7 @@ extern std::list recentPatchPaths; extern std::vector cableColors; // pluginSlug -> moduleSlugs extern std::map> moduleWhitelist; -extern bool checkAppUpdates; +extern bool autoCheckUpdates; json_t* toJson(); void fromJson(json_t* rootJ); diff --git a/src/app/MenuBar.cpp b/src/app/MenuBar.cpp index c08fe3f4..edd26fc8 100644 --- a/src/app/MenuBar.cpp +++ b/src/app/MenuBar.cpp @@ -714,12 +714,24 @@ struct SyncUpdateItem : ui::MenuItem { } }; + +struct CheckUpdatesItem : ui::MenuItem { + void onAction(const event::Action& e) override { + std::thread t([&] { + library::checkUpdates(); + }); + t.detach(); + } +}; + + struct LogOutItem : ui::MenuItem { void onAction(const event::Action& e) override { library::logOut(); } }; + struct LibraryMenu : ui::Menu { bool loggedIn = false; @@ -793,6 +805,11 @@ struct LibraryMenu : ui::Menu { addChild(updateItem); } } + else if (!settings::autoCheckUpdates) { + CheckUpdatesItem* checkUpdatesItem = new CheckUpdatesItem; + checkUpdatesItem->text = "Check for updates"; + addChild(checkUpdatesItem); + } } } }; @@ -851,6 +868,16 @@ struct AppUpdateItem : ui::MenuItem { }; +struct CheckAppUpdateItem : ui::MenuItem { + void onAction(const event::Action& e) override { + std::thread t([&]() { + library::checkAppUpdate(); + }); + t.detach(); + } +}; + + struct HelpButton : MenuButton { NotificationIcon* notification; @@ -870,6 +897,11 @@ struct HelpButton : MenuButton { appUpdateItem->rightText = APP_VERSION + " → " + library::appVersion; menu->addChild(appUpdateItem); } + else if (!settings::autoCheckUpdates && !settings::devMode) { + CheckAppUpdateItem* checkAppUpdateItem = new CheckAppUpdateItem; + checkAppUpdateItem->text = "Check for " + APP_NAME + " update"; + menu->addChild(checkAppUpdateItem); + } UrlItem* manualItem = new UrlItem; manualItem->text = "Manual"; diff --git a/src/library.cpp b/src/library.cpp index 92323c62..fa504dd4 100644 --- a/src/library.cpp +++ b/src/library.cpp @@ -16,24 +16,18 @@ namespace rack { namespace library { -static void queryAppUpdate(); - - void init() { - if (settings::devMode) - return; - - if (settings::checkAppUpdates) { + if (settings::autoCheckUpdates && !settings::devMode) { std::thread t([&]() { - queryAppUpdate(); + checkAppUpdate(); }); t.detach(); - } - std::thread t2([&] { - queryUpdates(); - }); - t2.detach(); + std::thread t2([&] { + checkUpdates(); + }); + t2.detach(); + } } @@ -41,7 +35,7 @@ void destroy() { } -static void queryAppUpdate() { +void checkAppUpdate() { std::string versionUrl = API_URL + "/version"; json_t* resJ = network::requestJson(network::METHOD_GET, versionUrl, NULL); if (!resJ) { @@ -108,7 +102,7 @@ void logIn(const std::string& email, const std::string& password) { const char* tokenStr = json_string_value(tokenJ); settings::token = tokenStr; loginStatus = ""; - queryUpdates(); + checkUpdates(); } @@ -118,7 +112,7 @@ void logOut() { } -void queryUpdates() { +void checkUpdates() { if (settings::token.empty()) return; diff --git a/src/settings.cpp b/src/settings.cpp index f3b4352b..39636c40 100644 --- a/src/settings.cpp +++ b/src/settings.cpp @@ -50,7 +50,7 @@ std::vector cableColors = { color::fromHexString("#8c1889ff"), // purple }; std::map> moduleWhitelist = {}; -bool checkAppUpdates = true; +bool autoCheckUpdates = true; json_t* toJson() { @@ -120,7 +120,7 @@ json_t* toJson() { } json_object_set_new(rootJ, "moduleWhitelist", moduleWhitelistJ); - json_object_set_new(rootJ, "checkAppUpdates", json_boolean(checkAppUpdates)); + json_object_set_new(rootJ, "autoCheckUpdates", json_boolean(autoCheckUpdates)); return rootJ; } @@ -246,9 +246,9 @@ void fromJson(json_t* rootJ) { } } - json_t* checkAppUpdatesJ = json_object_get(rootJ, "checkAppUpdates"); - if (checkAppUpdatesJ) - checkAppUpdates = json_boolean_value(checkAppUpdatesJ); + json_t* autoCheckUpdatesJ = json_object_get(rootJ, "autoCheckUpdates"); + if (autoCheckUpdatesJ) + autoCheckUpdates = json_boolean_value(autoCheckUpdatesJ); } void save(const std::string& path) {