aboutsummaryrefslogtreecommitdiff
path: root/launcher/ui/MainWindow.cpp
diff options
context:
space:
mode:
authorflow <flowlnlnln@gmail.com>2022-12-02 06:39:54 -0800
committerGitHub <noreply@github.com>2022-12-02 06:39:54 -0800
commitfa98bf1ee7cfd9fcbc956b2c603f72398d0d69ce (patch)
tree9865ad46c880b9a808519acdbb4e81cb32289aba /launcher/ui/MainWindow.cpp
parentd1a1b8b6e8dc2eada28db9277a449e1a63fe9cdf (diff)
parent3cc987a5b4afdc0b8df5be420fc6d1e2a19fbe66 (diff)
downloadPrismLauncher-fa98bf1ee7cfd9fcbc956b2c603f72398d0d69ce.tar.gz
PrismLauncher-fa98bf1ee7cfd9fcbc956b2c603f72398d0d69ce.tar.bz2
PrismLauncher-fa98bf1ee7cfd9fcbc956b2c603f72398d0d69ce.zip
Merge pull request #481 from ryanccn/import-resource-pack-dialog-uwu
Diffstat (limited to 'launcher/ui/MainWindow.cpp')
-rw-r--r--launcher/ui/MainWindow.cpp49
1 files changed, 40 insertions, 9 deletions
diff --git a/launcher/ui/MainWindow.cpp b/launcher/ui/MainWindow.cpp
index 34c2ad22..b626bbae 100644
--- a/launcher/ui/MainWindow.cpp
+++ b/launcher/ui/MainWindow.cpp
@@ -72,6 +72,7 @@
#include <BaseInstance.h>
#include <InstanceList.h>
+#include <minecraft/MinecraftInstance.h>
#include <MMCZip.h>
#include <icons/IconList.h>
#include <java/JavaUtils.h>
@@ -107,8 +108,14 @@
#include "ui/dialogs/UpdateDialog.h"
#include "ui/dialogs/EditAccountDialog.h"
#include "ui/dialogs/ExportInstanceDialog.h"
+#include "ui/dialogs/ImportResourcePackDialog.h"
#include "ui/themes/ITheme.h"
+#include <minecraft/mod/ResourcePackFolderModel.h>
+#include <minecraft/mod/tasks/LocalResourcePackParseTask.h>
+#include <minecraft/mod/TexturePackFolderModel.h>
+#include <minecraft/mod/tasks/LocalTexturePackParseTask.h>
+
#include "UpdateController.h"
#include "KonamiCode.h"
@@ -1808,17 +1815,41 @@ void MainWindow::on_actionAddInstance_triggered()
void MainWindow::droppedURLs(QList<QUrl> urls)
{
- for(auto & url:urls)
- {
- if(url.isLocalFile())
- {
- addInstance(url.toLocalFile());
- }
- else
- {
+ // NOTE: This loop only processes one dropped file!
+ for (auto& url : urls) {
+ // The isLocalFile() check below doesn't work as intended without an explicit scheme.
+ if (url.scheme().isEmpty())
+ url.setScheme("file");
+
+ if (!url.isLocalFile()) { // probably instance/modpack
addInstance(url.toString());
+ break;
+ }
+
+ auto localFileName = url.toLocalFile();
+ QFileInfo localFileInfo(localFileName);
+
+ bool isResourcePack = ResourcePackUtils::validate(localFileInfo);
+ bool isTexturePack = TexturePackUtils::validate(localFileInfo);
+
+ if (!isResourcePack && !isTexturePack) { // probably instance/modpack
+ addInstance(localFileName);
+ break;
}
- // Only process one dropped file...
+
+ ImportResourcePackDialog dlg(this);
+
+ if (dlg.exec() != QDialog::Accepted)
+ break;
+
+ qDebug() << "Adding resource/texture pack" << localFileName << "to" << dlg.selectedInstanceKey;
+
+ auto inst = APPLICATION->instances()->getInstanceById(dlg.selectedInstanceKey);
+ auto minecraftInst = std::dynamic_pointer_cast<MinecraftInstance>(inst);
+ if (isResourcePack)
+ minecraftInst->resourcePackList()->installResource(localFileName);
+ else if (isTexturePack)
+ minecraftInst->texturePackList()->installResource(localFileName);
break;
}
}