From 40c238442f154b05d8d4ce29e0a6bc0d2c6afdf4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Petr=20Mr=C3=A1zek?= Date: Thu, 10 Jul 2014 01:26:45 +0200 Subject: [PATCH] Fix #354, make jar mods and patch files in general more resilient. --- logic/minecraft/InstanceVersion.cpp | 7 +++++-- logic/minecraft/VersionBuilder.cpp | 8 +++++++- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/logic/minecraft/InstanceVersion.cpp b/logic/minecraft/InstanceVersion.cpp index e71609e6..addbcc84 100644 --- a/logic/minecraft/InstanceVersion.cpp +++ b/logic/minecraft/InstanceVersion.cpp @@ -85,7 +85,8 @@ bool InstanceVersion::remove(const int index) { return false; } - if(!QFile::remove(VersionPatches.at(index)->getPatchFilename())) + auto toDelete = VersionPatches.at(index)->getPatchFilename(); + if(!QFile::remove(toDelete)) return false; beginRemoveRows(QModelIndex(), index, index); VersionPatches.removeAt(index); @@ -504,8 +505,10 @@ void InstanceVersion::installJarModByFilename(QString filepath) f->name = target_name; f->fileId = target_id; f->order = getFreeOrderNumber(); + QString patchFileName = PathCombine(patchDir, target_id + ".json"); + f->filename = patchFileName; - QFile file(PathCombine(patchDir, target_id + ".json")); + QFile file(patchFileName); if (!file.open(QFile::WriteOnly)) { QLOG_ERROR() << "Error opening" << file.fileName() diff --git a/logic/minecraft/VersionBuilder.cpp b/logic/minecraft/VersionBuilder.cpp index 66e7d327..fea0c8d1 100644 --- a/logic/minecraft/VersionBuilder.cpp +++ b/logic/minecraft/VersionBuilder.cpp @@ -111,8 +111,14 @@ void VersionBuilder::readInstancePatches() continue; // parse the file QString filename = patches.absoluteFilePath(id + ".json"); + QFileInfo finfo(filename); + if(!finfo.exists()) + { + QLOG_INFO() << "Patch file " << filename << " was deleted by external means..."; + continue; + } QLOG_INFO() << "Reading" << filename << "by user order"; - auto file = parseJsonFile(QFileInfo(filename), false); + auto file = parseJsonFile(finfo, false); // sanity check. prevent tampering with files. if (file->fileId != id) {