summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPetr Mrázek <peterix@gmail.com>2014-04-13 23:06:28 +0200
committerPetr Mrázek <peterix@gmail.com>2014-04-13 23:06:28 +0200
commitb6d7ffab477cbd7d6c49c4c16ec1de615279e7ef (patch)
treec572081aac9af42a41e23ac229f3ade4ed0bb221
parent04b36a3e55f8dedf9f0a4992c4347a21131b4176 (diff)
downloadMultiMC-b6d7ffab477cbd7d6c49c4c16ec1de615279e7ef.tar
MultiMC-b6d7ffab477cbd7d6c49c4c16ec1de615279e7ef.tar.gz
MultiMC-b6d7ffab477cbd7d6c49c4c16ec1de615279e7ef.tar.lz
MultiMC-b6d7ffab477cbd7d6c49c4c16ec1de615279e7ef.tar.xz
MultiMC-b6d7ffab477cbd7d6c49c4c16ec1de615279e7ef.zip
Detect and report missing local libraries.
-rw-r--r--logic/OneSixLibrary.cpp27
-rw-r--r--logic/OneSixLibrary.h1
-rw-r--r--logic/OneSixUpdate.cpp18
3 files changed, 32 insertions, 14 deletions
diff --git a/logic/OneSixLibrary.cpp b/logic/OneSixLibrary.cpp
index c78679d1..7032809d 100644
--- a/logic/OneSixLibrary.cpp
+++ b/logic/OneSixLibrary.cpp
@@ -140,33 +140,32 @@ QString OneSixLibrary::hint() const
return m_hint;
}
-bool OneSixLibrary::filesExist()
+QStringList OneSixLibrary::files()
{
+ QStringList retval;
QString storage = storagePath();
if (storage.contains("${arch}"))
{
QString cooked_storage = storage;
cooked_storage.replace("${arch}", "32");
- QFileInfo info32(PathCombine("libraries", cooked_storage));
- if (!info32.exists())
- {
- return false;
- }
+ retval.append(PathCombine("libraries", cooked_storage));
cooked_storage = storage;
cooked_storage.replace("${arch}", "64");
- QFileInfo info64(PathCombine("libraries", cooked_storage));
- if (!info64.exists())
- {
- return false;
- }
+ retval.append(PathCombine("libraries", cooked_storage));
}
else
+ retval.append(PathCombine("libraries", storage));
+ return retval;
+}
+
+bool OneSixLibrary::filesExist()
+{
+ auto libFiles = files();
+ for(auto file: libFiles)
{
- QFileInfo info(PathCombine("libraries", storage));
+ QFileInfo info(file);
if (!info.exists())
- {
return false;
- }
}
return true;
}
diff --git a/logic/OneSixLibrary.h b/logic/OneSixLibrary.h
index 3bd21c51..a74b7cac 100644
--- a/logic/OneSixLibrary.h
+++ b/logic/OneSixLibrary.h
@@ -143,4 +143,5 @@ public:
bool extractTo(QString target_dir);
bool filesExist();
+ QStringList files();
};
diff --git a/logic/OneSixUpdate.cpp b/logic/OneSixUpdate.cpp
index cddd0def..27bc415f 100644
--- a/logic/OneSixUpdate.cpp
+++ b/logic/OneSixUpdate.cpp
@@ -268,10 +268,16 @@ void OneSixUpdate::jarlibStart()
auto metacache = MMC->metacache();
QList<ForgeXzDownloadPtr> ForgeLibs;
+ QList<std::shared_ptr<OneSixLibrary>> brokenLocalLibs;
+
for (auto lib : libs)
{
if (lib->hint() == "local")
+ {
+ if(!lib->filesExist())
+ brokenLocalLibs.append(lib);
continue;
+ }
QString raw_storage = lib->storagePath();
QString raw_dl = lib->downloadUrl();
@@ -305,6 +311,18 @@ void OneSixUpdate::jarlibStart()
f(raw_storage, raw_dl);
}
}
+ if(!brokenLocalLibs.empty())
+ {
+ jarlibDownloadJob.reset();
+ QStringList failed;
+ for(auto brokenLib : brokenLocalLibs)
+ {
+ failed.append(brokenLib->files());
+ }
+ QString failed_all = failed.join("\n");
+ emitFailed(tr("Some libraries marked as 'local' are missing their jar files:\n%1\n\nYou'll have to correct this problem manually. If this is an externally tracked instance, make sure to run it at least once outside of MultiMC.").arg(failed_all));
+ return;
+ }
// TODO: think about how to propagate this from the original json file... or IF AT ALL
QString forgeMirrorList = "http://files.minecraftforge.net/mirror-brand.list";
if (!ForgeLibs.empty())