aboutsummaryrefslogtreecommitdiff
path: root/launcher/dialogs/SkinUploadDialog.cpp
diff options
context:
space:
mode:
authorPetr Mrázek <peterix@gmail.com>2021-08-20 01:34:32 +0200
committerPetr Mrázek <peterix@gmail.com>2021-08-20 01:34:32 +0200
commit1b68d51da634ddab39fe872fcc28a4f491c0c8a4 (patch)
tree9a22465d682018830635a8929eab3cc8482b1faa /launcher/dialogs/SkinUploadDialog.cpp
parent94fd9a3535ae9a55c228720858292ed2bb69ff98 (diff)
downloadPrismLauncher-1b68d51da634ddab39fe872fcc28a4f491c0c8a4.tar.gz
PrismLauncher-1b68d51da634ddab39fe872fcc28a4f491c0c8a4.tar.bz2
PrismLauncher-1b68d51da634ddab39fe872fcc28a4f491c0c8a4.zip
NOISSUE add setting capes, tweak missing profile message, fix cape IDs
Diffstat (limited to 'launcher/dialogs/SkinUploadDialog.cpp')
-rw-r--r--launcher/dialogs/SkinUploadDialog.cpp44
1 files changed, 42 insertions, 2 deletions
diff --git a/launcher/dialogs/SkinUploadDialog.cpp b/launcher/dialogs/SkinUploadDialog.cpp
index 19bfac4d..97478f4b 100644
--- a/launcher/dialogs/SkinUploadDialog.cpp
+++ b/launcher/dialogs/SkinUploadDialog.cpp
@@ -1,11 +1,16 @@
#include <QFileInfo>
#include <QFileDialog>
+#include <QPainter>
+
#include <FileSystem.h>
#include <minecraft/services/SkinUpload.h>
+#include <tasks/SequentialTask.h>
+
#include "SkinUploadDialog.h"
#include "ui_SkinUploadDialog.h"
#include "ProgressDialog.h"
#include "CustomMessageBox.h"
+#include <minecraft/services/CapeChange.h>
void SkinUploadDialog::on_buttonBox_rejected()
{
@@ -85,8 +90,13 @@ void SkinUploadDialog::on_buttonBox_accepted()
{
model = SkinUpload::ALEX;
}
- SkinUploadPtr upload = std::make_shared<SkinUpload>(this, session, FS::read(fileName), model);
- if (prog.execWithTask((Task*)upload.get()) != QDialog::Accepted)
+ SequentialTask skinUpload;
+ skinUpload.addTask(std::make_shared<SkinUpload>(this, session, FS::read(fileName), model));
+ auto selectedCape = ui->capeCombo->currentData().toString();
+ if(selectedCape != session->m_accountPtr->accountData()->minecraftProfile.currentCape) {
+ skinUpload.addTask(std::make_shared<CapeChange>(this, session, selectedCape));
+ }
+ if (prog.execWithTask(&skinUpload) != QDialog::Accepted)
{
CustomMessageBox::selectable(this, tr("Skin Upload"), tr("Failed to upload skin!"), QMessageBox::Warning)->exec();
close();
@@ -111,4 +121,34 @@ SkinUploadDialog::SkinUploadDialog(MinecraftAccountPtr acct, QWidget *parent)
:QDialog(parent), m_acct(acct), ui(new Ui::SkinUploadDialog)
{
ui->setupUi(this);
+
+ // FIXME: add a model for this, download/refresh the capes on demand
+ auto &data = *acct->accountData();
+ int index = 0;
+ ui->capeCombo->addItem(tr("No Cape"), QVariant());
+ auto currentCape = data.minecraftProfile.currentCape;
+ if(currentCape.isEmpty()) {
+ ui->capeCombo->setCurrentIndex(index);
+ }
+
+ for(auto & cape: data.minecraftProfile.capes) {
+ index++;
+ if(cape.data.size()) {
+ QPixmap capeImage;
+ if(capeImage.loadFromData(cape.data, "PNG")) {
+ QPixmap preview = QPixmap(10, 16);
+ QPainter painter(&preview);
+ painter.drawPixmap(0, 0, capeImage.copy(1, 1, 10, 16));
+ ui->capeCombo->addItem(capeImage, cape.alias, cape.id);
+ if(currentCape == cape.id) {
+ ui->capeCombo->setCurrentIndex(index);
+ }
+ continue;
+ }
+ }
+ ui->capeCombo->addItem(cape.alias, cape.id);
+ if(currentCape == cape.id) {
+ ui->capeCombo->setCurrentIndex(index);
+ }
+ }
}