From 458944ad91c766c79a2e221e18d6524d7602fe7e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Petr=20Mr=C3=A1zek?= Date: Fri, 3 Feb 2023 23:05:27 +0100 Subject: [PATCH] NOISSUE Remove concept of switching update channels It is all develop from now on, we no longer make stable releases. This means no maintenance of version numbers and removal of all the overhead associated with making stable releases. MultiMC 6 might have a better system, but with how infrequent and stable MultiMC releases are getting, there's no need to have a distinction between `stable` and `develop` anymore. --- buildconfig/BuildConfig.cpp.in | 2 +- launcher/Application.cpp | 3 +- .../notifications/NotificationChecker.cpp | 7 +- launcher/notifications/NotificationChecker.h | 1 - launcher/ui/MainWindow.cpp | 5 +- launcher/ui/dialogs/UpdateDialog.cpp | 21 +---- launcher/ui/pages/global/LauncherPage.cpp | 91 +------------------ launcher/ui/pages/global/LauncherPage.h | 17 ---- launcher/ui/pages/global/LauncherPage.ui | 28 ------ launcher/updater/UpdateChecker.cpp | 20 ++-- launcher/updater/UpdateChecker.h | 9 +- launcher/updater/UpdateChecker_test.cpp | 15 +-- 12 files changed, 28 insertions(+), 191 deletions(-) diff --git a/buildconfig/BuildConfig.cpp.in b/buildconfig/BuildConfig.cpp.in index 9e449aec..8c04dd4d 100644 --- a/buildconfig/BuildConfig.cpp.in +++ b/buildconfig/BuildConfig.cpp.in @@ -57,7 +57,7 @@ QString Config::printableVersionString() const QString vstr = QString("%1.%2.%3").arg(QString::number(VERSION_MAJOR), QString::number(VERSION_MINOR), QString::number(VERSION_HOTFIX)); // If the build is not a main release, append the channel - if(VERSION_CHANNEL != "stable") + if(VERSION_CHANNEL != "develop") { vstr += "-" + VERSION_CHANNEL; } diff --git a/launcher/Application.cpp b/launcher/Application.cpp index 475b05a1..b471f469 100644 --- a/launcher/Application.cpp +++ b/launcher/Application.cpp @@ -627,7 +627,6 @@ Application::Application(int &argc, char **argv) : QApplication(argc, argv) { m_settings.reset(new INISettingsObject(BuildConfig.LAUNCHER_CONFIGFILE, this)); // Updates - m_settings->registerSetting("UpdateChannel", BuildConfig.VERSION_CHANNEL); m_settings->registerSetting("AutoUpdate", true); // Theming @@ -812,7 +811,7 @@ Application::Application(int &argc, char **argv) : QApplication(argc, argv) auto platform = getIdealPlatform(BuildConfig.BUILD_PLATFORM); auto channelUrl = BuildConfig.UPDATER_BASE + platform + "/channels.json"; qDebug() << "Initializing updater with platform: " << platform << " -- " << channelUrl; - m_updateChecker.reset(new UpdateChecker(m_network, channelUrl, BuildConfig.VERSION_CHANNEL, BuildConfig.VERSION_BUILD)); + m_updateChecker.reset(new UpdateChecker(m_network, channelUrl, BuildConfig.VERSION_BUILD)); qDebug() << "<> Updater started."; } diff --git a/launcher/notifications/NotificationChecker.cpp b/launcher/notifications/NotificationChecker.cpp index c08bcdcb..d91465c6 100644 --- a/launcher/notifications/NotificationChecker.cpp +++ b/launcher/notifications/NotificationChecker.cpp @@ -10,7 +10,7 @@ #include "Application.h" NotificationChecker::NotificationChecker(QObject *parent) - : QObject(parent) + : QObject(parent), m_appVersionChannel("develop") { } @@ -19,11 +19,6 @@ void NotificationChecker::setNotificationsUrl(const QUrl ¬ificationsUrl) m_notificationsUrl = notificationsUrl; } -void NotificationChecker::setApplicationChannel(QString channel) -{ - m_appVersionChannel = channel; -} - void NotificationChecker::setApplicationFullVersion(QString version) { m_appFullVersion = version; diff --git a/launcher/notifications/NotificationChecker.h b/launcher/notifications/NotificationChecker.h index 0f305f33..4049e55b 100644 --- a/launcher/notifications/NotificationChecker.h +++ b/launcher/notifications/NotificationChecker.h @@ -14,7 +14,6 @@ public: void setNotificationsUrl(const QUrl ¬ificationsUrl); void setApplicationPlatform(QString platform); - void setApplicationChannel(QString channel); void setApplicationFullVersion(QString version); struct NotificationEntry diff --git a/launcher/ui/MainWindow.cpp b/launcher/ui/MainWindow.cpp index a3f31f5f..44cb504b 100644 --- a/launcher/ui/MainWindow.cpp +++ b/launcher/ui/MainWindow.cpp @@ -849,14 +849,13 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new MainWindow // if automatic update checks are allowed, start one. if (APPLICATION->settings()->get("AutoUpdate").toBool() && updatesAllowed) { - updater->checkForUpdate(APPLICATION->settings()->get("UpdateChannel").toString(), false); + updater->checkForUpdate(false); } } { auto checker = new NotificationChecker(); checker->setNotificationsUrl(QUrl(BuildConfig.NOTIFICATION_URL)); - checker->setApplicationChannel(BuildConfig.VERSION_CHANNEL); checker->setApplicationPlatform(BuildConfig.BUILD_PLATFORM); checker->setApplicationFullVersion(BuildConfig.FULL_VERSION_STR); m_notificationChecker.reset(checker); @@ -1639,7 +1638,7 @@ void MainWindow::checkForUpdates() if(BuildConfig.UPDATER_ENABLED) { auto updater = APPLICATION->updateChecker(); - updater->checkForUpdate(APPLICATION->settings()->get("UpdateChannel").toString(), true); + updater->checkForUpdate(true); } else { diff --git a/launcher/ui/dialogs/UpdateDialog.cpp b/launcher/ui/dialogs/UpdateDialog.cpp index c2189c2b..f949ebe6 100644 --- a/launcher/ui/dialogs/UpdateDialog.cpp +++ b/launcher/ui/dialogs/UpdateDialog.cpp @@ -11,14 +11,13 @@ UpdateDialog::UpdateDialog(bool hasUpdate, QWidget *parent) : QDialog(parent), ui(new Ui::UpdateDialog) { ui->setupUi(this); - auto channel = APPLICATION->settings()->get("UpdateChannel").toString(); if(hasUpdate) { - ui->label->setText(tr("A new %1 update is available!").arg(channel)); + ui->label->setText(tr("A new update is available!")); } else { - ui->label->setText(tr("No %1 updates found. You are running the latest version.").arg(channel)); + ui->label->setText(tr("No updates found. You are running the latest version.")); ui->btnUpdateNow->setHidden(true); ui->btnUpdateLater->setText(tr("Close")); } @@ -33,19 +32,10 @@ UpdateDialog::~UpdateDialog() void UpdateDialog::loadChangelog() { - auto channel = APPLICATION->settings()->get("UpdateChannel").toString(); dljob = new NetJob("Changelog", APPLICATION->network()); QString url; - if(channel == "stable") - { - url = QString("https://raw.githubusercontent.com/MultiMC/Launcher/%1/changelog.md").arg(channel); - m_changelogType = CHANGELOG_MARKDOWN; - } - else - { - url = QString("https://api.github.com/repos/MultiMC/Launcher/compare/%1...%2").arg(BuildConfig.GIT_COMMIT, channel); - m_changelogType = CHANGELOG_COMMITS; - } + url = QString("https://api.github.com/repos/MultiMC/Launcher/compare/%1...develop").arg(BuildConfig.GIT_COMMIT); + m_changelogType = CHANGELOG_COMMITS; dljob->addNetAction(Net::Download::makeByteArray(QUrl(url), &changelogData)); connect(dljob.get(), &NetJob::succeeded, this, &UpdateDialog::changelogLoaded); connect(dljob.get(), &NetJob::failed, this, &UpdateDialog::changelogFailed); @@ -65,7 +55,6 @@ QString reprocessMarkdown(QByteArray markdown) QString reprocessCommits(QByteArray json) { - auto channel = APPLICATION->settings()->get("UpdateChannel").toString(); try { QString result; @@ -119,7 +108,7 @@ QString reprocessCommits(QByteArray json) if(status == "identical") { - return QObject::tr("

