diff options
author | flow <flowlnlnln@gmail.com> | 2022-12-02 06:39:54 -0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-12-02 06:39:54 -0800 |
commit | fa98bf1ee7cfd9fcbc956b2c603f72398d0d69ce (patch) | |
tree | 9865ad46c880b9a808519acdbb4e81cb32289aba /launcher/ui/MainWindow.cpp | |
parent | d1a1b8b6e8dc2eada28db9277a449e1a63fe9cdf (diff) | |
parent | 3cc987a5b4afdc0b8df5be420fc6d1e2a19fbe66 (diff) | |
download | PrismLauncher-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.cpp | 49 |
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; } } |