summaryrefslogtreecommitdiffstats
path: root/api/logic/minecraft/SimpleModList.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'api/logic/minecraft/SimpleModList.cpp')
-rw-r--r--api/logic/minecraft/SimpleModList.cpp23
1 files changed, 21 insertions, 2 deletions
diff --git a/api/logic/minecraft/SimpleModList.cpp b/api/logic/minecraft/SimpleModList.cpp
index e8583a35..adab5ba4 100644
--- a/api/logic/minecraft/SimpleModList.cpp
+++ b/api/logic/minecraft/SimpleModList.cpp
@@ -145,11 +145,30 @@ bool SimpleModList::installMod(const QString &filename)
return false;
if (type == Mod::MOD_SINGLEFILE || type == Mod::MOD_ZIPFILE || type == Mod::MOD_LITEMOD)
{
- QString newpath = FS::PathCombine(m_dir.path(), fileinfo.fileName());
+ auto newpath = FS::PathCombine(m_dir.path(), fileinfo.fileName());
+ // if it's already there, rename it and disable it. if there was already an old thing, remove it.
if(QFile::exists(newpath))
- QFile::remove(newpath);
+ {
+ auto olddisabledpath = newpath + "-old.disabled";
+ if(QFile::exists(olddisabledpath))
+ {
+ if(!QFile::remove(olddisabledpath))
+ {
+ // FIXME: report error correctly
+ return false;
+ }
+ }
+ if(!QFile::rename(newpath, olddisabledpath))
+ {
+ // FIXME: report error correctly
+ return false;
+ }
+ }
if (!QFile::copy(fileinfo.filePath(), newpath))
+ {
+ // FIXME: report error correctly
return false;
+ }
FS::updateTimestamp(newpath);
m.repath(newpath);
update();