There are no code changes between your current version and latest %1.

").arg(channel); + return QObject::tr("

There are no code changes between your current version and the latest.

"); } else if(status == "ahead") { diff --git a/launcher/ui/pages/global/LauncherPage.cpp b/launcher/ui/pages/global/LauncherPage.cpp index 2eb73e44..1f986c19 100644 --- a/launcher/ui/pages/global/LauncherPage.cpp +++ b/launcher/ui/pages/global/LauncherPage.cpp @@ -56,23 +56,12 @@ LauncherPage::LauncherPage(QWidget *parent) : QWidget(parent), ui(new Ui::Launch m_languageModel = APPLICATION->translations(); loadSettings(); - if(BuildConfig.UPDATER_ENABLED) - { - QObject::connect(APPLICATION->updateChecker().get(), &UpdateChecker::channelListLoaded, this, &LauncherPage::refreshUpdateChannelList); - - if (APPLICATION->updateChecker()->hasChannels()) - { - refreshUpdateChannelList(); - } - else - { - APPLICATION->updateChecker()->updateChanList(false); - } - } - else + // Updater + if(!BuildConfig.UPDATER_ENABLED) { ui->updateSettingsBox->setHidden(true); } + // Analytics if(BuildConfig.ANALYTICS_ID.isEmpty()) { @@ -163,78 +152,6 @@ void LauncherPage::on_migrateDataFolderMacBtn_clicked() qApp->quit(); } -void LauncherPage::refreshUpdateChannelList() -{ - // Stop listening for selection changes. It's going to change a lot while we update it and - // we don't need to update the - // description label constantly. - QObject::disconnect(ui->updateChannelComboBox, SIGNAL(currentIndexChanged(int)), this, - SLOT(updateChannelSelectionChanged(int))); - - QList channelList = APPLICATION->updateChecker()->getChannelList(); - ui->updateChannelComboBox->clear(); - int selection = -1; - for (int i = 0; i < channelList.count(); i++) - { - UpdateChecker::ChannelListEntry entry = channelList.at(i); - - // When it comes to selection, we'll rely on the indexes of a channel entry being the - // same in the - // combo box as it is in the update checker's channel list. - // This probably isn't very safe, but the channel list doesn't change often enough (or - // at all) for - // this to be a big deal. Hope it doesn't break... - ui->updateChannelComboBox->addItem(entry.name); - - // If the update channel we just added was the selected one, set the current index in - // the combo box to it. - if (entry.id == m_currentUpdateChannel) - { - qDebug() << "Selected index" << i << "channel id" << m_currentUpdateChannel; - selection = i; - } - } - - ui->updateChannelComboBox->setCurrentIndex(selection); - - // Start listening for selection changes again and update the description label. - QObject::connect(ui->updateChannelComboBox, SIGNAL(currentIndexChanged(int)), this, - SLOT(updateChannelSelectionChanged(int))); - refreshUpdateChannelDesc(); - - // Now that we've updated the channel list, we can enable the combo box. - // It starts off disabled so that if the channel list hasn't been loaded, it will be - // disabled. - ui->updateChannelComboBox->setEnabled(true); -} - -void LauncherPage::updateChannelSelectionChanged(int index) -{ - refreshUpdateChannelDesc(); -} - -void LauncherPage::refreshUpdateChannelDesc() -{ - // Get the channel list. - QList channelList = APPLICATION->updateChecker()->getChannelList(); - int selectedIndex = ui->updateChannelComboBox->currentIndex(); - if (selectedIndex < 0) - { - return; - } - if (selectedIndex < channelList.count()) - { - // Find the channel list entry with the given index. - UpdateChecker::ChannelListEntry selected = channelList.at(selectedIndex); - - // Set the description text. - ui->updateChannelDescLabel->setText(selected.description); - - // Set the currently selected channel ID. - m_currentUpdateChannel = selected.id; - } -} - void LauncherPage::applySettings() { auto s = APPLICATION->settings(); @@ -246,7 +163,6 @@ void LauncherPage::applySettings() // Updates s->set("AutoUpdate", ui->autoUpdateCheckBox->isChecked()); - s->set("UpdateChannel", m_currentUpdateChannel); auto original = s->get("IconTheme").toString(); //FIXME: make generic switch (ui->themeComboBox->currentIndex()) @@ -333,7 +249,6 @@ void LauncherPage::loadSettings() auto s = APPLICATION->settings(); // Updates ui->autoUpdateCheckBox->setChecked(s->get("AutoUpdate").toBool()); - m_currentUpdateChannel = s->get("UpdateChannel").toString(); //FIXME: make generic auto theme = s->get("IconTheme").toString(); if (theme == "pe_dark") diff --git a/launcher/ui/pages/global/LauncherPage.h b/launcher/ui/pages/global/LauncherPage.h index 4d0cf3c9..d5ea2353 100644 --- a/launcher/ui/pages/global/LauncherPage.h +++ b/launcher/ui/pages/global/LauncherPage.h @@ -69,31 +69,14 @@ slots: void on_iconsDirBrowseBtn_clicked(); void on_migrateDataFolderMacBtn_clicked(); - /*! - * Updates the list of update channels in the combo box. - */ - void refreshUpdateChannelList(); - - /*! - * Updates the channel description label. - */ - void refreshUpdateChannelDesc(); - /*! * Updates the font preview */ void refreshFontPreview(); - void updateChannelSelectionChanged(int index); - private: Ui::LauncherPage *ui; - /*! - * Stores the currently selected update channel. - */ - QString m_currentUpdateChannel; - // default format for the font preview... QTextCharFormat *defaultFormat; diff --git a/launcher/ui/pages/global/LauncherPage.ui b/launcher/ui/pages/global/LauncherPage.ui index 62a66d73..d1728fed 100644 --- a/launcher/ui/pages/global/LauncherPage.ui +++ b/launcher/ui/pages/global/LauncherPage.ui @@ -58,33 +58,6 @@ - - - - Up&date Channel: - - - updateChannelComboBox - - - - - - - false - - - - - - - No channel selected. - - - true - - - @@ -555,7 +528,6 @@ tabWidget autoUpdateCheckBox - updateChannelComboBox instDirTextBox instDirBrowseBtn modsDirTextBox diff --git a/launcher/updater/UpdateChecker.cpp b/launcher/updater/UpdateChecker.cpp index efdb6093..c0505908 100644 --- a/launcher/updater/UpdateChecker.cpp +++ b/launcher/updater/UpdateChecker.cpp @@ -26,11 +26,11 @@ #include "BuildConfig.h" #include "sys.h" -UpdateChecker::UpdateChecker(shared_qobject_ptr nam, QString channelUrl, QString currentChannel, int currentBuild) +UpdateChecker::UpdateChecker(shared_qobject_ptr nam, QString channelUrl, int currentBuild) { m_network = nam; m_channelUrl = channelUrl; - m_currentChannel = currentChannel; + m_currentChannel = "develop"; m_currentBuild = currentBuild; } @@ -44,9 +44,10 @@ bool UpdateChecker::hasChannels() const return !m_channels.isEmpty(); } -void UpdateChecker::checkForUpdate(QString updateChannel, bool notifyNoUpdate) +void UpdateChecker::checkForUpdate(bool notifyNoUpdate) { qDebug() << "Checking for updates."; + QString updateChannel = "develop"; // If the channel list hasn't loaded yet, load it and defer checking for updates until // later. @@ -54,7 +55,6 @@ void UpdateChecker::checkForUpdate(QString updateChannel, bool notifyNoUpdate) { qDebug() << "Channel list isn't loaded yet. Loading channel list and deferring update check."; m_checkUpdateWaiting = true; - m_deferredUpdateChannel = updateChannel; updateChanList(notifyNoUpdate); return; } @@ -67,13 +67,13 @@ void UpdateChecker::checkForUpdate(QString updateChannel, bool notifyNoUpdate) // Find the desired channel within the channel list and get its repo URL. If if cannot be // found, error. - QString stableUrl; + QString developUrl; m_newRepoUrl = ""; for (ChannelListEntry entry : m_channels) { qDebug() << "channelEntry = " << entry.id; - if(entry.id == "stable") { - stableUrl = entry.url; + if(entry.id == "develop") { + developUrl = entry.url; } if (entry.id == updateChannel) { m_newRepoUrl = entry.url; @@ -88,8 +88,8 @@ void UpdateChecker::checkForUpdate(QString updateChannel, bool notifyNoUpdate) qDebug() << "m_repoUrl = " << m_newRepoUrl; if (m_newRepoUrl.isEmpty()) { - qWarning() << "m_repoUrl was empty. defaulting to 'stable': " << stableUrl; - m_newRepoUrl = stableUrl; + qWarning() << "m_repoUrl was empty. defaulting to 'develop': " << developUrl; + m_newRepoUrl = developUrl; } // If nothing applies, error @@ -255,7 +255,7 @@ void UpdateChecker::chanListDownloadFinished(bool notifyNoUpdate) // If we're waiting to check for updates, do that now. if (m_checkUpdateWaiting) { - checkForUpdate(m_deferredUpdateChannel, notifyNoUpdate); + checkForUpdate(notifyNoUpdate); } emit channelListLoaded(); diff --git a/launcher/updater/UpdateChecker.h b/launcher/updater/UpdateChecker.h index 13ee4efd..6fe41807 100644 --- a/launcher/updater/UpdateChecker.h +++ b/launcher/updater/UpdateChecker.h @@ -23,8 +23,8 @@ class UpdateChecker : public QObject Q_OBJECT public: - UpdateChecker(shared_qobject_ptr nam, QString channelUrl, QString currentChannel, int currentBuild); - void checkForUpdate(QString updateChannel, bool notifyNoUpdate); + UpdateChecker(shared_qobject_ptr nam, QString channelUrl, int currentBuild); + void checkForUpdate(bool notifyNoUpdate); /*! * Causes the update checker to download the channel list from the URL specified in config.h (generated by CMake). @@ -107,11 +107,6 @@ private: */ bool m_checkUpdateWaiting = false; - /*! - * if m_checkUpdateWaiting, this is the last used update channel - */ - QString m_deferredUpdateChannel; - int m_currentBuild = -1; QString m_currentChannel; QString m_currentRepoUrl; diff --git a/launcher/updater/UpdateChecker_test.cpp b/launcher/updater/UpdateChecker_test.cpp index ec55a40e..845ed993 100644 --- a/launcher/updater/UpdateChecker_test.cpp +++ b/launcher/updater/UpdateChecker_test.cpp @@ -42,38 +42,32 @@ slots: void tst_ChannelListParsing_data() { - QTest::addColumn("channel"); QTest::addColumn("channelUrl"); QTest::addColumn("hasChannels"); QTest::addColumn("valid"); QTest::addColumn >("result"); QTest::newRow("garbage") - << QString() << findTestDataUrl("data/garbageChannels.json") << false << false << QList(); QTest::newRow("errors") - << QString() << findTestDataUrl("data/errorChannels.json") << false << true << QList(); QTest::newRow("no channels") - << QString() << findTestDataUrl("data/noChannels.json") << false << true << QList(); QTest::newRow("one channel") - << QString("develop") << findTestDataUrl("data/oneChannel.json") << true << true << (QList() << UpdateChecker::ChannelListEntry{"develop", "Develop", "The channel called \"develop\"", "http://example.org/stuff"}); QTest::newRow("several channels") - << QString("develop") << findTestDataUrl("data/channels.json") << true << true @@ -84,15 +78,13 @@ slots: } void tst_ChannelListParsing() { - - QFETCH(QString, channel); QFETCH(QString, channelUrl); QFETCH(bool, hasChannels); QFETCH(bool, valid); QFETCH(QList, result); shared_qobject_ptr nam = new QNetworkAccessManager(); - UpdateChecker checker(nam, channelUrl, channel, 0); + UpdateChecker checker(nam, channelUrl, 0); QSignalSpy channelListLoadedSpy(&checker, SIGNAL(channelListLoaded())); QVERIFY(channelListLoadedSpy.isValid()); @@ -116,12 +108,11 @@ slots: void tst_UpdateChecking() { - QString channel = "develop"; QString channelUrl = findTestDataUrl("data/channels.json"); int currentBuild = 2; shared_qobject_ptr nam = new QNetworkAccessManager(); - UpdateChecker checker(nam, channelUrl, channel, currentBuild); + UpdateChecker checker(nam, channelUrl, currentBuild); QSignalSpy updateAvailableSpy(&checker, SIGNAL(updateAvailable(GoUpdate::Status))); QVERIFY(updateAvailableSpy.isValid()); @@ -133,7 +124,7 @@ slots: qDebug() << "CWD:" << QDir::current().absolutePath(); checker.m_channels[0].url = findTestDataUrl("data/"); - checker.checkForUpdate(channel, false); + checker.checkForUpdate(false); QVERIFY(updateAvailableSpy.wait());