Detect and report missing local libraries.

This commit is contained in:
Petr Mrázek 2014-04-13 23:06:28 +02:00
parent 04b36a3e55
commit b6d7ffab47
3 changed files with 32 additions and 14 deletions

View File

@ -140,34 +140,33 @@ QString OneSixLibrary::hint() const
return m_hint; return m_hint;
} }
bool OneSixLibrary::filesExist() QStringList OneSixLibrary::files()
{ {
QStringList retval;
QString storage = storagePath(); QString storage = storagePath();
if (storage.contains("${arch}")) if (storage.contains("${arch}"))
{ {
QString cooked_storage = storage; QString cooked_storage = storage;
cooked_storage.replace("${arch}", "32"); cooked_storage.replace("${arch}", "32");
QFileInfo info32(PathCombine("libraries", cooked_storage)); retval.append(PathCombine("libraries", cooked_storage));
if (!info32.exists())
{
return false;
}
cooked_storage = storage; cooked_storage = storage;
cooked_storage.replace("${arch}", "64"); cooked_storage.replace("${arch}", "64");
QFileInfo info64(PathCombine("libraries", cooked_storage)); retval.append(PathCombine("libraries", cooked_storage));
if (!info64.exists())
{
return false;
}
} }
else 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()) if (!info.exists())
{
return false; return false;
} }
}
return true; return true;
} }

View File

@ -143,4 +143,5 @@ public:
bool extractTo(QString target_dir); bool extractTo(QString target_dir);
bool filesExist(); bool filesExist();
QStringList files();
}; };

View File

@ -268,10 +268,16 @@ void OneSixUpdate::jarlibStart()
auto metacache = MMC->metacache(); auto metacache = MMC->metacache();
QList<ForgeXzDownloadPtr> ForgeLibs; QList<ForgeXzDownloadPtr> ForgeLibs;
QList<std::shared_ptr<OneSixLibrary>> brokenLocalLibs;
for (auto lib : libs) for (auto lib : libs)
{ {
if (lib->hint() == "local") if (lib->hint() == "local")
{
if(!lib->filesExist())
brokenLocalLibs.append(lib);
continue; continue;
}
QString raw_storage = lib->storagePath(); QString raw_storage = lib->storagePath();
QString raw_dl = lib->downloadUrl(); QString raw_dl = lib->downloadUrl();
@ -305,6 +311,18 @@ void OneSixUpdate::jarlibStart()
f(raw_storage, raw_dl); 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 // 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"; QString forgeMirrorList = "http://files.minecraftforge.net/mirror-brand.list";
if (!ForgeLibs.empty()) if (!ForgeLibs.empty())