From d4b522b6cb5281df02da54cd9e0f6445770e7ec7 Mon Sep 17 00:00:00 2001
From: bexnoss <82064510+bexnoss@users.noreply.github.com>
Date: Wed, 12 Jan 2022 10:36:26 +0100
Subject: Add offline mode UI
---
launcher/CMakeLists.txt | 3 +
launcher/ui/dialogs/OfflineLoginDialog.cpp | 113 +++++++++++++++++++++++++++
launcher/ui/dialogs/OfflineLoginDialog.h | 58 ++++++++++++++
launcher/ui/dialogs/OfflineLoginDialog.ui | 67 ++++++++++++++++
launcher/ui/pages/global/AccountListPage.cpp | 17 ++++
launcher/ui/pages/global/AccountListPage.h | 1 +
launcher/ui/pages/global/AccountListPage.ui | 6 ++
7 files changed, 265 insertions(+)
create mode 100644 launcher/ui/dialogs/OfflineLoginDialog.cpp
create mode 100644 launcher/ui/dialogs/OfflineLoginDialog.h
create mode 100644 launcher/ui/dialogs/OfflineLoginDialog.ui
diff --git a/launcher/CMakeLists.txt b/launcher/CMakeLists.txt
index b5c52afa..0052f0e2 100644
--- a/launcher/CMakeLists.txt
+++ b/launcher/CMakeLists.txt
@@ -769,6 +769,8 @@ SET(LAUNCHER_SOURCES
ui/dialogs/LoginDialog.h
ui/dialogs/MSALoginDialog.cpp
ui/dialogs/MSALoginDialog.h
+ ui/dialogs/OfflineLoginDialog.cpp
+ ui/dialogs/OfflineLoginDialog.h
ui/dialogs/NewComponentDialog.cpp
ui/dialogs/NewComponentDialog.h
ui/dialogs/NewInstanceDialog.cpp
@@ -880,6 +882,7 @@ qt5_wrap_ui(LAUNCHER_UI
ui/dialogs/ExportInstanceDialog.ui
ui/dialogs/IconPickerDialog.ui
ui/dialogs/MSALoginDialog.ui
+ ui/dialogs/OfflineLoginDialog.ui
ui/dialogs/AboutDialog.ui
ui/dialogs/LoginDialog.ui
ui/dialogs/EditAccountDialog.ui
diff --git a/launcher/ui/dialogs/OfflineLoginDialog.cpp b/launcher/ui/dialogs/OfflineLoginDialog.cpp
new file mode 100644
index 00000000..f6ecc4e9
--- /dev/null
+++ b/launcher/ui/dialogs/OfflineLoginDialog.cpp
@@ -0,0 +1,113 @@
+/* Copyright 2013-2021 MultiMC Contributors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "OfflineLoginDialog.h"
+#include "ui_OfflineLoginDialog.h"
+
+#include "minecraft/auth/AccountTask.h"
+
+#include
+
+OfflineLoginDialog::OfflineLoginDialog(QWidget *parent) : QDialog(parent), ui(new Ui::OfflineLoginDialog)
+{
+ ui->setupUi(this);
+ ui->progressBar->setVisible(false);
+ ui->buttonBox->button(QDialogButtonBox::Ok)->setEnabled(false);
+
+ connect(ui->buttonBox, &QDialogButtonBox::accepted, this, &QDialog::accept);
+ connect(ui->buttonBox, &QDialogButtonBox::rejected, this, &QDialog::reject);
+}
+
+OfflineLoginDialog::~OfflineLoginDialog()
+{
+ delete ui;
+}
+
+// Stage 1: User interaction
+void OfflineLoginDialog::accept()
+{
+ setUserInputsEnabled(false);
+ ui->progressBar->setVisible(true);
+
+ // Setup the login task and start it
+ m_account = MinecraftAccount::createFromUsername(ui->userTextBox->text());
+ m_loginTask = m_account->login("TODO: create offline mode account flow");
+ connect(m_loginTask.get(), &Task::failed, this, &OfflineLoginDialog::onTaskFailed);
+ connect(m_loginTask.get(), &Task::succeeded, this, &OfflineLoginDialog::onTaskSucceeded);
+ connect(m_loginTask.get(), &Task::status, this, &OfflineLoginDialog::onTaskStatus);
+ connect(m_loginTask.get(), &Task::progress, this, &OfflineLoginDialog::onTaskProgress);
+ m_loginTask->start();
+}
+
+void OfflineLoginDialog::setUserInputsEnabled(bool enable)
+{
+ ui->userTextBox->setEnabled(enable);
+ ui->buttonBox->setEnabled(enable);
+}
+
+// Enable the OK button only when the textbox contains something.
+void OfflineLoginDialog::on_userTextBox_textEdited(const QString &newText)
+{
+ ui->buttonBox->button(QDialogButtonBox::Ok)
+ ->setEnabled(!newText.isEmpty());
+}
+
+void OfflineLoginDialog::onTaskFailed(const QString &reason)
+{
+ // Set message
+ auto lines = reason.split('\n');
+ QString processed;
+ for(auto line: lines) {
+ if(line.size()) {
+ processed += "" + line + " ";
+ }
+ else {
+ processed += " ";
+ }
+ }
+ ui->label->setText(processed);
+
+ // Re-enable user-interaction
+ setUserInputsEnabled(true);
+ ui->progressBar->setVisible(false);
+}
+
+void OfflineLoginDialog::onTaskSucceeded()
+{
+ QDialog::accept();
+}
+
+void OfflineLoginDialog::onTaskStatus(const QString &status)
+{
+ ui->label->setText(status);
+}
+
+void OfflineLoginDialog::onTaskProgress(qint64 current, qint64 total)
+{
+ ui->progressBar->setMaximum(total);
+ ui->progressBar->setValue(current);
+}
+
+// Public interface
+MinecraftAccountPtr OfflineLoginDialog::newAccount(QWidget *parent, QString msg)
+{
+ OfflineLoginDialog dlg(parent);
+ dlg.ui->label->setText(msg);
+ if (dlg.exec() == QDialog::Accepted)
+ {
+ return dlg.m_account;
+ }
+ return 0;
+}
diff --git a/launcher/ui/dialogs/OfflineLoginDialog.h b/launcher/ui/dialogs/OfflineLoginDialog.h
new file mode 100644
index 00000000..ba0c1823
--- /dev/null
+++ b/launcher/ui/dialogs/OfflineLoginDialog.h
@@ -0,0 +1,58 @@
+/* Copyright 2013-2021 MultiMC Contributors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#pragma once
+
+#include
+#include
+
+#include "minecraft/auth/MinecraftAccount.h"
+#include "tasks/Task.h"
+
+namespace Ui
+{
+class OfflineLoginDialog;
+}
+
+class OfflineLoginDialog : public QDialog
+{
+ Q_OBJECT
+
+public:
+ ~OfflineLoginDialog();
+
+ static MinecraftAccountPtr newAccount(QWidget *parent, QString message);
+
+private:
+ explicit OfflineLoginDialog(QWidget *parent = 0);
+
+ void setUserInputsEnabled(bool enable);
+
+protected
+slots:
+ void accept();
+
+ void onTaskFailed(const QString &reason);
+ void onTaskSucceeded();
+ void onTaskStatus(const QString &status);
+ void onTaskProgress(qint64 current, qint64 total);
+
+ void on_userTextBox_textEdited(const QString &newText);
+
+private:
+ Ui::OfflineLoginDialog *ui;
+ MinecraftAccountPtr m_account;
+ Task::Ptr m_loginTask;
+};
diff --git a/launcher/ui/dialogs/OfflineLoginDialog.ui b/launcher/ui/dialogs/OfflineLoginDialog.ui
new file mode 100644
index 00000000..d8964a2e
--- /dev/null
+++ b/launcher/ui/dialogs/OfflineLoginDialog.ui
@@ -0,0 +1,67 @@
+
+
+ OfflineLoginDialog
+
+
+
+ 0
+ 0
+ 400
+ 150
+
+
+
+
+ 0
+ 0
+
+
+
+ Add Account
+
+
+
+
+
+ Message label placeholder.
+
+
+ Qt::RichText
+
+
+ Qt::LinksAccessibleByKeyboard|Qt::LinksAccessibleByMouse|Qt::TextBrowserInteraction|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse
+
+
+
+
+
+
+ Username
+
+
+
+
+
+
+ 69
+
+
+ false
+
+
+
+
+
+
+ Qt::Horizontal
+
+
+ QDialogButtonBox::Cancel|QDialogButtonBox::Ok
+
+
+
+
+
+
+
+
diff --git a/launcher/ui/pages/global/AccountListPage.cpp b/launcher/ui/pages/global/AccountListPage.cpp
index b8da6c75..b9aa7628 100644
--- a/launcher/ui/pages/global/AccountListPage.cpp
+++ b/launcher/ui/pages/global/AccountListPage.cpp
@@ -24,6 +24,7 @@
#include "net/NetJob.h"
#include "ui/dialogs/ProgressDialog.h"
+#include "ui/dialogs/OfflineLoginDialog.h"
#include "ui/dialogs/LoginDialog.h"
#include "ui/dialogs/MSALoginDialog.h"
#include "ui/dialogs/CustomMessageBox.h"
@@ -153,6 +154,22 @@ void AccountListPage::on_actionAddMicrosoft_triggered()
}
}
+void AccountListPage::on_actionAddOffline_triggered()
+{
+ MinecraftAccountPtr account = OfflineLoginDialog::newAccount(
+ this,
+ tr("Please enter your desired username to add your offline account.")
+ );
+
+ if (account)
+ {
+ m_accounts->addAccount(account);
+ if (m_accounts->count() == 1) {
+ m_accounts->setDefaultAccount(account);
+ }
+ }
+}
+
void AccountListPage::on_actionRemove_triggered()
{
QModelIndexList selection = ui->listView->selectionModel()->selectedIndexes();
diff --git a/launcher/ui/pages/global/AccountListPage.h b/launcher/ui/pages/global/AccountListPage.h
index 1c65e708..841c3fd2 100644
--- a/launcher/ui/pages/global/AccountListPage.h
+++ b/launcher/ui/pages/global/AccountListPage.h
@@ -62,6 +62,7 @@ public:
public slots:
void on_actionAddMojang_triggered();
void on_actionAddMicrosoft_triggered();
+ void on_actionAddOffline_triggered();
void on_actionRemove_triggered();
void on_actionRefresh_triggered();
void on_actionSetDefault_triggered();
diff --git a/launcher/ui/pages/global/AccountListPage.ui b/launcher/ui/pages/global/AccountListPage.ui
index 29738c02..d21a92e2 100644
--- a/launcher/ui/pages/global/AccountListPage.ui
+++ b/launcher/ui/pages/global/AccountListPage.ui
@@ -54,6 +54,7 @@
+
@@ -103,6 +104,11 @@
Add Microsoft
+
+
+ Add Offline
+
+ Refresh
--
cgit
From a1ff3b1ee34c302ba52d773816207d30badab1eb Mon Sep 17 00:00:00 2001
From: bexnoss <82064510+bexnoss@users.noreply.github.com>
Date: Wed, 12 Jan 2022 14:26:02 +0100
Subject: Add offline mode support
---
launcher/CMakeLists.txt | 4 ++++
launcher/LaunchController.cpp | 6 ++++++
launcher/minecraft/auth/AccountData.cpp | 10 ++++++++-
launcher/minecraft/auth/AccountData.h | 3 ++-
launcher/minecraft/auth/AccountList.cpp | 2 +-
launcher/minecraft/auth/MinecraftAccount.cpp | 31 +++++++++++++++++++++++++++
launcher/minecraft/auth/MinecraftAccount.h | 12 +++++++++++
launcher/minecraft/auth/flows/Offline.cpp | 17 +++++++++++++++
launcher/minecraft/auth/flows/Offline.h | 22 +++++++++++++++++++
launcher/minecraft/auth/steps/OfflineStep.cpp | 18 ++++++++++++++++
launcher/minecraft/auth/steps/OfflineStep.h | 20 +++++++++++++++++
launcher/ui/dialogs/OfflineLoginDialog.cpp | 4 ++--
12 files changed, 144 insertions(+), 5 deletions(-)
create mode 100644 launcher/minecraft/auth/flows/Offline.cpp
create mode 100644 launcher/minecraft/auth/flows/Offline.h
create mode 100644 launcher/minecraft/auth/steps/OfflineStep.cpp
create mode 100644 launcher/minecraft/auth/steps/OfflineStep.h
diff --git a/launcher/CMakeLists.txt b/launcher/CMakeLists.txt
index 0052f0e2..df361447 100644
--- a/launcher/CMakeLists.txt
+++ b/launcher/CMakeLists.txt
@@ -221,7 +221,11 @@ set(MINECRAFT_SOURCES
minecraft/auth/flows/Mojang.h
minecraft/auth/flows/MSA.cpp
minecraft/auth/flows/MSA.h
+ minecraft/auth/flows/Offline.cpp
+ minecraft/auth/flows/Offline.h
+ minecraft/auth/steps/OfflineStep.cpp
+ minecraft/auth/steps/OfflineStep.h
minecraft/auth/steps/EntitlementsStep.cpp
minecraft/auth/steps/EntitlementsStep.h
minecraft/auth/steps/GetSkinStep.cpp
diff --git a/launcher/LaunchController.cpp b/launcher/LaunchController.cpp
index 7750be1a..32fc99cb 100644
--- a/launcher/LaunchController.cpp
+++ b/launcher/LaunchController.cpp
@@ -116,6 +116,12 @@ void LaunchController::login() {
m_session->wants_online = m_online;
m_accountToUse->fillSession(m_session);
+ // Launch immediately in true offline mode
+ if(m_accountToUse->isOffline()) {
+ launchInstance();
+ return;
+ }
+
switch(m_accountToUse->accountState()) {
case AccountState::Offline: {
m_session->wants_online = false;
diff --git a/launcher/minecraft/auth/AccountData.cpp b/launcher/minecraft/auth/AccountData.cpp
index 7526c951..9b84fe1a 100644
--- a/launcher/minecraft/auth/AccountData.cpp
+++ b/launcher/minecraft/auth/AccountData.cpp
@@ -314,6 +314,8 @@ bool AccountData::resumeStateFromV3(QJsonObject data) {
type = AccountType::MSA;
} else if (typeS == "Mojang") {
type = AccountType::Mojang;
+ } else if (typeS == "Offline") {
+ type = AccountType::Offline;
} else {
qWarning() << "Failed to parse account data: type is not recognized.";
return false;
@@ -363,6 +365,9 @@ QJsonObject AccountData::saveState() const {
tokenToJSONV3(output, xboxApiToken, "xrp-main");
tokenToJSONV3(output, mojangservicesToken, "xrp-mc");
}
+ else if (type == AccountType::Offline) {
+ output["type"] = "Offline";
+ }
tokenToJSONV3(output, yggdrasilToken, "ygg");
profileToJSONV3(output, minecraftProfile, "profile");
@@ -371,7 +376,7 @@ QJsonObject AccountData::saveState() const {
}
QString AccountData::userName() const {
- if(type != AccountType::Mojang) {
+ if(type == AccountType::MSA) {
return QString();
}
return yggdrasilToken.extra["userName"].toString();
@@ -427,6 +432,9 @@ QString AccountData::accountDisplayString() const {
case AccountType::Mojang: {
return userName();
}
+ case AccountType::Offline: {
+ return userName();
+ }
case AccountType::MSA: {
if(xboxApiToken.extra.contains("gtg")) {
return xboxApiToken.extra["gtg"].toString();
diff --git a/launcher/minecraft/auth/AccountData.h b/launcher/minecraft/auth/AccountData.h
index abf84e43..606c1ad1 100644
--- a/launcher/minecraft/auth/AccountData.h
+++ b/launcher/minecraft/auth/AccountData.h
@@ -38,7 +38,8 @@ struct MinecraftProfile {
enum class AccountType {
MSA,
- Mojang
+ Mojang,
+ Offline
};
enum class AccountState {
diff --git a/launcher/minecraft/auth/AccountList.cpp b/launcher/minecraft/auth/AccountList.cpp
index ef8b435d..04470e1c 100644
--- a/launcher/minecraft/auth/AccountList.cpp
+++ b/launcher/minecraft/auth/AccountList.cpp
@@ -302,7 +302,7 @@ QVariant AccountList::data(const QModelIndex &index, int role) const
}
case MigrationColumn: {
- if(account->isMSA()) {
+ if(account->isMSA() || account->isOffline()) {
return tr("N/A", "Can Migrate?");
}
if (account->canMigrate()) {
diff --git a/launcher/minecraft/auth/MinecraftAccount.cpp b/launcher/minecraft/auth/MinecraftAccount.cpp
index ed9e945e..6592be0f 100644
--- a/launcher/minecraft/auth/MinecraftAccount.cpp
+++ b/launcher/minecraft/auth/MinecraftAccount.cpp
@@ -30,6 +30,7 @@
#include "flows/MSA.h"
#include "flows/Mojang.h"
+#include "flows/Offline.h"
MinecraftAccount::MinecraftAccount(QObject* parent) : QObject(parent) {
data.internalId = QUuid::createUuid().toString().remove(QRegExp("[{}-]"));
@@ -68,6 +69,23 @@ MinecraftAccountPtr MinecraftAccount::createBlankMSA()
return account;
}
+MinecraftAccountPtr MinecraftAccount::createOffline(const QString &username)
+{
+ MinecraftAccountPtr account = new MinecraftAccount();
+ account->data.type = AccountType::Offline;
+ account->data.yggdrasilToken.token = "offline";
+ account->data.yggdrasilToken.validity = Katabasis::Validity::Certain;
+ account->data.yggdrasilToken.issueInstant = QDateTime::currentDateTimeUtc();
+ account->data.yggdrasilToken.extra["userName"] = username;
+ account->data.yggdrasilToken.extra["clientToken"] = QUuid::createUuid().toString().remove(QRegExp("[{}-]"));
+ account->data.minecraftEntitlement.ownsMinecraft = true;
+ account->data.minecraftEntitlement.canPlayMinecraft = true;
+ account->data.minecraftProfile.id = QUuid::createUuid().toString().remove(QRegExp("[{}-]"));
+ account->data.minecraftProfile.name = username;
+ account->data.minecraftProfile.validity = Katabasis::Validity::Certain;
+ return account;
+}
+
QJsonObject MinecraftAccount::saveToJson() const
{
@@ -111,6 +129,16 @@ shared_qobject_ptr MinecraftAccount::loginMSA() {
return m_currentTask;
}
+shared_qobject_ptr MinecraftAccount::loginOffline() {
+ Q_ASSERT(m_currentTask.get() == nullptr);
+
+ m_currentTask.reset(new OfflineLogin(&data));
+ connect(m_currentTask.get(), SIGNAL(succeeded()), SLOT(authSucceeded()));
+ connect(m_currentTask.get(), SIGNAL(failed(QString)), SLOT(authFailed(QString)));
+ emit activityChanged(true);
+ return m_currentTask;
+}
+
shared_qobject_ptr MinecraftAccount::refresh() {
if(m_currentTask) {
return m_currentTask;
@@ -119,6 +147,9 @@ shared_qobject_ptr MinecraftAccount::refresh() {
if(data.type == AccountType::MSA) {
m_currentTask.reset(new MSASilent(&data));
}
+ if(data.type == AccountType::Offline) {
+ m_currentTask.reset(new OfflineRefresh(&data));
+ }
else {
m_currentTask.reset(new MojangRefresh(&data));
}
diff --git a/launcher/minecraft/auth/MinecraftAccount.h b/launcher/minecraft/auth/MinecraftAccount.h
index 7ab3c746..6592f9c0 100644
--- a/launcher/minecraft/auth/MinecraftAccount.h
+++ b/launcher/minecraft/auth/MinecraftAccount.h
@@ -73,6 +73,8 @@ public: /* construction */
static MinecraftAccountPtr createBlankMSA();
+ static MinecraftAccountPtr createOffline(const QString &username);
+
static MinecraftAccountPtr loadFromJsonV2(const QJsonObject &json);
static MinecraftAccountPtr loadFromJsonV3(const QJsonObject &json);
@@ -89,6 +91,8 @@ public: /* manipulation */
shared_qobject_ptr loginMSA();
+ shared_qobject_ptr loginOffline();
+
shared_qobject_ptr refresh();
shared_qobject_ptr currentTask();
@@ -128,6 +132,10 @@ public: /* queries */
return data.type == AccountType::MSA;
}
+ bool isOffline() const {
+ return data.type == AccountType::Offline;
+ }
+
bool ownsMinecraft() const {
return data.minecraftEntitlement.ownsMinecraft;
}
@@ -149,6 +157,10 @@ public: /* queries */
return "msa";
}
break;
+ case AccountType::Offline: {
+ return "offline";
+ }
+ break;
default: {
return "unknown";
}
diff --git a/launcher/minecraft/auth/flows/Offline.cpp b/launcher/minecraft/auth/flows/Offline.cpp
new file mode 100644
index 00000000..fc614a8c
--- /dev/null
+++ b/launcher/minecraft/auth/flows/Offline.cpp
@@ -0,0 +1,17 @@
+#include "Offline.h"
+
+#include "minecraft/auth/steps/OfflineStep.h"
+
+OfflineRefresh::OfflineRefresh(
+ AccountData *data,
+ QObject *parent
+) : AuthFlow(data, parent) {
+ m_steps.append(new OfflineStep(m_data));
+}
+
+OfflineLogin::OfflineLogin(
+ AccountData *data,
+ QObject *parent
+) : AuthFlow(data, parent) {
+ m_steps.append(new OfflineStep(m_data));
+}
diff --git a/launcher/minecraft/auth/flows/Offline.h b/launcher/minecraft/auth/flows/Offline.h
new file mode 100644
index 00000000..5d1f83a4
--- /dev/null
+++ b/launcher/minecraft/auth/flows/Offline.h
@@ -0,0 +1,22 @@
+#pragma once
+#include "AuthFlow.h"
+
+class OfflineRefresh : public AuthFlow
+{
+ Q_OBJECT
+public:
+ explicit OfflineRefresh(
+ AccountData *data,
+ QObject *parent = 0
+ );
+};
+
+class OfflineLogin : public AuthFlow
+{
+ Q_OBJECT
+public:
+ explicit OfflineLogin(
+ AccountData *data,
+ QObject *parent = 0
+ );
+};
diff --git a/launcher/minecraft/auth/steps/OfflineStep.cpp b/launcher/minecraft/auth/steps/OfflineStep.cpp
new file mode 100644
index 00000000..9f1fc266
--- /dev/null
+++ b/launcher/minecraft/auth/steps/OfflineStep.cpp
@@ -0,0 +1,18 @@
+#include "OfflineStep.h"
+
+#include "Application.h"
+
+OfflineStep::OfflineStep(AccountData* data) : AuthStep(data) {};
+OfflineStep::~OfflineStep() noexcept = default;
+
+QString OfflineStep::describe() {
+ return tr("Creating offline account.");
+}
+
+void OfflineStep::rehydrate() {
+ // NOOP
+}
+
+void OfflineStep::perform() {
+ emit finished(AccountTaskState::STATE_WORKING, tr("Created offline account."));
+}
diff --git a/launcher/minecraft/auth/steps/OfflineStep.h b/launcher/minecraft/auth/steps/OfflineStep.h
new file mode 100644
index 00000000..62addb1f
--- /dev/null
+++ b/launcher/minecraft/auth/steps/OfflineStep.h
@@ -0,0 +1,20 @@
+
+#pragma once
+#include
+
+#include "QObjectPtr.h"
+#include "minecraft/auth/AuthStep.h"
+
+#include
+
+class OfflineStep : public AuthStep {
+ Q_OBJECT
+public:
+ explicit OfflineStep(AccountData *data);
+ virtual ~OfflineStep() noexcept;
+
+ void perform() override;
+ void rehydrate() override;
+
+ QString describe() override;
+};
diff --git a/launcher/ui/dialogs/OfflineLoginDialog.cpp b/launcher/ui/dialogs/OfflineLoginDialog.cpp
index f6ecc4e9..0cc922f8 100644
--- a/launcher/ui/dialogs/OfflineLoginDialog.cpp
+++ b/launcher/ui/dialogs/OfflineLoginDialog.cpp
@@ -42,8 +42,8 @@ void OfflineLoginDialog::accept()
ui->progressBar->setVisible(true);
// Setup the login task and start it
- m_account = MinecraftAccount::createFromUsername(ui->userTextBox->text());
- m_loginTask = m_account->login("TODO: create offline mode account flow");
+ m_account = MinecraftAccount::createOffline(ui->userTextBox->text());
+ m_loginTask = m_account->loginOffline();
connect(m_loginTask.get(), &Task::failed, this, &OfflineLoginDialog::onTaskFailed);
connect(m_loginTask.get(), &Task::succeeded, this, &OfflineLoginDialog::onTaskSucceeded);
connect(m_loginTask.get(), &Task::status, this, &OfflineLoginDialog::onTaskStatus);
--
cgit
From 6ecc8c5496cd1fa121b69f770c0664320fd7dc1d Mon Sep 17 00:00:00 2001
From: bexnoss <82064510+bexnoss@users.noreply.github.com>
Date: Wed, 12 Jan 2022 14:57:32 +0100
Subject: Remove unnecessary license header
---
launcher/ui/dialogs/OfflineLoginDialog.cpp | 15 ---------------
launcher/ui/dialogs/OfflineLoginDialog.h | 15 ---------------
2 files changed, 30 deletions(-)
diff --git a/launcher/ui/dialogs/OfflineLoginDialog.cpp b/launcher/ui/dialogs/OfflineLoginDialog.cpp
index 0cc922f8..345ed40a 100644
--- a/launcher/ui/dialogs/OfflineLoginDialog.cpp
+++ b/launcher/ui/dialogs/OfflineLoginDialog.cpp
@@ -1,18 +1,3 @@
-/* Copyright 2013-2021 MultiMC Contributors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
#include "OfflineLoginDialog.h"
#include "ui_OfflineLoginDialog.h"
diff --git a/launcher/ui/dialogs/OfflineLoginDialog.h b/launcher/ui/dialogs/OfflineLoginDialog.h
index ba0c1823..5e608379 100644
--- a/launcher/ui/dialogs/OfflineLoginDialog.h
+++ b/launcher/ui/dialogs/OfflineLoginDialog.h
@@ -1,18 +1,3 @@
-/* Copyright 2013-2021 MultiMC Contributors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
#pragma once
#include
--
cgit
From 46a3b4de6ebb625b958a69aba85316171d3fa168 Mon Sep 17 00:00:00 2001
From: bexnoss <82064510+bexnoss@users.noreply.github.com>
Date: Wed, 12 Jan 2022 18:41:33 +0100
Subject: Remove unnecessary semicolon
---
launcher/minecraft/auth/steps/OfflineStep.cpp | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/launcher/minecraft/auth/steps/OfflineStep.cpp b/launcher/minecraft/auth/steps/OfflineStep.cpp
index 9f1fc266..dc092bfd 100644
--- a/launcher/minecraft/auth/steps/OfflineStep.cpp
+++ b/launcher/minecraft/auth/steps/OfflineStep.cpp
@@ -2,7 +2,7 @@
#include "Application.h"
-OfflineStep::OfflineStep(AccountData* data) : AuthStep(data) {};
+OfflineStep::OfflineStep(AccountData* data) : AuthStep(data) {}
OfflineStep::~OfflineStep() noexcept = default;
QString OfflineStep::describe() {
--
cgit
From 395e2655648dbb80d089077e6a6b2530f4876c63 Mon Sep 17 00:00:00 2001
From: bexnoss <82064510+bexnoss@users.noreply.github.com>
Date: Fri, 14 Jan 2022 00:01:05 +0100
Subject: Add offline mode disclaimer
---
launcher/ui/dialogs/OfflineLoginDialog.ui | 4 ++--
launcher/ui/pages/global/AccountListPage.cpp | 8 +++++++-
2 files changed, 9 insertions(+), 3 deletions(-)
diff --git a/launcher/ui/dialogs/OfflineLoginDialog.ui b/launcher/ui/dialogs/OfflineLoginDialog.ui
index d8964a2e..4577d361 100644
--- a/launcher/ui/dialogs/OfflineLoginDialog.ui
+++ b/launcher/ui/dialogs/OfflineLoginDialog.ui
@@ -6,8 +6,8 @@
00
- 400
- 150
+ 500
+ 250
diff --git a/launcher/ui/pages/global/AccountListPage.cpp b/launcher/ui/pages/global/AccountListPage.cpp
index b9aa7628..1c27d5b7 100644
--- a/launcher/ui/pages/global/AccountListPage.cpp
+++ b/launcher/ui/pages/global/AccountListPage.cpp
@@ -158,7 +158,13 @@ void AccountListPage::on_actionAddOffline_triggered()
{
MinecraftAccountPtr account = OfflineLoginDialog::newAccount(
this,
- tr("Please enter your desired username to add your offline account.")
+ tr("Please enter your desired username to add your offline account. "
+ " "
+ "It is required by Mojang that you own Minecraft BEFORE you may use offline mode. "
+ "The PolyMC organization denounces piracy and takes NO LIABILITY WHATSOEVER "
+ "for any illegal activity that may occur in usage of the offline mode feature. "
+ " "
+ "By continuing you promise that you own a Minecraft account.")
);
if (account)
--
cgit
From cdaa397dcffb92ae6a9c659047a87d49286dee4f Mon Sep 17 00:00:00 2001
From: bexnoss <82064510+bexnoss@users.noreply.github.com>
Date: Fri, 14 Jan 2022 14:19:31 +0100
Subject: Reword offline mode disclaimer
---
launcher/ui/pages/global/AccountListPage.cpp | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/launcher/ui/pages/global/AccountListPage.cpp b/launcher/ui/pages/global/AccountListPage.cpp
index 1c27d5b7..ad88812a 100644
--- a/launcher/ui/pages/global/AccountListPage.cpp
+++ b/launcher/ui/pages/global/AccountListPage.cpp
@@ -161,8 +161,8 @@ void AccountListPage::on_actionAddOffline_triggered()
tr("Please enter your desired username to add your offline account. "
" "
"It is required by Mojang that you own Minecraft BEFORE you may use offline mode. "
- "The PolyMC organization denounces piracy and takes NO LIABILITY WHATSOEVER "
- "for any illegal activity that may occur in usage of the offline mode feature. "
+ "The PolyMC developers denounce piracy and take NO LIABILITY WHATSOEVER for "
+ "any illegal activity that may occur in usage of the offline mode feature. "
" "
"By continuing you promise that you own a Minecraft account.")
);
--
cgit
From 41dba376a803825fca2dc6b3b812ff8a15a9588e Mon Sep 17 00:00:00 2001
From: swirl
Date: Fri, 14 Jan 2022 17:33:34 -0500
Subject: remove 5 from display name
Closes: #58
---
program_info/CMakeLists.txt | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/program_info/CMakeLists.txt b/program_info/CMakeLists.txt
index d2f23277..77b971fc 100644
--- a/program_info/CMakeLists.txt
+++ b/program_info/CMakeLists.txt
@@ -3,8 +3,8 @@ set(Launcher_CommonName "PolyMC")
set(Launcher_Copyright "PolyMC Contributors" PARENT_SCOPE)
set(Launcher_Domain "github.com/PolyMC" PARENT_SCOPE)
set(Launcher_Name "${Launcher_CommonName}" PARENT_SCOPE)
-set(Launcher_DisplayName "${Launcher_CommonName} 5" PARENT_SCOPE)
-set(Launcher_UserAgent "${Launcher_CommonName}/5.0" PARENT_SCOPE)
+set(Launcher_DisplayName "${Launcher_CommonName}" PARENT_SCOPE)
+set(Launcher_UserAgent "${Launcher_CommonName}/${Launcher_RELEASE_VERSION_NAME}" PARENT_SCOPE)
set(Launcher_ConfigFile "polymc.cfg" PARENT_SCOPE)
set(Launcher_Git "https://github.com/PolyMC/PolyMC" PARENT_SCOPE)
--
cgit
From b19e3156154ba0dd232a3d165b1759c57e2858f2 Mon Sep 17 00:00:00 2001
From: swirl
Date: Fri, 14 Jan 2022 17:34:50 -0500
Subject: Set maximum memory allocated to 4GB by default
---
launcher/Application.cpp | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/launcher/Application.cpp b/launcher/Application.cpp
index a3e2c44f..47c9c20e 100644
--- a/launcher/Application.cpp
+++ b/launcher/Application.cpp
@@ -662,7 +662,7 @@ Application::Application(int &argc, char **argv) : QApplication(argc, argv)
// Memory
m_settings->registerSetting({"MinMemAlloc", "MinMemoryAlloc"}, 512);
- m_settings->registerSetting({"MaxMemAlloc", "MaxMemoryAlloc"}, 1024);
+ m_settings->registerSetting({"MaxMemAlloc", "MaxMemoryAlloc"}, 4096);
m_settings->registerSetting("PermGen", 128);
// Java Settings
--
cgit
From a62155c1c9e561327cc589fe3da7b6d5a107d58d Mon Sep 17 00:00:00 2001
From: swirl
Date: Fri, 14 Jan 2022 18:20:06 -0500
Subject: preliminary stuff for paste.ee removal
---
CMakeLists.txt | 3 -
buildconfig/BuildConfig.cpp.in | 1 -
buildconfig/BuildConfig.h | 5 --
launcher/Application.cpp | 4 +-
launcher/CMakeLists.txt | 6 +-
launcher/ui/pages/global/PasteEEPage.cpp | 81 -------------------
launcher/ui/pages/global/PasteEEPage.h | 62 ---------------
launcher/ui/pages/global/PasteEEPage.ui | 128 -------------------------------
launcher/ui/pages/global/PastePage.cpp | 81 +++++++++++++++++++
launcher/ui/pages/global/PastePage.h | 63 +++++++++++++++
launcher/ui/pages/global/PastePage.ui | 109 ++++++++++++++++++++++++++
11 files changed, 258 insertions(+), 285 deletions(-)
delete mode 100644 launcher/ui/pages/global/PasteEEPage.cpp
delete mode 100644 launcher/ui/pages/global/PasteEEPage.h
delete mode 100644 launcher/ui/pages/global/PasteEEPage.ui
create mode 100644 launcher/ui/pages/global/PastePage.cpp
create mode 100644 launcher/ui/pages/global/PastePage.h
create mode 100644 launcher/ui/pages/global/PastePage.ui
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 2af0aa71..91119b2f 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -68,9 +68,6 @@ set(Launcher_NOTIFICATION_URL "" CACHE STRING "URL for checking for notification
# The metadata server
set(Launcher_META_URL "https://meta.multimc.org/v1/" CACHE STRING "URL to fetch Launcher's meta files from.")
-# paste.ee API key
-set(Launcher_PASTE_EE_API_KEY "utLvciUouSURFzfjPxLBf5W4ISsUX4pwBDF7N1AfZ" CACHE STRING "API key you can get from paste.ee when you register an account")
-
# Imgur API Client ID
set(Launcher_IMGUR_CLIENT_ID "5b97b0713fba4a3" CACHE STRING "Client ID you can get from Imgur when you register an application")
diff --git a/buildconfig/BuildConfig.cpp.in b/buildconfig/BuildConfig.cpp.in
index af8845dc..2595f78b 100644
--- a/buildconfig/BuildConfig.cpp.in
+++ b/buildconfig/BuildConfig.cpp.in
@@ -42,7 +42,6 @@ Config::Config()
VERSION_STR = "@Launcher_VERSION_STRING@";
NEWS_RSS_URL = "@Launcher_NEWS_RSS_URL@";
- PASTE_EE_KEY = "@Launcher_PASTE_EE_API_KEY@";
IMGUR_CLIENT_ID = "@Launcher_IMGUR_CLIENT_ID@";
MSA_CLIENT_ID = "@Launcher_MSA_CLIENT_ID@";
META_URL = "@Launcher_META_URL@";
diff --git a/buildconfig/BuildConfig.h b/buildconfig/BuildConfig.h
index 009fb2bc..d09d5288 100644
--- a/buildconfig/BuildConfig.h
+++ b/buildconfig/BuildConfig.h
@@ -67,11 +67,6 @@ public:
*/
QString NEWS_RSS_URL;
- /**
- * API key you can get from paste.ee when you register an account
- */
- QString PASTE_EE_KEY;
-
/**
* Client ID you can get from Imgur when you register an application
*/
diff --git a/launcher/Application.cpp b/launcher/Application.cpp
index 47c9c20e..98e3e0fc 100644
--- a/launcher/Application.cpp
+++ b/launcher/Application.cpp
@@ -14,7 +14,7 @@
#include "ui/pages/global/ProxyPage.h"
#include "ui/pages/global/ExternalToolsPage.h"
#include "ui/pages/global/AccountListPage.h"
-#include "ui/pages/global/PasteEEPage.h"
+#include "ui/pages/global/PastePage.h"
#include "ui/pages/global/CustomCommandsPage.h"
#include "ui/themes/ITheme.h"
@@ -728,7 +728,7 @@ Application::Application(int &argc, char **argv) : QApplication(argc, argv)
m_globalSettingsProvider->addPage();
m_globalSettingsProvider->addPage();
m_globalSettingsProvider->addPage();
- m_globalSettingsProvider->addPage();
+ m_globalSettingsProvider->addPage();
}
qDebug() << "<> Settings loaded.";
}
diff --git a/launcher/CMakeLists.txt b/launcher/CMakeLists.txt
index df361447..21859cad 100644
--- a/launcher/CMakeLists.txt
+++ b/launcher/CMakeLists.txt
@@ -711,8 +711,8 @@ SET(LAUNCHER_SOURCES
ui/pages/global/LauncherPage.h
ui/pages/global/ProxyPage.cpp
ui/pages/global/ProxyPage.h
- ui/pages/global/PasteEEPage.cpp
- ui/pages/global/PasteEEPage.h
+ ui/pages/global/PastePage.cpp
+ ui/pages/global/PastePage.h
# GUI - platform pages
ui/pages/modplatform/VanillaPage.cpp
@@ -848,7 +848,7 @@ qt5_wrap_ui(LAUNCHER_UI
ui/pages/global/AccountListPage.ui
ui/pages/global/JavaPage.ui
ui/pages/global/LauncherPage.ui
- ui/pages/global/PasteEEPage.ui
+ ui/pages/global/PastePage.ui
ui/pages/global/ProxyPage.ui
ui/pages/global/MinecraftPage.ui
ui/pages/global/ExternalToolsPage.ui
diff --git a/launcher/ui/pages/global/PasteEEPage.cpp b/launcher/ui/pages/global/PasteEEPage.cpp
deleted file mode 100644
index 4b375d9a..00000000
--- a/launcher/ui/pages/global/PasteEEPage.cpp
+++ /dev/null
@@ -1,81 +0,0 @@
-/* Copyright 2013-2021 MultiMC Contributors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "PasteEEPage.h"
-#include "ui_PasteEEPage.h"
-
-#include
-#include
-#include
-#include
-
-#include "settings/SettingsObject.h"
-#include "tools/BaseProfiler.h"
-#include "Application.h"
-
-PasteEEPage::PasteEEPage(QWidget *parent) :
- QWidget(parent),
- ui(new Ui::PasteEEPage)
-{
- ui->setupUi(this);
- ui->tabWidget->tabBar()->hide();\
- connect(ui->customAPIkeyEdit, &QLineEdit::textEdited, this, &PasteEEPage::textEdited);
- loadSettings();
-}
-
-PasteEEPage::~PasteEEPage()
-{
- delete ui;
-}
-
-void PasteEEPage::loadSettings()
-{
- auto s = APPLICATION->settings();
- QString keyToUse = s->get("PasteEEAPIKey").toString();
- if(keyToUse == "multimc")
- {
- ui->multimcButton->setChecked(true);
- }
- else
- {
- ui->customButton->setChecked(true);
- ui->customAPIkeyEdit->setText(keyToUse);
- }
-}
-
-void PasteEEPage::applySettings()
-{
- auto s = APPLICATION->settings();
-
- QString pasteKeyToUse;
- if (ui->customButton->isChecked())
- pasteKeyToUse = ui->customAPIkeyEdit->text();
- else
- {
- pasteKeyToUse = "multimc";
- }
- s->set("PasteEEAPIKey", pasteKeyToUse);
-}
-
-bool PasteEEPage::apply()
-{
- applySettings();
- return true;
-}
-
-void PasteEEPage::textEdited(const QString& text)
-{
- ui->customButton->setChecked(true);
-}
diff --git a/launcher/ui/pages/global/PasteEEPage.h b/launcher/ui/pages/global/PasteEEPage.h
deleted file mode 100644
index a1c7d434..00000000
--- a/launcher/ui/pages/global/PasteEEPage.h
+++ /dev/null
@@ -1,62 +0,0 @@
-/* Copyright 2013-2021 MultiMC Contributors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#pragma once
-
-#include
-
-#include "ui/pages/BasePage.h"
-#include
-
-namespace Ui {
-class PasteEEPage;
-}
-
-class PasteEEPage : public QWidget, public BasePage
-{
- Q_OBJECT
-
-public:
- explicit PasteEEPage(QWidget *parent = 0);
- ~PasteEEPage();
-
- QString displayName() const override
- {
- return tr("Log Upload");
- }
- QIcon icon() const override
- {
- return APPLICATION->getThemedIcon("log");
- }
- QString id() const override
- {
- return "log-upload";
- }
- QString helpPage() const override
- {
- return "Log-Upload";
- }
- virtual bool apply() override;
-
-private:
- void loadSettings();
- void applySettings();
-
-private slots:
- void textEdited(const QString &text);
-
-private:
- Ui::PasteEEPage *ui;
-};
diff --git a/launcher/ui/pages/global/PasteEEPage.ui b/launcher/ui/pages/global/PasteEEPage.ui
deleted file mode 100644
index 10883781..00000000
--- a/launcher/ui/pages/global/PasteEEPage.ui
+++ /dev/null
@@ -1,128 +0,0 @@
-
-
- PasteEEPage
-
-
-
- 0
- 0
- 491
- 474
-
-
-
-
- 0
-
-
- 0
-
-
- 0
-
-
- 0
-
-
-
-
- 0
-
-
-
- Tab 1
-
-
-
-
-
- paste.ee API key
-
-
-
-
-
- MultiMC key - 12MB &upload limit
-
-
- pasteButtonGroup
-
-
-
-
-
-
- &Your own key - 12MB upload limit:
-
-
- pasteButtonGroup
-
-
-
-
-
-
- QLineEdit::Password
-
-
- Paste your API key here!
-
-
-
-
-
-
- Qt::Horizontal
-
-
-
-
-
-
- <html><head/><body><p><a href="https://paste.ee">paste.ee</a> is used by MultiMC for log uploads. If you have a <a href="https://paste.ee">paste.ee</a> account, you can add your API key here and have your uploaded logs paired with your account.</p></body></html>
-
-
- Qt::RichText
-
-
- true
-
-
- true
-
-
-
-
-
-
-
-
-
- Qt::Vertical
-
-
-
- 20
- 216
-
-
-
-
-
-
-
-
-
-
-
- tabWidget
- multimcButton
- customButton
- customAPIkeyEdit
-
-
-
-
-
-
-
diff --git a/launcher/ui/pages/global/PastePage.cpp b/launcher/ui/pages/global/PastePage.cpp
new file mode 100644
index 00000000..3378a6ef
--- /dev/null
+++ b/launcher/ui/pages/global/PastePage.cpp
@@ -0,0 +1,81 @@
+/* Copyright 2013-2021 MultiMC & PolyMC Contributors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "PastePage.h"
+#include "ui_PastePage.h"
+
+#include
+#include
+#include
+#include
+
+#include "settings/SettingsObject.h"
+#include "tools/BaseProfiler.h"
+#include "Application.h"
+
+PastePage::PastePage(QWidget *parent) :
+ QWidget(parent),
+ ui(new Ui::PastePage)
+{
+ ui->setupUi(this);
+ ui->tabWidget->tabBar()->hide();\
+ connect(ui->customAPIkeyEdit, &QLineEdit::textEdited, this, &PastePage::textEdited);
+ loadSettings();
+}
+
+PastePage::~PastePage()
+{
+ delete ui;
+}
+
+void PastePage::loadSettings()
+{
+ auto s = APPLICATION->settings();
+ QString keyToUse = s->get("PasteEEAPIKey").toString();
+ if(keyToUse == "multimc")
+ {
+ ui->multimcButton->setChecked(true);
+ }
+ else
+ {
+ ui->customButton->setChecked(true);
+ ui->customAPIkeyEdit->setText(keyToUse);
+ }
+}
+
+void PastePage::applySettings()
+{
+ auto s = APPLICATION->settings();
+
+ QString pasteKeyToUse;
+ if (ui->customButton->isChecked())
+ pasteKeyToUse = ui->customAPIkeyEdit->text();
+ else
+ {
+ pasteKeyToUse = "multimc";
+ }
+ s->set("PasteEEAPIKey", pasteKeyToUse);
+}
+
+bool PastePage::apply()
+{
+ applySettings();
+ return true;
+}
+
+void PastePage::textEdited(const QString& text)
+{
+ ui->customButton->setChecked(true);
+}
diff --git a/launcher/ui/pages/global/PastePage.h b/launcher/ui/pages/global/PastePage.h
new file mode 100644
index 00000000..3930d4ec
--- /dev/null
+++ b/launcher/ui/pages/global/PastePage.h
@@ -0,0 +1,63 @@
+/* Copyright 2013-2021 MultiMC Contributors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#pragma once
+
+#include
+
+#include "ui/pages/BasePage.h"
+#include
+
+namespace Ui {
+class PastePage;
+}
+
+class PastePage : public QWidget, public BasePage
+{
+ Q_OBJECT
+
+public:
+ explicit PastePage(QWidget *parent = 0);
+ ~PastePage();
+
+ QString displayName() const override
+ {
+ return tr("Log Upload");
+ }
+ QIcon icon() const override
+ {
+ return APPLICATION->getThemedIcon("log");
+ }
+ QString id() const override
+ {
+ return "log-upload";
+ }
+ QString helpPage() const override
+ {
+ return "Log-Upload";
+ }
+ virtual bool apply() override;
+
+private:
+ void loadSettings();
+ void applySettings();
+
+private slots:
+ void textEdited(const QString &text);
+
+private:
+ Ui::PastePage *ui;
+};
+
diff --git a/launcher/ui/pages/global/PastePage.ui b/launcher/ui/pages/global/PastePage.ui
new file mode 100644
index 00000000..0bef5a22
--- /dev/null
+++ b/launcher/ui/pages/global/PastePage.ui
@@ -0,0 +1,109 @@
+
+
+ PastePage
+
+
+
+ 0
+ 0
+ 491
+ 474
+
+
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+ Tab 1
+
+
+
+
+
+ Pastebin Site
+
+
+
+
+
+ Qt::Horizontal
+
+
+
+
+
+
+
+ 0x0.st
+
+
+
+
+ paste.polymc.org
+
+
+
+
+
+
+
+ <html><head/><body><p>paste.polymc.org is a pastebin managed by PolyMC's lead maintainer. Something something trust</p></body></html>
+
+
+ Qt::RichText
+
+
+ true
+
+
+ true
+
+
+
+
+
+
+
+
+
+ Qt::Vertical
+
+
+
+ 20
+ 216
+
+
+
+
+
+
+
+
+
+
+
+ tabWidget
+
+
+
+
+
+
+
--
cgit
From a606b47a22443cefc52d865df24c45ff50908f6f Mon Sep 17 00:00:00 2001
From: swirl
Date: Fri, 14 Jan 2022 18:30:02 -0500
Subject: pastebin URL app setting
---
launcher/Application.cpp | 4 ++--
launcher/ui/pages/global/PastePage.cpp | 13 +++----------
launcher/ui/pages/global/PastePage.ui | 2 +-
3 files changed, 6 insertions(+), 13 deletions(-)
diff --git a/launcher/Application.cpp b/launcher/Application.cpp
index 98e3e0fc..110b2e6b 100644
--- a/launcher/Application.cpp
+++ b/launcher/Application.cpp
@@ -714,8 +714,8 @@ Application::Application(int &argc, char **argv) : QApplication(argc, argv)
m_settings->registerSetting("UpdateDialogGeometry", "");
- // paste.ee API key
- m_settings->registerSetting("PasteEEAPIKey", "multimc");
+ // pastebin URL
+ m_settings->registerSetting("PastebinURL", "0x0.st");
// Init page provider
{
diff --git a/launcher/ui/pages/global/PastePage.cpp b/launcher/ui/pages/global/PastePage.cpp
index 3378a6ef..495e9937 100644
--- a/launcher/ui/pages/global/PastePage.cpp
+++ b/launcher/ui/pages/global/PastePage.cpp
@@ -43,16 +43,9 @@ PastePage::~PastePage()
void PastePage::loadSettings()
{
auto s = APPLICATION->settings();
- QString keyToUse = s->get("PasteEEAPIKey").toString();
- if(keyToUse == "multimc")
- {
- ui->multimcButton->setChecked(true);
- }
- else
- {
- ui->customButton->setChecked(true);
- ui->customAPIkeyEdit->setText(keyToUse);
- }
+ QString pastebin = s->get("PastebinURL");
+ int index = ui->urlChoices->findText(pastebin);
+ ui->urlChoices->setCurrentIndex(index);
}
void PastePage::applySettings()
diff --git a/launcher/ui/pages/global/PastePage.ui b/launcher/ui/pages/global/PastePage.ui
index 0bef5a22..784ea3f4 100644
--- a/launcher/ui/pages/global/PastePage.ui
+++ b/launcher/ui/pages/global/PastePage.ui
@@ -47,7 +47,7 @@
-
+ 0x0.st
--
cgit
From 6cd4375aff98554c56a0138208d869aca0587656 Mon Sep 17 00:00:00 2001
From: swirl
Date: Fri, 14 Jan 2022 18:39:25 -0500
Subject: add arch linux package to readme
closes: #53
---
README.md | 1 +
1 file changed, 1 insertion(+)
diff --git a/README.md b/README.md
index d9d414e7..7b67c588 100644
--- a/README.md
+++ b/README.md
@@ -23,6 +23,7 @@ Several source build packages are available, along with experimental pre-built g
- [Windows (32-bit)](https://packages.polymc.org/latest/win32/win32.zip) ([SHA256](https://packages.polymc.org/latest/win32/win32.zip.sha256)) - this is a portable package, you can extract it anywhere and run it. This package needs testing.
- [Debian (AMD64)](https://packages.polymc.org/latest/deb/polymc-amd64.deb) ([SHA256](https://packages.polymc.org/latest/deb/polymc-amd64.deb.sha256)) - this is intended to be installed with `dpkg -i`. Alternatively, you may build the `.deb` yourself, by going to `packages/debian` and running `./makedeb.sh`.
- [AppImage (AMD64)](https://packages.polymc.org/latest/appimage/PolyMC-latest-x86_64.AppImage) ([SHA256](https://packages.polymc.org/latest/appimage/PolyMC-latest-x86_64.AppImage.sha256)) - `chmod +x` must be run on this file before usage. This should work on any distribution.
+- [Arch Linux (AMD64)](https://packages.polymc.org/latest/arch/polymc-bin-latest-1-x86_64.pkg.tar.zst) ([SHA256](https://packages.polymc.org/latest/arch/polymc-bin-latest-1-x86_64.pkg.tar.zst.sha256) - this is intended to be installed with `pacman -U`. This is an alternative if building the AUR package is not desired.
- MacOS currently does not have any packages. We are still working on setting up MacOS packaging.
## Development
--
cgit
From ac93c64cd40be038a0f3a71df18686c5e1f955c3 Mon Sep 17 00:00:00 2001
From: Thomas Sirack
Date: Fri, 14 Jan 2022 16:59:16 -0700
Subject: Fix program executable name for shell script
---
CMakeLists.txt | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 2af0aa71..a19556cb 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -124,7 +124,7 @@ endif()
####################################### Program Info #######################################
-set(Launcher_APP_BINARY_NAME "polymc" CACHE STRING "Name of the Launcher binary")
+set(Launcher_APP_BINARY_NAME "PolyMC" CACHE STRING "Name of the Launcher binary")
add_subdirectory(program_info)
####################################### Install layout #######################################
--
cgit
From 0bbd0ac0b9b0ba7212ed15d4628577bf92005a18 Mon Sep 17 00:00:00 2001
From: Thomas Sirack
Date: Fri, 14 Jan 2022 19:28:10 -0700
Subject: Change method of shell script fix per suggestion
The Launcher.in file is now modified rather than CMakeLists.txt
---
CMakeLists.txt | 2 +-
launcher/Launcher.in | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/CMakeLists.txt b/CMakeLists.txt
index a19556cb..2af0aa71 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -124,7 +124,7 @@ endif()
####################################### Program Info #######################################
-set(Launcher_APP_BINARY_NAME "PolyMC" CACHE STRING "Name of the Launcher binary")
+set(Launcher_APP_BINARY_NAME "polymc" CACHE STRING "Name of the Launcher binary")
add_subdirectory(program_info)
####################################### Install layout #######################################
diff --git a/launcher/Launcher.in b/launcher/Launcher.in
index b79b276b..5e5e2c2b 100755
--- a/launcher/Launcher.in
+++ b/launcher/Launcher.in
@@ -14,7 +14,7 @@ if [[ $EUID -eq 0 ]]; then
fi
-LAUNCHER_NAME=@Launcher_Name@
+LAUNCHER_NAME=@Launcher_APP_BINARY_NAME@
LAUNCHER_DIR="$(dirname "$(readlink -f "$0")")"
echo "Launcher Dir: ${LAUNCHER_DIR}"
--
cgit
From dc129fd8868f1888fcc55136f3cdc2486ae8ab6a Mon Sep 17 00:00:00 2001
From: Petr Mrázek
Date: Sat, 8 Jan 2022 11:14:07 +0100
Subject: GH-4125 workaround for java printing garbage to stdout on bedrock
linux
---
launcher/java/JavaChecker.cpp | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/launcher/java/JavaChecker.cpp b/launcher/java/JavaChecker.cpp
index 80c599cc..c3132af3 100644
--- a/launcher/java/JavaChecker.cpp
+++ b/launcher/java/JavaChecker.cpp
@@ -61,6 +61,10 @@ void JavaChecker::stdoutReady()
QByteArray data = process->readAllStandardOutput();
QString added = QString::fromLocal8Bit(data);
added.remove('\r');
+ // NOTE: workaround for GH-4125, where garbage is getting printed into stdout on bedrock linux
+ if (added.contains("/bedrock/strata")) {
+ return;
+ }
m_stdout += added;
}
--
cgit
From f78bb90ed9f2658eee9259a472efe47a25eddc1e Mon Sep 17 00:00:00 2001
From: Petr Mrázek
Date: Sat, 8 Jan 2022 12:26:16 +0100
Subject: GH-4125 fix it better
---
launcher/java/JavaChecker.cpp | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/launcher/java/JavaChecker.cpp b/launcher/java/JavaChecker.cpp
index c3132af3..4557784b 100644
--- a/launcher/java/JavaChecker.cpp
+++ b/launcher/java/JavaChecker.cpp
@@ -61,10 +61,6 @@ void JavaChecker::stdoutReady()
QByteArray data = process->readAllStandardOutput();
QString added = QString::fromLocal8Bit(data);
added.remove('\r');
- // NOTE: workaround for GH-4125, where garbage is getting printed into stdout on bedrock linux
- if (added.contains("/bedrock/strata")) {
- return;
- }
m_stdout += added;
}
@@ -107,6 +103,10 @@ void JavaChecker::finished(int exitcode, QProcess::ExitStatus status)
for(QString line : lines)
{
line = line.trimmed();
+ // NOTE: workaround for GH-4125, where garbage is getting printed into stdout on bedrock linux
+ if (line.contains("/bedrock/strata")) {
+ continue;
+ }
auto parts = line.split('=', QString::SkipEmptyParts);
if(parts.size() != 2 || parts[0].isEmpty() || parts[1].isEmpty())
--
cgit
From b95c27ceef1a1742d62ae0a758657fd0beea18c6 Mon Sep 17 00:00:00 2001
From: swirl
Date: Sat, 15 Jan 2022 21:25:49 -0500
Subject: fix readme formatting
---
README.md | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/README.md b/README.md
index 7b67c588..d97ab67c 100644
--- a/README.md
+++ b/README.md
@@ -3,6 +3,7 @@
+
PolyMC is a custom launcher for Minecraft that focuses on predictability, long term stability and simplicity.
This is a **fork** of the MultiMC Launcher and not endorsed by MultiMC. The PolyMC community felt that the maintainer was not acting in the spirit of Free Software so this fork was made. Read "[Why was this fork made?](https://github.com/PolyMC/PolyMC/wiki/FAQ)" on the wiki for more details.
@@ -23,7 +24,7 @@ Several source build packages are available, along with experimental pre-built g
- [Windows (32-bit)](https://packages.polymc.org/latest/win32/win32.zip) ([SHA256](https://packages.polymc.org/latest/win32/win32.zip.sha256)) - this is a portable package, you can extract it anywhere and run it. This package needs testing.
- [Debian (AMD64)](https://packages.polymc.org/latest/deb/polymc-amd64.deb) ([SHA256](https://packages.polymc.org/latest/deb/polymc-amd64.deb.sha256)) - this is intended to be installed with `dpkg -i`. Alternatively, you may build the `.deb` yourself, by going to `packages/debian` and running `./makedeb.sh`.
- [AppImage (AMD64)](https://packages.polymc.org/latest/appimage/PolyMC-latest-x86_64.AppImage) ([SHA256](https://packages.polymc.org/latest/appimage/PolyMC-latest-x86_64.AppImage.sha256)) - `chmod +x` must be run on this file before usage. This should work on any distribution.
-- [Arch Linux (AMD64)](https://packages.polymc.org/latest/arch/polymc-bin-latest-1-x86_64.pkg.tar.zst) ([SHA256](https://packages.polymc.org/latest/arch/polymc-bin-latest-1-x86_64.pkg.tar.zst.sha256) - this is intended to be installed with `pacman -U`. This is an alternative if building the AUR package is not desired.
+- [Arch Linux (AMD64)](https://packages.polymc.org/latest/arch/polymc-bin-latest-1-x86_64.pkg.tar.zst) ([SHA256](https://packages.polymc.org/latest/arch/polymc-bin-latest-1-x86_64.pkg.tar.zst.sha256)) - this is intended to be installed with `pacman -U`. This is an alternative if building the AUR package is not desired.
- MacOS currently does not have any packages. We are still working on setting up MacOS packaging.
## Development
--
cgit
From 8172dcd2d53114df05a23fa58e3832d2011f2e17 Mon Sep 17 00:00:00 2001
From: bexnoss <82064510+bexnoss@users.noreply.github.com>
Date: Sun, 16 Jan 2022 07:55:10 +0100
Subject: Replace PNG README header with SVG
Instead of GitHub specific MarkDown based theming this uses CSS in SVG.
---
README.md | 3 +--
program_info/polymc-dark.png | Bin 50722 -> 0 bytes
program_info/polymc-header.svg | 38 ++++++++++++++++++++++++++++++++++++++
program_info/polymc-light.png | Bin 48991 -> 0 bytes
4 files changed, 39 insertions(+), 2 deletions(-)
delete mode 100644 program_info/polymc-dark.png
create mode 100644 program_info/polymc-header.svg
delete mode 100644 program_info/polymc-light.png
diff --git a/README.md b/README.md
index d9d414e7..40d4c635 100644
--- a/README.md
+++ b/README.md
@@ -1,6 +1,5 @@
-
-
+
PolyMC is a custom launcher for Minecraft that focuses on predictability, long term stability and simplicity.
diff --git a/program_info/polymc-dark.png b/program_info/polymc-dark.png
deleted file mode 100644
index cedf6cef..00000000
Binary files a/program_info/polymc-dark.png and /dev/null differ
diff --git a/program_info/polymc-header.svg b/program_info/polymc-header.svg
new file mode 100644
index 00000000..fb91a54b
--- /dev/null
+++ b/program_info/polymc-header.svg
@@ -0,0 +1,38 @@
+
+
+
diff --git a/program_info/polymc-light.png b/program_info/polymc-light.png
deleted file mode 100644
index d3899a1f..00000000
Binary files a/program_info/polymc-light.png and /dev/null differ
--
cgit
From 81fe41a038ee12ff2ee0200525b39e4ad650bec2 Mon Sep 17 00:00:00 2001
From: swirl
Date: Sun, 16 Jan 2022 12:02:53 -0500
Subject: Default to colored icons, update copyright
Closes: #74
---
COPYING.md | 4 ++--
launcher/Application.cpp | 2 +-
launcher/ui/dialogs/AboutDialog.cpp | 2 +-
launcher/ui/pages/global/LauncherPage.cpp | 4 ++--
4 files changed, 6 insertions(+), 6 deletions(-)
diff --git a/COPYING.md b/COPYING.md
index 4205d441..1ac6d5cb 100644
--- a/COPYING.md
+++ b/COPYING.md
@@ -1,7 +1,7 @@
# PolyMC
Copyright (C) 2012-2021 MultiMC Contributors
- Copyright (C) 2021 PolyMC Contributors
+ Copyright (C) 2021-2022 PolyMC Contributors
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -15,7 +15,7 @@
You should have received a copy of the GNU General Public License
along with this program. If not, see .
-
+
# Launcher (https://github.com/MultiMC/Launcher)
Copyright 2012-2021 MultiMC Contributors
Licensed under the Apache License, Version 2.0 (the "License");
diff --git a/launcher/Application.cpp b/launcher/Application.cpp
index 47c9c20e..8d1c4d62 100644
--- a/launcher/Application.cpp
+++ b/launcher/Application.cpp
@@ -595,7 +595,7 @@ Application::Application(int &argc, char **argv) : QApplication(argc, argv)
m_settings->registerSetting("AutoUpdate", true);
// Theming
- m_settings->registerSetting("IconTheme", QString("multimc"));
+ m_settings->registerSetting("IconTheme", QString("pe_colored"));
m_settings->registerSetting("ApplicationTheme", QString("system"));
// Notifications
diff --git a/launcher/ui/dialogs/AboutDialog.cpp b/launcher/ui/dialogs/AboutDialog.cpp
index 2ba34f1a..46d2f429 100644
--- a/launcher/ui/dialogs/AboutDialog.cpp
+++ b/launcher/ui/dialogs/AboutDialog.cpp
@@ -99,7 +99,7 @@ AboutDialog::AboutDialog(QWidget *parent) : QDialog(parent), ui(new Ui::AboutDia
QString urlText("