mirror of
https://github.com/UltimMC/Launcher.git
synced 2025-10-04 09:08:42 +00:00
Fix build
This commit is contained in:
@@ -767,49 +767,27 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new MainWindow
|
|||||||
// Update the menu when the active account changes.
|
// Update the menu when the active account changes.
|
||||||
// Shouldn't have to use lambdas here like this, but if I don't, the compiler throws a fit.
|
// Shouldn't have to use lambdas here like this, but if I don't, the compiler throws a fit.
|
||||||
// Template hell sucks...
|
// Template hell sucks...
|
||||||
connect(MMC->accounts().get(), &AccountList::activeAccountChanged, [this]
|
connect(
|
||||||
{
|
MMC->accounts().get(),
|
||||||
activeAccountChanged();
|
&AccountList::activeAccountChanged,
|
||||||
});
|
[this] {
|
||||||
connect(MMC->accounts().get(), &AccountList::listChanged, [this]
|
activeAccountChanged();
|
||||||
{
|
}
|
||||||
repopulateAccountsMenu();
|
);
|
||||||
});
|
connect(
|
||||||
|
MMC->accounts().get(),
|
||||||
|
&AccountList::listChanged,
|
||||||
|
[this]
|
||||||
|
{
|
||||||
|
repopulateAccountsMenu();
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
// Show initial account
|
// Show initial account
|
||||||
activeAccountChanged();
|
activeAccountChanged();
|
||||||
|
|
||||||
auto accounts = MMC->accounts();
|
// TODO: refresh accounts here?
|
||||||
|
// auto accounts = MMC->accounts();
|
||||||
QList<Net::Download::Ptr> skin_dls;
|
|
||||||
for (int i = 0; i < accounts->count(); i++)
|
|
||||||
{
|
|
||||||
auto account = accounts->at(i);
|
|
||||||
if (!account)
|
|
||||||
{
|
|
||||||
qWarning() << "Null account at index" << i;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
for (auto profile : account->profiles())
|
|
||||||
{
|
|
||||||
auto meta = Env::getInstance().metacache()->resolveEntry("skins", profile.id + ".png");
|
|
||||||
auto action = Net::Download::makeCached(account->provider()->resolveSkinUrl(profile), meta);
|
|
||||||
skin_dls.append(action);
|
|
||||||
meta->setStale(true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (!skin_dls.isEmpty())
|
|
||||||
{
|
|
||||||
auto job = new NetJob("Startup player skins download");
|
|
||||||
connect(job, &NetJob::succeeded, this, &MainWindow::skinJobFinished);
|
|
||||||
connect(job, &NetJob::failed, this, &MainWindow::skinJobFinished);
|
|
||||||
for (auto action : skin_dls)
|
|
||||||
{
|
|
||||||
job->addNetAction(action);
|
|
||||||
}
|
|
||||||
skin_download_job.reset(job);
|
|
||||||
job->start();
|
|
||||||
}
|
|
||||||
|
|
||||||
// load the news
|
// load the news
|
||||||
{
|
{
|
||||||
@@ -1034,17 +1012,6 @@ void MainWindow::updateToolsMenu()
|
|||||||
ui->actionLaunchInstanceOffline->setMenu(launchOfflineMenu);
|
ui->actionLaunchInstanceOffline->setMenu(launchOfflineMenu);
|
||||||
}
|
}
|
||||||
|
|
||||||
QString formatProfile(const QString & profileName, const QString & provider, bool used)
|
|
||||||
{
|
|
||||||
QString textInBrackets = provider;
|
|
||||||
if(used)
|
|
||||||
{
|
|
||||||
textInBrackets += ", in use";
|
|
||||||
}
|
|
||||||
return ((QString)"%1 (%2)").arg(profileName).arg(textInBrackets);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
void MainWindow::repopulateAccountsMenu()
|
void MainWindow::repopulateAccountsMenu()
|
||||||
{
|
{
|
||||||
accountMenu->clear();
|
accountMenu->clear();
|
||||||
|
@@ -446,6 +446,7 @@ bool AccountList::loadV3(QJsonObject& root) {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
bool AccountList::saveList()
|
bool AccountList::saveList()
|
||||||
{
|
{
|
||||||
if (m_listFilePath.isEmpty())
|
if (m_listFilePath.isEmpty())
|
||||||
|
119
launcher/minecraft/auth/AccountList.h
Normal file
119
launcher/minecraft/auth/AccountList.h
Normal file
@@ -0,0 +1,119 @@
|
|||||||
|
/* 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 "MinecraftAccount.h"
|
||||||
|
|
||||||
|
#include <QObject>
|
||||||
|
#include <QVariant>
|
||||||
|
#include <QAbstractListModel>
|
||||||
|
#include <QSharedPointer>
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* List of available Mojang accounts.
|
||||||
|
* This should be loaded in the background by MultiMC on startup.
|
||||||
|
*/
|
||||||
|
class AccountList : public QAbstractListModel
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
public:
|
||||||
|
enum ModelRoles
|
||||||
|
{
|
||||||
|
PointerRole = 0x34B1CB48
|
||||||
|
};
|
||||||
|
|
||||||
|
enum VListColumns
|
||||||
|
{
|
||||||
|
// TODO: Add icon column.
|
||||||
|
NameColumn = 0,
|
||||||
|
ProfileNameColumn,
|
||||||
|
MigrationColumn,
|
||||||
|
TypeColumn,
|
||||||
|
|
||||||
|
NUM_COLUMNS
|
||||||
|
};
|
||||||
|
|
||||||
|
explicit AccountList(QObject *parent = 0);
|
||||||
|
|
||||||
|
const MinecraftAccountPtr at(int i) const;
|
||||||
|
int count() const;
|
||||||
|
|
||||||
|
//////// List Model Functions ////////
|
||||||
|
QVariant data(const QModelIndex &index, int role) const override;
|
||||||
|
virtual QVariant headerData(int section, Qt::Orientation orientation, int role) const override;
|
||||||
|
virtual int rowCount(const QModelIndex &parent) const override;
|
||||||
|
virtual int columnCount(const QModelIndex &parent) const override;
|
||||||
|
virtual Qt::ItemFlags flags(const QModelIndex &index) const override;
|
||||||
|
virtual bool setData(const QModelIndex &index, const QVariant &value, int role) override;
|
||||||
|
|
||||||
|
void addAccount(const MinecraftAccountPtr account);
|
||||||
|
void removeAccount(QModelIndex index);
|
||||||
|
int findAccountByProfileId(const QString &profileId) const;
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* Sets the path to load/save the list file from/to.
|
||||||
|
* If autosave is true, this list will automatically save to the given path whenever it changes.
|
||||||
|
* THIS FUNCTION DOES NOT LOAD THE LIST. If you set autosave, be sure to call loadList() immediately
|
||||||
|
* after calling this function to ensure an autosaved change doesn't overwrite the list you intended
|
||||||
|
* to load.
|
||||||
|
*/
|
||||||
|
void setListFilePath(QString path, bool autosave = false);
|
||||||
|
|
||||||
|
bool loadList();
|
||||||
|
bool loadV2(QJsonObject &root);
|
||||||
|
bool loadV3(QJsonObject &root);
|
||||||
|
bool saveList();
|
||||||
|
|
||||||
|
MinecraftAccountPtr activeAccount() const;
|
||||||
|
void setActiveAccount(const QString &profileId);
|
||||||
|
bool anyAccountIsValid();
|
||||||
|
|
||||||
|
signals:
|
||||||
|
void listChanged();
|
||||||
|
void activeAccountChanged();
|
||||||
|
|
||||||
|
public slots:
|
||||||
|
/**
|
||||||
|
* This is called when one of the accounts changes and the list needs to be updated
|
||||||
|
*/
|
||||||
|
void accountChanged();
|
||||||
|
|
||||||
|
protected:
|
||||||
|
/*!
|
||||||
|
* Called whenever the list changes.
|
||||||
|
* This emits the listChanged() signal and autosaves the list (if autosave is enabled).
|
||||||
|
*/
|
||||||
|
void onListChanged();
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* Called whenever the active account changes.
|
||||||
|
* Emits the activeAccountChanged() signal and autosaves the list if enabled.
|
||||||
|
*/
|
||||||
|
void onActiveChanged();
|
||||||
|
|
||||||
|
QList<MinecraftAccountPtr> m_accounts;
|
||||||
|
|
||||||
|
MinecraftAccountPtr m_activeAccount;
|
||||||
|
|
||||||
|
//! Path to the account list file. Empty string if there isn't one.
|
||||||
|
QString m_listFilePath;
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* If true, the account list will automatically save to the account list path when it changes.
|
||||||
|
* Ignored if m_listFilePath is blank.
|
||||||
|
*/
|
||||||
|
bool m_autosave = false;
|
||||||
|
};
|
@@ -3,7 +3,6 @@
|
|||||||
#include <QJsonArray>
|
#include <QJsonArray>
|
||||||
#include <QJsonDocument>
|
#include <QJsonDocument>
|
||||||
#include <QStringList>
|
#include <QStringList>
|
||||||
#include <QCryptographicHash>
|
|
||||||
|
|
||||||
QString AuthSession::serializeUserProperties()
|
QString AuthSession::serializeUserProperties()
|
||||||
{
|
{
|
||||||
|
@@ -1,3 +1,18 @@
|
|||||||
|
/* 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
|
#pragma once
|
||||||
|
|
||||||
#include <QObject>
|
#include <QObject>
|
||||||
@@ -10,7 +25,6 @@
|
|||||||
|
|
||||||
#include <memory>
|
#include <memory>
|
||||||
#include "AuthSession.h"
|
#include "AuthSession.h"
|
||||||
#include "AccountProfile.h"
|
|
||||||
#include "Usable.h"
|
#include "Usable.h"
|
||||||
#include "AccountData.h"
|
#include "AccountData.h"
|
||||||
|
|
||||||
@@ -103,6 +117,14 @@ public: /* queries */
|
|||||||
return data.profileName();
|
return data.profileName();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool canMigrate() const {
|
||||||
|
return data.canMigrateToMSA;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool isMSA() const {
|
||||||
|
return data.type == AccountType::MSA;
|
||||||
|
}
|
||||||
|
|
||||||
QString typeString() const {
|
QString typeString() const {
|
||||||
switch(data.type) {
|
switch(data.type) {
|
||||||
case AccountType::Mojang: {
|
case AccountType::Mojang: {
|
||||||
|
Reference in New Issue
Block a user