aboutsummaryrefslogtreecommitdiff
path: root/launcher/ModDownloadTask.cpp
diff options
context:
space:
mode:
authorflow <flowlnlnln@gmail.com>2022-06-10 16:43:01 -0300
committerflow <flowlnlnln@gmail.com>2022-07-17 11:33:42 -0300
commitdfab55112b783d191ac9b596df9c2972b5fe74cb (patch)
treedd070aeab30785c65c06217aae5c7a105ce7a518 /launcher/ModDownloadTask.cpp
parent1709b47bb7fd325c1b6dd482524fffa428b0f5a9 (diff)
downloadPrismLauncher-dfab55112b783d191ac9b596df9c2972b5fe74cb.tar.gz
PrismLauncher-dfab55112b783d191ac9b596df9c2972b5fe74cb.tar.bz2
PrismLauncher-dfab55112b783d191ac9b596df9c2972b5fe74cb.zip
feat: remove existing mod when updating/redownloading it
Signed-off-by: flow <flowlnlnln@gmail.com>
Diffstat (limited to 'launcher/ModDownloadTask.cpp')
-rw-r--r--launcher/ModDownloadTask.cpp11
1 files changed, 10 insertions, 1 deletions
diff --git a/launcher/ModDownloadTask.cpp b/launcher/ModDownloadTask.cpp
index 41856fb5..b1dd88d3 100644
--- a/launcher/ModDownloadTask.cpp
+++ b/launcher/ModDownloadTask.cpp
@@ -27,6 +27,7 @@ ModDownloadTask::ModDownloadTask(ModPlatform::IndexedPack mod, ModPlatform::Inde
{
if (is_indexed) {
m_update_task.reset(new LocalModUpdateTask(mods->indexDir(), m_mod, m_mod_version));
+ connect(m_update_task.get(), &LocalModUpdateTask::hasOldMod, this, &ModDownloadTask::hasOldMod);
addTask(m_update_task);
}
@@ -40,12 +41,13 @@ ModDownloadTask::ModDownloadTask(ModPlatform::IndexedPack mod, ModPlatform::Inde
connect(m_filesNetJob.get(), &NetJob::failed, this, &ModDownloadTask::downloadFailed);
addTask(m_filesNetJob);
-
}
void ModDownloadTask::downloadSucceeded()
{
m_filesNetJob.reset();
+ if (!std::get<0>(to_delete).isEmpty())
+ mods->uninstallMod(std::get<1>(to_delete), true);
}
void ModDownloadTask::downloadFailed(QString reason)
@@ -58,3 +60,10 @@ void ModDownloadTask::downloadProgressChanged(qint64 current, qint64 total)
{
emit progress(current, total);
}
+
+// This indirection is done so that we don't delete a mod before being sure it was
+// downloaded successfully!
+void ModDownloadTask::hasOldMod(QString name, QString filename)
+{
+ to_delete = {name, filename};
+}