aboutsummaryrefslogtreecommitdiff
path: root/launcher
diff options
context:
space:
mode:
authorSefa Eyeoglu <contact@scrumplex.net>2022-08-20 12:50:43 +0200
committerGitHub <noreply@github.com>2022-08-20 12:50:43 +0200
commit311758233b3ab103bf16c8ad71d9b52f2edbb824 (patch)
tree58d9dcc7d232b4d14f5ea820245be4bd18d57275 /launcher
parent6e086eb808bf1442de51c6d097e6235d818b35c6 (diff)
parent2f5e55bea05c600d0ff44678f7a79ea7e276ee6d (diff)
downloadPrismLauncher-311758233b3ab103bf16c8ad71d9b52f2edbb824.tar.gz
PrismLauncher-311758233b3ab103bf16c8ad71d9b52f2edbb824.tar.bz2
PrismLauncher-311758233b3ab103bf16c8ad71d9b52f2edbb824.zip
Merge pull request #1044 from flowln/better_orphan_fix
Diffstat (limited to 'launcher')
-rw-r--r--launcher/minecraft/mod/ModFolderModel.cpp6
-rw-r--r--launcher/minecraft/mod/ModFolderModel.h1
-rw-r--r--launcher/minecraft/mod/tasks/ModFolderLoadTask.cpp18
-rw-r--r--launcher/minecraft/mod/tasks/ModFolderLoadTask.h3
4 files changed, 18 insertions, 10 deletions
diff --git a/launcher/minecraft/mod/ModFolderModel.cpp b/launcher/minecraft/mod/ModFolderModel.cpp
index 112d219e..d4c5e819 100644
--- a/launcher/minecraft/mod/ModFolderModel.cpp
+++ b/launcher/minecraft/mod/ModFolderModel.cpp
@@ -63,6 +63,9 @@ void ModFolderModel::startWatching()
if(is_watching)
return;
+ // Remove orphaned metadata next time
+ m_first_folder_load = true;
+
update();
// Watch the mods folder
@@ -113,7 +116,8 @@ bool ModFolderModel::update()
}
auto index_dir = indexDir();
- auto task = new ModFolderLoadTask(dir(), index_dir, m_is_indexed);
+ auto task = new ModFolderLoadTask(dir(), index_dir, m_is_indexed, m_first_folder_load);
+ m_first_folder_load = false;
m_update = task->result();
diff --git a/launcher/minecraft/mod/ModFolderModel.h b/launcher/minecraft/mod/ModFolderModel.h
index a7d3ece0..3d6efac3 100644
--- a/launcher/minecraft/mod/ModFolderModel.h
+++ b/launcher/minecraft/mod/ModFolderModel.h
@@ -172,6 +172,7 @@ protected:
bool interaction_disabled = false;
QDir m_dir;
bool m_is_indexed;
+ bool m_first_folder_load = true;
QMap<QString, int> modsIndex;
QMap<int, LocalModParseTask::ResultPtr> activeTickets;
int nextResolutionTicket = 0;
diff --git a/launcher/minecraft/mod/tasks/ModFolderLoadTask.cpp b/launcher/minecraft/mod/tasks/ModFolderLoadTask.cpp
index 9b70e7a1..015ead80 100644
--- a/launcher/minecraft/mod/tasks/ModFolderLoadTask.cpp
+++ b/launcher/minecraft/mod/tasks/ModFolderLoadTask.cpp
@@ -38,8 +38,8 @@
#include "minecraft/mod/MetadataHandler.h"
-ModFolderLoadTask::ModFolderLoadTask(QDir& mods_dir, QDir& index_dir, bool is_indexed)
- : m_mods_dir(mods_dir), m_index_dir(index_dir), m_is_indexed(is_indexed), m_result(new Result())
+ModFolderLoadTask::ModFolderLoadTask(QDir& mods_dir, QDir& index_dir, bool is_indexed, bool clean_orphan)
+ : m_mods_dir(mods_dir), m_index_dir(index_dir), m_is_indexed(is_indexed), m_clean_orphan(clean_orphan), m_result(new Result())
{}
void ModFolderLoadTask::run()
@@ -85,12 +85,14 @@ void ModFolderLoadTask::run()
// Remove orphan metadata to prevent issues
// See https://github.com/PolyMC/PolyMC/issues/996
- QMutableMapIterator<QString, Mod::Ptr> iter(m_result->mods);
- while (iter.hasNext()) {
- auto mod = iter.next().value();
- if (mod->status() == ModStatus::NotInstalled) {
- mod->destroy(m_index_dir, false);
- iter.remove();
+ if (m_clean_orphan) {
+ QMutableMapIterator<QString, Mod::Ptr> iter(m_result->mods);
+ while (iter.hasNext()) {
+ auto mod = iter.next().value();
+ if (mod->status() == ModStatus::NotInstalled) {
+ mod->destroy(m_index_dir, false);
+ iter.remove();
+ }
}
}
diff --git a/launcher/minecraft/mod/tasks/ModFolderLoadTask.h b/launcher/minecraft/mod/tasks/ModFolderLoadTask.h
index 0b6bb6cc..1f2015d2 100644
--- a/launcher/minecraft/mod/tasks/ModFolderLoadTask.h
+++ b/launcher/minecraft/mod/tasks/ModFolderLoadTask.h
@@ -56,7 +56,7 @@ public:
}
public:
- ModFolderLoadTask(QDir& mods_dir, QDir& index_dir, bool is_indexed);
+ ModFolderLoadTask(QDir& mods_dir, QDir& index_dir, bool is_indexed, bool clean_orphan = false);
void run();
signals:
void succeeded();
@@ -67,5 +67,6 @@ private:
private:
QDir& m_mods_dir, m_index_dir;
bool m_is_indexed;
+ bool m_clean_orphan;
ResultPtr m_result;
};