summaryrefslogtreecommitdiffstats
path: root/gui/MainWindow.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'gui/MainWindow.cpp')
-rw-r--r--gui/MainWindow.cpp96
1 files changed, 51 insertions, 45 deletions
diff --git a/gui/MainWindow.cpp b/gui/MainWindow.cpp
index 7a0b5849..3fdbed44 100644
--- a/gui/MainWindow.cpp
+++ b/gui/MainWindow.cpp
@@ -76,6 +76,7 @@
#include "logic/OneSixUpdate.h"
#include "logic/JavaUtils.h"
#include "logic/NagUtils.h"
+#include "logic/SkinUtils.h"
#include "logic/LegacyInstance.h"
@@ -164,6 +165,41 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWi
statusBar()->addPermanentWidget(m_statusLeft, 1);
statusBar()->addPermanentWidget(m_statusRight, 0);
+ // Add "manage accounts" button, right align
+
+ QWidget* spacer = new QWidget();
+ spacer->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
+ ui->mainToolBar->addWidget(spacer);
+
+ actionManageAccounts = new QToolButton(this);
+ actionManageAccounts->setToolTip(tr("Manage your Mojang or Minecraft accounts."));
+ actionManageAccounts->setObjectName("actionManageAccounts");
+ actionManageAccounts->setText(tr("Manage accounts"));
+ actionManageAccounts->setToolButtonStyle(Qt::ToolButtonTextBesideIcon);
+ actionManageAccounts->setLayoutDirection(Qt::RightToLeft);
+
+ MojangAccountPtr account = MMC->accounts()->activeAccount();
+ if(account != nullptr)
+ {
+ auto job = new NetJob("Startup player skins: " + account->username());
+
+ for(AccountProfile profile : account->profiles())
+ {
+ auto meta = MMC->metacache()->resolveEntry("skins", profile.name() + ".png");
+ auto action = CacheDownload::make(
+ QUrl("http://skins.minecraft.net/MinecraftSkins/" + profile.name() + ".png"),
+ meta);
+ job->addNetAction(action);
+ meta->stale = true;
+ }
+
+ connect(job, SIGNAL(succeeded()), SLOT(activeAccountChanged()));
+ job->start();
+ }
+
+ connect(actionManageAccounts, SIGNAL(clicked()), this, SLOT(on_actionManageAccounts_triggered()));
+ ui->mainToolBar->addWidget(actionManageAccounts);
+
// run the things that load and download other things... FIXME: this is NOT the place
// FIXME: invisible actions in the background = NOPE.
{
@@ -196,6 +232,20 @@ MainWindow::~MainWindow()
delete assets_downloader;
}
+void MainWindow::activeAccountChanged()
+{
+ MojangAccountPtr account = MMC->accounts()->activeAccount();
+
+ if(account != nullptr)
+ {
+ const AccountProfile *profile = account->currentProfile();
+ if(profile != nullptr)
+ {
+ actionManageAccounts->setIcon(SkinUtils::getFaceFromCache(profile->name()));
+ }
+ }
+}
+
bool MainWindow::eventFilter(QObject *obj, QEvent *ev)
{
if (obj == view)
@@ -427,6 +477,7 @@ void MainWindow::on_actionSettings_triggered()
void MainWindow::on_actionManageAccounts_triggered()
{
AccountListDialog dialog(this);
+ connect(&dialog, SIGNAL(activeAccountChanged()), SLOT(activeAccountChanged()));
dialog.exec();
}
@@ -612,51 +663,6 @@ void MainWindow::prepareLaunch(BaseInstance* instance, MojangAccountPtr account)
tDialog.exec(updateTask);
delete updateTask;
}
-
- QString playerName = account->currentProfile()->name();
-
- auto job = new NetJob("Player skin: " + playerName);
-
- auto meta = MMC->metacache()->resolveEntry("skins", playerName + ".png");
- auto action = CacheDownload::make(
- QUrl("http://skins.minecraft.net/MinecraftSkins/" + playerName + ".png"),
- meta);
- job->addNetAction(action);
- meta->stale = true;
-
- job->start();
- auto filename = MMC->metacache()->resolveEntry("skins", "skins.json")->getFullPath();
- QFile listFile(filename);
-
- // Add skin mapping
- QByteArray data;
- {
- if (!listFile.open(QIODevice::ReadWrite))
- {
- QLOG_ERROR() << "Failed to open/make skins list JSON";
- return;
- }
-
- data = listFile.readAll();
- }
-
- QJsonParseError jsonError;
- QJsonDocument jsonDoc = QJsonDocument::fromJson(data, &jsonError);
- QJsonObject root = jsonDoc.object();
- QJsonObject mappings = root.value("mappings").toObject();
- QJsonArray usernames = mappings.value(account->username()).toArray();
-
- if (!usernames.contains(playerName))
- {
- usernames.prepend(playerName);
- mappings[account->username()] = usernames;
- root["mappings"] = mappings;
- jsonDoc.setObject(root);
-
- // QJson hack - shouldn't have to clear the file every time a save happens
- listFile.resize(0);
- listFile.write(jsonDoc.toJson());
- }
}
void MainWindow::launchInstance(BaseInstance *instance, MojangAccountPtr account)