diff options
Diffstat (limited to 'launcher/ui')
-rw-r--r-- | launcher/ui/MainWindow.cpp | 89 | ||||
-rw-r--r-- | launcher/ui/MainWindow.h | 9 | ||||
-rw-r--r-- | launcher/ui/pages/global/APIPage.cpp (renamed from launcher/ui/pages/global/PastePage.cpp) | 20 | ||||
-rw-r--r-- | launcher/ui/pages/global/APIPage.h (renamed from launcher/ui/pages/global/PastePage.h) | 18 | ||||
-rw-r--r-- | launcher/ui/pages/global/APIPage.ui (renamed from launcher/ui/pages/global/PastePage.ui) | 60 | ||||
-rw-r--r-- | launcher/ui/pages/global/AccountListPage.cpp | 5 | ||||
-rw-r--r-- | launcher/ui/pages/instance/LegacyUpgradePage.ui | 9 | ||||
-rw-r--r-- | launcher/ui/pages/modplatform/flame/FlameModPage.cpp | 22 | ||||
-rw-r--r-- | launcher/ui/pages/modplatform/flame/FlameModPage.h | 2 | ||||
-rw-r--r-- | launcher/ui/pages/modplatform/modrinth/ModrinthModel.cpp | 8 | ||||
-rw-r--r-- | launcher/ui/pages/modplatform/modrinth/ModrinthPage.cpp | 23 | ||||
-rw-r--r-- | launcher/ui/pages/modplatform/modrinth/ModrinthPage.h | 2 | ||||
-rw-r--r-- | launcher/ui/widgets/LanguageSelectionWidget.cpp | 3 |
13 files changed, 223 insertions, 47 deletions
diff --git a/launcher/ui/MainWindow.cpp b/launcher/ui/MainWindow.cpp index 202924ff..32b27afb 100644 --- a/launcher/ui/MainWindow.cpp +++ b/launcher/ui/MainWindow.cpp @@ -58,6 +58,7 @@ #include <BuildConfig.h> #include <net/NetJob.h> #include <net/Download.h> +#include <news/NewsChecker.h> #include <notifications/NotificationChecker.h> #include <tools/BaseProfiler.h> #include <updater/DownloadTask.h> @@ -200,6 +201,7 @@ public: //TranslatedAction actionRefresh; TranslatedAction actionCheckUpdate; TranslatedAction actionSettings; + TranslatedAction actionMoreNews; TranslatedAction actionManageAccounts; TranslatedAction actionLaunchInstance; TranslatedAction actionRenameInstance; @@ -244,6 +246,7 @@ public: TranslatedToolbar mainToolBar; TranslatedToolbar instanceToolBar; + TranslatedToolbar newsToolBar; QVector<TranslatedToolbar *> all_toolbars; bool m_kill = false; @@ -426,6 +429,29 @@ public: MainWindow->setStatusBar(statusBar); } + void createNewsToolbar(QMainWindow *MainWindow) + { + newsToolBar = TranslatedToolbar(MainWindow); + newsToolBar->setObjectName(QStringLiteral("newsToolBar")); + newsToolBar->setMovable(false); + newsToolBar->setAllowedAreas(Qt::BottomToolBarArea); + newsToolBar->setIconSize(QSize(16, 16)); + newsToolBar->setToolButtonStyle(Qt::ToolButtonTextBesideIcon); + newsToolBar->setFloatable(false); + newsToolBar->setWindowTitle(QT_TRANSLATE_NOOP("MainWindow", "News Toolbar")); + + actionMoreNews = TranslatedAction(MainWindow); + actionMoreNews->setObjectName(QStringLiteral("actionMoreNews")); + actionMoreNews->setIcon(APPLICATION->getThemedIcon("news")); + actionMoreNews.setTextId(QT_TRANSLATE_NOOP("MainWindow", "More news...")); + actionMoreNews.setTooltipId(QT_TRANSLATE_NOOP("MainWindow", "Open the development blog to read more news about %1.")); + all_actions.append(&actionMoreNews); + newsToolBar->addAction(actionMoreNews); + + all_toolbars.append(&newsToolBar); + MainWindow->addToolBar(Qt::BottomToolBarArea, newsToolBar); + } + void createInstanceToolbar(QMainWindow *MainWindow) { instanceToolBar = TranslatedToolbar(MainWindow); @@ -610,6 +636,7 @@ public: MainWindow->setCentralWidget(centralWidget); createStatusBar(MainWindow); + createNewsToolbar(MainWindow); createInstanceToolbar(MainWindow); retranslateUi(MainWindow); @@ -664,6 +691,20 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new MainWindow connect(secretEventFilter, &KonamiCode::triggered, this, &MainWindow::konamiTriggered); } + // Add the news label to the news toolbar. + { + m_newsChecker.reset(new NewsChecker(APPLICATION->network(), BuildConfig.NEWS_RSS_URL)); + newsLabel = new QToolButton(); + newsLabel->setIcon(APPLICATION->getThemedIcon("news")); + newsLabel->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred); + newsLabel->setToolButtonStyle(Qt::ToolButtonTextBesideIcon); + newsLabel->setFocusPolicy(Qt::NoFocus); + ui->newsToolBar->insertWidget(ui->actionMoreNews, newsLabel); + QObject::connect(newsLabel, &QAbstractButton::clicked, this, &MainWindow::newsButtonClicked); + QObject::connect(m_newsChecker.get(), &NewsChecker::newsLoaded, this, &MainWindow::updateNewsLabel); + updateNewsLabel(); + } + // Create the instance list widget { view = new InstanceView(ui->centralWidget); @@ -768,6 +809,13 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new MainWindow // TODO: refresh accounts here? // auto accounts = APPLICATION->accounts(); + // load the news + { + m_newsChecker->reloadNews(); + updateNewsLabel(); + } + + if(BuildConfig.UPDATER_ENABLED) { bool updatesAllowed = APPLICATION->updatesAreAllowed(); @@ -1141,6 +1189,29 @@ bool MainWindow::eventFilter(QObject *obj, QEvent *ev) return QMainWindow::eventFilter(obj, ev); } +void MainWindow::updateNewsLabel() +{ + if (m_newsChecker->isLoadingNews()) + { + newsLabel->setText(tr("Loading news...")); + newsLabel->setEnabled(false); + } + else + { + QList<NewsEntryPtr> entries = m_newsChecker->getNewsEntries(); + if (entries.length() > 0) + { + newsLabel->setText(entries[0]->title); + newsLabel->setEnabled(true); + } + else + { + newsLabel->setText(tr("No news available.")); + newsLabel->setEnabled(false); + } + } +} + void MainWindow::updateAvailable(GoUpdate::Status status) { if(!APPLICATION->updatesAreAllowed()) @@ -1614,6 +1685,24 @@ void MainWindow::on_actionReportBug_triggered() DesktopServices::openUrl(QUrl(BuildConfig.BUG_TRACKER_URL)); } +void MainWindow::on_actionMoreNews_triggered() +{ + DesktopServices::openUrl(QUrl(BuildConfig.NEWS_OPEN_URL)); +} + +void MainWindow::newsButtonClicked() +{ + QList<NewsEntryPtr> entries = m_newsChecker->getNewsEntries(); + if (entries.count() > 0) + { + DesktopServices::openUrl(QUrl(entries[0]->link)); + } + else + { + DesktopServices::openUrl(QUrl(BuildConfig.NEWS_OPEN_URL)); + } +} + void MainWindow::on_actionAbout_triggered() { AboutDialog dialog(this); diff --git a/launcher/ui/MainWindow.h b/launcher/ui/MainWindow.h index 38d925a9..f6940ab0 100644 --- a/launcher/ui/MainWindow.h +++ b/launcher/ui/MainWindow.h @@ -27,6 +27,7 @@ #include "updater/GoUpdate.h" class LaunchController; +class NewsChecker; class NotificationChecker; class QToolButton; class InstanceProxyModel; @@ -108,6 +109,10 @@ private slots: void on_actionReportBug_triggered(); + void on_actionMoreNews_triggered(); + + void newsButtonClicked(); + void on_actionLaunchInstance_triggered(); void on_actionLaunchInstanceOffline_triggered(); @@ -169,6 +174,8 @@ private slots: void repopulateAccountsMenu(); + void updateNewsLabel(); + /*! * Runs the DownloadTask and installs updates. */ @@ -198,12 +205,14 @@ private: // these are managed by Qt's memory management model! InstanceView *view = nullptr; InstanceProxyModel *proxymodel = nullptr; + QToolButton *newsLabel = nullptr; QLabel *m_statusLeft = nullptr; QLabel *m_statusCenter = nullptr; QMenu *accountMenu = nullptr; QToolButton *accountMenuButton = nullptr; KonamiCode * secretEventFilter = nullptr; + unique_qobject_ptr<NewsChecker> m_newsChecker; unique_qobject_ptr<NotificationChecker> m_notificationChecker; InstancePtr m_selectedInstance; diff --git a/launcher/ui/pages/global/PastePage.cpp b/launcher/ui/pages/global/APIPage.cpp index 7c69e1a4..ad79e00c 100644 --- a/launcher/ui/pages/global/PastePage.cpp +++ b/launcher/ui/pages/global/APIPage.cpp @@ -13,8 +13,8 @@ * limitations under the License. */ -#include "PastePage.h" -#include "ui_PastePage.h" +#include "APIPage.h" +#include "ui_APIPage.h" #include <QMessageBox> #include <QFileDialog> @@ -26,9 +26,9 @@ #include "tools/BaseProfiler.h" #include "Application.h" -PastePage::PastePage(QWidget *parent) : +APIPage::APIPage(QWidget *parent) : QWidget(parent), - ui(new Ui::PastePage) + ui(new Ui::APIPage) { static QRegularExpression validUrlRegExp("https?://.+"); ui->setupUi(this); @@ -37,26 +37,30 @@ PastePage::PastePage(QWidget *parent) : loadSettings(); } -PastePage::~PastePage() +APIPage::~APIPage() { delete ui; } -void PastePage::loadSettings() +void APIPage::loadSettings() { auto s = APPLICATION->settings(); QString pastebinURL = s->get("PastebinURL").toString(); ui->urlChoices->setCurrentText(pastebinURL); + QString msaClientID = s->get("MSAClientIDOverride").toString(); + ui->msaClientID->setText(msaClientID); } -void PastePage::applySettings() +void APIPage::applySettings() { auto s = APPLICATION->settings(); QString pastebinURL = ui->urlChoices->currentText(); s->set("PastebinURL", pastebinURL); + QString msaClientID = ui->msaClientID->text(); + s->set("MSAClientIDOverride", msaClientID); } -bool PastePage::apply() +bool APIPage::apply() { applySettings(); return true; diff --git a/launcher/ui/pages/global/PastePage.h b/launcher/ui/pages/global/APIPage.h index d475dfd9..9474ebbb 100644 --- a/launcher/ui/pages/global/PastePage.h +++ b/launcher/ui/pages/global/APIPage.h @@ -21,32 +21,32 @@ #include <Application.h> namespace Ui { -class PastePage; +class APIPage; } -class PastePage : public QWidget, public BasePage +class APIPage : public QWidget, public BasePage { Q_OBJECT public: - explicit PastePage(QWidget *parent = 0); - ~PastePage(); + explicit APIPage(QWidget *parent = 0); + ~APIPage(); QString displayName() const override { - return tr("Log Upload"); + return tr("APIs"); } QIcon icon() const override { - return APPLICATION->getThemedIcon("log"); + return APPLICATION->getThemedIcon("worlds"); } QString id() const override { - return "log-upload"; + return "apis"; } QString helpPage() const override { - return "Log-Upload"; + return "APIs"; } virtual bool apply() override; @@ -55,6 +55,6 @@ private: void applySettings(); private: - Ui::PastePage *ui; + Ui::APIPage *ui; }; diff --git a/launcher/ui/pages/global/PastePage.ui b/launcher/ui/pages/global/APIPage.ui index 2d13a765..28c53b79 100644 --- a/launcher/ui/pages/global/PastePage.ui +++ b/launcher/ui/pages/global/APIPage.ui @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="UTF-8"?> <ui version="4.0"> - <class>PastePage</class> - <widget class="QWidget" name="PastePage"> + <class>APIPage</class> + <widget class="QWidget" name="APIPage"> <property name="geometry"> <rect> <x>0</x> @@ -34,7 +34,7 @@ </attribute> <layout class="QVBoxLayout" name="verticalLayout_2"> <item> - <widget class="QGroupBox" name="groupBox_2"> + <widget class="QGroupBox" name="groupBox_paste"> <property name="title"> <string>Pastebin URL</string> </property> @@ -101,6 +101,58 @@ </widget> </item> <item> + <widget class="QGroupBox" name="groupBox_msa"> + <property name="title"> + <string>Microsoft Authentication</string> + </property> + <layout class="QVBoxLayout" name="verticalLayout_4"> + <item> + <widget class="Line" name="line_2"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + </widget> + </item> + <item> + <widget class="QLabel" name="label_3"> + <property name="text"> + <string>Note: you probably don't need to set this if logging in via Microsoft Authentication already works.</string> + </property> + <property name="textFormat"> + <enum>Qt::RichText</enum> + </property> + <property name="wordWrap"> + <bool>true</bool> + </property> + </widget> + </item> + <item> + <widget class="QLineEdit" name="msaClientID"> + <property name="placeholderText"> + <string>(Default)</string> + </property> + </widget> + </item> + <item> + <widget class="QLabel" name="label_4"> + <property name="text"> + <string>Enter a custom client ID for Microsoft Authentication here. </string> + </property> + <property name="textFormat"> + <enum>Qt::RichText</enum> + </property> + <property name="wordWrap"> + <bool>true</bool> + </property> + <property name="openExternalLinks"> + <bool>true</bool> + </property> + </widget> + </item> + </layout> + </widget> + </item> + <item> <spacer name="verticalSpacer"> <property name="orientation"> <enum>Qt::Vertical</enum> @@ -108,7 +160,7 @@ <property name="sizeHint" stdset="0"> <size> <width>20</width> - <height>216</height> + <height>40</height> </size> </property> </spacer> diff --git a/launcher/ui/pages/global/AccountListPage.cpp b/launcher/ui/pages/global/AccountListPage.cpp index 396d320f..eb1ee8d3 100644 --- a/launcher/ui/pages/global/AccountListPage.cpp +++ b/launcher/ui/pages/global/AccountListPage.cpp @@ -73,7 +73,10 @@ AccountListPage::AccountListPage(QWidget *parent) updateButtonStates(); // Xbox authentication won't work without a client identifier, so disable the button if it is missing - ui->actionAddMicrosoft->setVisible(BuildConfig.MSA_CLIENT_ID.size() != 0); + if (APPLICATION->getMSAClientID().isEmpty()) { + ui->actionAddMicrosoft->setVisible(false); + ui->actionAddMicrosoft->setToolTip(tr("No Microsoft Authentication client ID was set.")); + } } AccountListPage::~AccountListPage() diff --git a/launcher/ui/pages/instance/LegacyUpgradePage.ui b/launcher/ui/pages/instance/LegacyUpgradePage.ui index 4e803358..b22c03e5 100644 --- a/launcher/ui/pages/instance/LegacyUpgradePage.ui +++ b/launcher/ui/pages/instance/LegacyUpgradePage.ui @@ -26,7 +26,14 @@ <item> <widget class="QTextBrowser" name="textBrowser"> <property name="html"> - <string><html><body><h1>Upgrade is required</h1><p>PolyMC now supports old Minecraft versions and all the required features in the new (OneSix) instance format. As a consequence, the old (Legacy) format has been entirely disabled and old instances need to be upgraded.</p><p>The upgrade will create a new instance with the same contents as the current one, in the new format. The original instance will remain untouched, in case anything goes wrong in the process.</p><p>Please report any issues on our <a href="https://github.com/PolyMC/PolyMC/issues">github issues page</a>.</p><p>There is also a <a href="https://discord.gg/GtPmv93">discord channel for testing here</a>.</p></body></html></string> + <string><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'Noto Sans'; font-size:11pt; font-weight:400; font-style:normal;"> +<h1 style=" margin-top:18px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:xx-large; font-weight:600;">Upgrade is required</span></h1> +<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">PolyMC now supports old Minecraft versions and all the required features in the new (OneSix) instance format. As a consequence, the old (Legacy) format has been entirely disabled and old instances need to be upgraded.</p> +<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">The upgrade will create a new instance with the same contents as the current one, in the new format. The original instance will remain untouched, in case anything goes wrong in the process.</p> +<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Please report any issues on our <a href="https://github.com/PolyMC/PolyMC/issues"><span style=" text-decoration: underline; color:#3584e4;">github issues page</span></a>.</p></body></html></string> </property> <property name="openExternalLinks"> <bool>true</bool> diff --git a/launcher/ui/pages/modplatform/flame/FlameModPage.cpp b/launcher/ui/pages/modplatform/flame/FlameModPage.cpp index 80f3de19..a816c681 100644 --- a/launcher/ui/pages/modplatform/flame/FlameModPage.cpp +++ b/launcher/ui/pages/modplatform/flame/FlameModPage.cpp @@ -140,14 +140,15 @@ void FlameModPage::onSelectionChanged(QModelIndex first, QModelIndex second) auto packProfile = ((MinecraftInstance *)m_instance)->getPackProfile(); QString mcVersion = packProfile->getComponentVersion("net.minecraft"); QString loaderString = (packProfile->getComponentVersion("net.minecraftforge").isEmpty()) ? "fabric" : "forge"; - for(const auto& version : current.versions) { + for(int i = 0; i < current.versions.size(); i++) { + auto version = current.versions[i]; if(!version.mcVersion.contains(mcVersion)){ continue; } - ui->versionSelectionBox->addItem(version.version, QVariant(version.downloadUrl)); + ui->versionSelectionBox->addItem(version.version, QVariant(i)); } if(ui->versionSelectionBox->count() == 0){ - ui->versionSelectionBox->addItem(tr("No Valid Version found!"), QVariant("")); + ui->versionSelectionBox->addItem(tr("No Valid Version found!"), QVariant(-1)); } suggestCurrent(); @@ -156,11 +157,11 @@ void FlameModPage::onSelectionChanged(QModelIndex first, QModelIndex second) } else { - for(auto version : current.versions) { - ui->versionSelectionBox->addItem(version.version, QVariant(version.downloadUrl)); + for(int i = 0; i < current.versions.size(); i++) { + ui->versionSelectionBox->addItem(current.versions[i].version, QVariant(i)); } if(ui->versionSelectionBox->count() == 0){ - ui->versionSelectionBox->addItem(tr("No Valid Version found!"), QVariant("")); + ui->versionSelectionBox->addItem(tr("No Valid Version found!"), QVariant(-1)); } suggestCurrent(); } @@ -173,22 +174,23 @@ void FlameModPage::suggestCurrent() return; } - if (selectedVersion.isEmpty()) + if (selectedVersion == -1) { dialog->setSuggestedMod(); return; } - dialog->setSuggestedMod(current.name, new ModDownloadTask(selectedVersion, current.versions.at(0).fileName ,dialog->mods)); + auto version = current.versions[selectedVersion]; + dialog->setSuggestedMod(current.name, new ModDownloadTask(version.downloadUrl, version.fileName , dialog->mods)); } void FlameModPage::onVersionSelectionChanged(QString data) { if(data.isNull() || data.isEmpty()) { - selectedVersion = ""; + selectedVersion = -1; return; } - selectedVersion = ui->versionSelectionBox->currentData().toString(); + selectedVersion = ui->versionSelectionBox->currentData().toInt(); suggestCurrent(); } diff --git a/launcher/ui/pages/modplatform/flame/FlameModPage.h b/launcher/ui/pages/modplatform/flame/FlameModPage.h index 85c68620..8fa3248a 100644 --- a/launcher/ui/pages/modplatform/flame/FlameModPage.h +++ b/launcher/ui/pages/modplatform/flame/FlameModPage.h @@ -63,5 +63,5 @@ private: FlameMod::ListModel* listModel = nullptr; FlameMod::IndexedPack current; - QString selectedVersion; + int selectedVersion = -1; }; diff --git a/launcher/ui/pages/modplatform/modrinth/ModrinthModel.cpp b/launcher/ui/pages/modplatform/modrinth/ModrinthModel.cpp index 71574156..5a18830a 100644 --- a/launcher/ui/pages/modplatform/modrinth/ModrinthModel.cpp +++ b/launcher/ui/pages/modplatform/modrinth/ModrinthModel.cpp @@ -3,12 +3,14 @@ #include "minecraft/MinecraftInstance.h" #include "minecraft/PackProfile.h" #include "ModrinthPage.h" +#include "ui/dialogs/ModDownloadDialog.h" #include <Json.h> #include <MMCStrings.h> #include <Version.h> #include <QtMath> +#include <QMessageBox> namespace Modrinth { @@ -250,6 +252,12 @@ void Modrinth::ListModel::searchRequestFinished() void Modrinth::ListModel::searchRequestFailed(QString reason) { + if(jobPtr->first()->m_reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt() == 409){ + //409 Gone, notify user to update + QMessageBox::critical(nullptr, tr("Error"), tr("Modrinth API version too old!\nPlease update PolyMC!")); + //self-destruct + ((ModDownloadDialog *)((ModrinthPage *)parent())->parentWidget())->reject(); + } jobPtr.reset(); if(searchState == ResetRequested) { diff --git a/launcher/ui/pages/modplatform/modrinth/ModrinthPage.cpp b/launcher/ui/pages/modplatform/modrinth/ModrinthPage.cpp index ee3c9e76..c5a54c29 100644 --- a/launcher/ui/pages/modplatform/modrinth/ModrinthPage.cpp +++ b/launcher/ui/pages/modplatform/modrinth/ModrinthPage.cpp @@ -125,14 +125,15 @@ void ModrinthPage::onSelectionChanged(QModelIndex first, QModelIndex second) auto packProfile = ((MinecraftInstance *)m_instance)->getPackProfile(); QString mcVersion = packProfile->getComponentVersion("net.minecraft"); QString loaderString = (packProfile->getComponentVersion("net.minecraftforge").isEmpty()) ? "fabric" : "forge"; - for(const auto& version : current.versions) { + for(int i = 0; i < current.versions.size(); i++) { + auto version = current.versions[i]; if(!version.mcVersion.contains(mcVersion) || !version.loaders.contains(loaderString)){ continue; } - ui->versionSelectionBox->addItem(version.version, QVariant(version.downloadUrl)); + ui->versionSelectionBox->addItem(version.version, QVariant(i)); } if(ui->versionSelectionBox->count() == 0){ - ui->versionSelectionBox->addItem(tr("No Valid Version found !"), QVariant("")); + ui->versionSelectionBox->addItem(tr("No Valid Version found !"), QVariant(-1)); } suggestCurrent(); @@ -141,11 +142,11 @@ void ModrinthPage::onSelectionChanged(QModelIndex first, QModelIndex second) } else { - for(auto version : current.versions) { - ui->versionSelectionBox->addItem(version.version, QVariant(version.downloadUrl)); + for(int i = 0; i < current.versions.size(); i++) { + ui->versionSelectionBox->addItem(current.versions[i].version, QVariant(i)); } if(ui->versionSelectionBox->count() == 0){ - ui->versionSelectionBox->addItem(tr("No Valid Version found !"), QVariant("")); + ui->versionSelectionBox->addItem(tr("No Valid Version found !"), QVariant(-1)); } suggestCurrent(); } @@ -158,22 +159,22 @@ void ModrinthPage::suggestCurrent() return; } - if (selectedVersion.isEmpty()) + if (selectedVersion == -1) { dialog->setSuggestedMod(); return; } - - dialog->setSuggestedMod(current.name, new ModDownloadTask(selectedVersion, current.versions.at(0).fileName ,dialog->mods)); + auto version = current.versions[selectedVersion]; + dialog->setSuggestedMod(current.name, new ModDownloadTask(version.downloadUrl, version.fileName , dialog->mods)); } void ModrinthPage::onVersionSelectionChanged(QString data) { if(data.isNull() || data.isEmpty()) { - selectedVersion = ""; + selectedVersion = -1; return; } - selectedVersion = ui->versionSelectionBox->currentData().toString(); + selectedVersion = ui->versionSelectionBox->currentData().toInt(); suggestCurrent(); } diff --git a/launcher/ui/pages/modplatform/modrinth/ModrinthPage.h b/launcher/ui/pages/modplatform/modrinth/ModrinthPage.h index 3748d836..3c517069 100644 --- a/launcher/ui/pages/modplatform/modrinth/ModrinthPage.h +++ b/launcher/ui/pages/modplatform/modrinth/ModrinthPage.h @@ -63,5 +63,5 @@ private: Modrinth::ListModel* listModel = nullptr; Modrinth::IndexedPack current; - QString selectedVersion; + int selectedVersion = -1; }; diff --git a/launcher/ui/widgets/LanguageSelectionWidget.cpp b/launcher/ui/widgets/LanguageSelectionWidget.cpp index 964d2b7c..256b09da 100644 --- a/launcher/ui/widgets/LanguageSelectionWidget.cpp +++ b/launcher/ui/widgets/LanguageSelectionWidget.cpp @@ -5,6 +5,7 @@ #include <QHeaderView> #include <QLabel> #include "Application.h" +#include "BuildConfig.h" #include "translations/TranslationsModel.h" #include "settings/Setting.h" @@ -52,7 +53,7 @@ QString LanguageSelectionWidget::getSelectedLanguageKey() const void LanguageSelectionWidget::retranslate() { QString text = tr("Don't see your language or the quality is poor?<br/><a href=\"%1\">Help us with translations!</a>") - .arg("https://github.com/MultiMC/Launcher/wiki/Translating-MultiMC"); + .arg(BuildConfig.TRANSLATIONS_URL); helpUsLabel->setText(text); } |