Dehardcode account providers (#38)

* Dehardcode account providers

* Fix crash on creation

* Add dynamic 'add account dialog' provider selector

* Fix typo and add newlines

* Rename loginType to provider

* Rename MojangAccount to Account and MojangAccountList to AccountList

* Fix json save error
This commit is contained in:
Max
2021-06-14 12:51:25 +03:00
committed by GitHub
parent 396400b60d
commit 167b6bd405
39 changed files with 398 additions and 261 deletions

View File

@@ -15,7 +15,7 @@
#include "LoginDialog.h"
#include "ui_LoginDialog.h"
#include "minecraft/auth/AuthProviders.h"
#include "minecraft/auth/YggdrasilTask.h"
#include <QtWidgets/QPushButton>
@@ -26,6 +26,14 @@ LoginDialog::LoginDialog(QWidget *parent) : QDialog(parent), ui(new Ui::LoginDia
ui->progressBar->setVisible(false);
ui->buttonBox->button(QDialogButtonBox::Ok)->setEnabled(false);
for(auto provider: AuthProviders::getAll()) {
QRadioButton *button = new QRadioButton(provider->displayName());
m_radioButtons[provider->id()] = button;
ui->radioLayout->addWidget(button);
}
m_radioButtons["dummy"]->setChecked(true);
adjustSize();
connect(ui->buttonBox, &QDialogButtonBox::accepted, this, &QDialog::accept);
connect(ui->buttonBox, &QDialogButtonBox::rejected, this, &QDialog::reject);
}
@@ -41,14 +49,15 @@ void LoginDialog::accept()
setUserInputsEnabled(false);
ui->progressBar->setVisible(true);
m_account = Account::createFromUsername(ui->userTextBox->text());
for(auto providerId: m_radioButtons.keys()){
if(m_radioButtons[providerId]->isChecked()) {
m_account->setProvider(AuthProviders::lookup(providerId));
break;
}
}
// Setup the login task and start it
m_account = MojangAccount::createFromUsername(ui->userTextBox->text());
if (ui->radioMojang->isChecked())
m_account->setLoginType("mojang");
else if (ui->radioDummy->isChecked())
m_account->setLoginType("dummy");
else if (ui->radioElyby->isChecked())
m_account->setLoginType("elyby");
m_loginTask = m_account->login(nullptr, ui->passTextBox->text());
connect(m_loginTask.get(), &Task::failed, this, &LoginDialog::onTaskFailed);
connect(m_loginTask.get(), &Task::succeeded, this,
@@ -109,7 +118,7 @@ void LoginDialog::onTaskProgress(qint64 current, qint64 total)
}
// Public interface
MojangAccountPtr LoginDialog::newAccount(QWidget *parent, QString msg)
AccountPtr LoginDialog::newAccount(QWidget *parent, QString msg)
{
LoginDialog dlg(parent);
dlg.ui->label->setText(msg);

View File

@@ -16,9 +16,10 @@
#pragma once
#include <QtWidgets/QDialog>
#include <QtWidgets/QRadioButton>
#include <QtCore/QEventLoop>
#include "minecraft/auth/MojangAccount.h"
#include "minecraft/auth/Account.h"
namespace Ui
{
@@ -32,7 +33,7 @@ class LoginDialog : public QDialog
public:
~LoginDialog();
static MojangAccountPtr newAccount(QWidget *parent, QString message);
static AccountPtr newAccount(QWidget *parent, QString message);
private:
explicit LoginDialog(QWidget *parent = 0);
@@ -53,6 +54,7 @@ slots:
private:
Ui::LoginDialog *ui;
MojangAccountPtr m_account;
AccountPtr m_account;
QMap<QString, QRadioButton*> m_radioButtons;
std::shared_ptr<Task> m_loginTask;
};

View File

@@ -7,7 +7,7 @@
<x>0</x>
<y>0</y>
<width>400</width>
<height>219</height>
<height>150</height>
</rect>
</property>
<property name="sizePolicy">
@@ -61,37 +61,7 @@
</widget>
</item>
<item>
<layout class="QVBoxLayout" name="radioLayout">
<item>
<widget class="QRadioButton" name="radioMojang">
<property name="text">
<string>Mojang / Minecraft</string>
</property>
<property name="checked">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="QRadioButton" name="radioDummy">
<property name="text">
<string>Local (cracked)</string>
</property>
<property name="checked">
<bool>false</bool>
</property>
</widget>
</item><item>
<widget class="QRadioButton" name="radioElyby">
<property name="text">
<string>Ely.by</string>
</property>
<property name="checked">
<bool>false</bool>
</property>
</widget>
</item>
</layout>
<layout class="QVBoxLayout" name="radioLayout"/>
</item>
<item>
<widget class="QDialogButtonBox" name="buttonBox">

View File

@@ -33,7 +33,7 @@ ProfileSelectDialog::ProfileSelectDialog(const QString &message, int flags, QWid
m_accounts = MMC->accounts();
auto view = ui->listView;
//view->setModel(m_accounts.get());
//view->hideColumn(MojangAccountList::ActiveColumn);
//view->hideColumn(AccountList::ActiveColumn);
view->setColumnCount(1);
view->setRootIsDecorated(false);
if(QTreeWidgetItem* header = view->headerItem())
@@ -47,7 +47,7 @@ ProfileSelectDialog::ProfileSelectDialog(const QString &message, int flags, QWid
QList <QTreeWidgetItem *> items;
for (int i = 0; i < m_accounts->count(); i++)
{
MojangAccountPtr account = m_accounts->at(i);
AccountPtr account = m_accounts->at(i);
for (auto profile : account->profiles())
{
auto profileLabel = profile.name;
@@ -58,7 +58,7 @@ ProfileSelectDialog::ProfileSelectDialog(const QString &message, int flags, QWid
auto item = new QTreeWidgetItem(view);
item->setText(0, profileLabel);
item->setIcon(0, SkinUtils::getFaceFromCache(profile.id));
item->setData(0, MojangAccountList::PointerRole, QVariant::fromValue(account));
item->setData(0, AccountList::PointerRole, QVariant::fromValue(account));
items.append(item);
}
}
@@ -84,7 +84,7 @@ ProfileSelectDialog::~ProfileSelectDialog()
delete ui;
}
MojangAccountPtr ProfileSelectDialog::selectedAccount() const
AccountPtr ProfileSelectDialog::selectedAccount() const
{
return m_selected;
}
@@ -105,7 +105,7 @@ void ProfileSelectDialog::on_buttonBox_accepted()
if (selection.size() > 0)
{
QModelIndex selected = selection.first();
m_selected = selected.data(MojangAccountList::PointerRole).value<MojangAccountPtr>();
m_selected = selected.data(AccountList::PointerRole).value<AccountPtr>();
}
close();
}

View File

@@ -19,7 +19,7 @@
#include <memory>
#include "minecraft/auth/MojangAccountList.h"
#include "minecraft/auth/AccountList.h"
namespace Ui
{
@@ -59,7 +59,7 @@ public:
* Gets a pointer to the account that the user selected.
* This is null if the user clicked cancel or hasn't clicked OK yet.
*/
MojangAccountPtr selectedAccount() const;
AccountPtr selectedAccount() const;
/*!
* Returns true if the user checked the "use as global default" checkbox.
@@ -80,10 +80,10 @@ slots:
void on_buttonBox_rejected();
protected:
std::shared_ptr<MojangAccountList> m_accounts;
std::shared_ptr<AccountList> m_accounts;
//! The account that was selected when the user clicked OK.
MojangAccountPtr m_selected;
AccountPtr m_selected;
private:
Ui::ProfileSelectDialog *ui;

View File

@@ -107,7 +107,7 @@ void SkinUploadDialog::on_skinBrowseBtn_clicked()
ui->skinPathTextBox->setText(cooked_path);
}
SkinUploadDialog::SkinUploadDialog(MojangAccountPtr acct, QWidget *parent)
SkinUploadDialog::SkinUploadDialog(AccountPtr acct, QWidget *parent)
:QDialog(parent), m_acct(acct), ui(new Ui::SkinUploadDialog)
{
ui->setupUi(this);

View File

@@ -1,7 +1,7 @@
#pragma once
#include <QDialog>
#include <minecraft/auth/MojangAccount.h>
#include <minecraft/auth/Account.h>
namespace Ui
{
@@ -11,7 +11,7 @@ namespace Ui
class SkinUploadDialog : public QDialog {
Q_OBJECT
public:
explicit SkinUploadDialog(MojangAccountPtr acct, QWidget *parent = 0);
explicit SkinUploadDialog(AccountPtr acct, QWidget *parent = 0);
virtual ~SkinUploadDialog() {};
public slots:
@@ -22,7 +22,7 @@ public slots:
void on_skinBrowseBtn_clicked();
protected:
MojangAccountPtr m_acct;
AccountPtr m_acct;
private:
Ui::SkinUploadDialog *ui;