aboutsummaryrefslogtreecommitdiff
path: root/launcher/ui/pages/modplatform/ImportPage.cpp
diff options
context:
space:
mode:
authorRachel Powers <508861+Ryex@users.noreply.github.com>2023-05-15 16:34:33 -0700
committerRachel Powers <508861+Ryex@users.noreply.github.com>2023-05-15 16:34:33 -0700
commitfc656b6927914d64077e23690859996447908c57 (patch)
tree8d6724cbbaa453d71d77acd00429bd1541d32840 /launcher/ui/pages/modplatform/ImportPage.cpp
parentb1ffc8ddab7d9aff10b6195a75e6e58c43b233ca (diff)
downloadPrismLauncher-fc656b6927914d64077e23690859996447908c57.tar.gz
PrismLauncher-fc656b6927914d64077e23690859996447908c57.tar.bz2
PrismLauncher-fc656b6927914d64077e23690859996447908c57.zip
fix: when given a remost resource, download and identify it before import.
Signed-off-by: Rachel Powers <508861+Ryex@users.noreply.github.com>
Diffstat (limited to 'launcher/ui/pages/modplatform/ImportPage.cpp')
-rw-r--r--launcher/ui/pages/modplatform/ImportPage.cpp30
1 files changed, 21 insertions, 9 deletions
diff --git a/launcher/ui/pages/modplatform/ImportPage.cpp b/launcher/ui/pages/modplatform/ImportPage.cpp
index 315f6555..038b2a84 100644
--- a/launcher/ui/pages/modplatform/ImportPage.cpp
+++ b/launcher/ui/pages/modplatform/ImportPage.cpp
@@ -35,15 +35,20 @@
*/
#include "ImportPage.h"
+#include <qdebug.h>
+#include <qmap.h>
#include "ui/dialogs/ProgressDialog.h"
#include "ui_ImportPage.h"
#include <QFileDialog>
#include <QValidator>
+#include <utility>
#include "ui/dialogs/NewInstanceDialog.h"
#include "ui/dialogs/CustomMessageBox.h"
+#include "modplatform/flame/FlameAPI.h"
+
#include "Json.h"
#include "InstanceImportTask.h"
@@ -119,7 +124,9 @@ void ImportPage::updateState()
if (fi.exists() && (isZip || isMRPack)) {
QFileInfo fi(url.fileName());
- dialog->setSuggestedPack(fi.completeBaseName(), new InstanceImportTask(url, this));
+ auto extra_info = QMap(m_extra_info);
+ qDebug() << "Pack Extra Info" << extra_info << m_extra_info;
+ dialog->setSuggestedPack(fi.completeBaseName(), new InstanceImportTask(url, this, std::move(extra_info)));
dialog->setSuggestedIcon("default");
}
} else if (url.scheme() == "curseforge") {
@@ -129,14 +136,13 @@ void ImportPage::updateState()
auto addonId = query.allQueryItemValues("addonId")[0];
auto fileId = query.allQueryItemValues("fileId")[0];
auto array = new QByteArray();
- auto req = unique_qobject_ptr<NetJob>(new NetJob("Curseforge Meta", APPLICATION->network()));
- req->addNetAction(
- Net::Download::makeByteArray(QUrl(QString("https://api.curseforge.com/v1/mods/%1/files/%2").arg(addonId, fileId)), array));
- connect(req.get(), &NetJob::finished, [array] { delete array; });
- connect(req.get(), &NetJob::failed, this,
+ auto api = FlameAPI();
+ auto job = api.getFile(addonId, fileId, array);
+
+ connect(job.get(), &NetJob::failed, this,
[this](QString reason) { CustomMessageBox::selectable(this, tr("Error"), reason, QMessageBox::Critical)->show(); });
- connect(req.get(), &NetJob::succeeded, this, [this, array, addonId, fileId] {
+ connect(job.get(), &NetJob::succeeded, this, [this, array, addonId, fileId] {
qDebug() << "Returned CFURL Json:\n" << array->toStdString().c_str();
auto doc = Json::requireDocument(*array);
// No way to find out if it's a mod or a modpack before here
@@ -170,7 +176,7 @@ void ImportPage::updateState()
});
ProgressDialog dlUrlDialod(this);
dlUrlDialod.setSkipButton(true, tr("Abort"));
- dlUrlDialod.execWithTask(req.get());
+ dlUrlDialod.execWithTask(job.get());
return;
} else {
if (input.endsWith("?client=y")) {
@@ -180,7 +186,8 @@ void ImportPage::updateState()
}
// hook, line and sinker.
QFileInfo fi(url.fileName());
- dialog->setSuggestedPack(fi.completeBaseName(), new InstanceImportTask(url, this));
+ auto extra_info = QMap(m_extra_info);
+ dialog->setSuggestedPack(fi.completeBaseName(), new InstanceImportTask(url, this, std::move(extra_info)));
dialog->setSuggestedIcon("default");
}
} else {
@@ -194,6 +201,11 @@ void ImportPage::setUrl(const QString& url)
updateState();
}
+void ImportPage::setExtraInfo(const QMap<QString, QString>& extra_info) {
+ m_extra_info = QMap(extra_info); // copy
+ updateState();
+}
+
void ImportPage::on_modpackBtn_clicked()
{
auto filter = QMimeDatabase().mimeTypeForName("application/zip").filterString();