From 8ef07ec6346a4f9c078184c9497e7c12f5b8c33d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Petr=20Mr=C3=A1zek?= Date: Sun, 13 Sep 2015 04:21:26 +0200 Subject: GH-1227 allow structured world zip import and drag and drop out of MultiMC --- logic/minecraft/World.cpp | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) (limited to 'logic/minecraft/World.cpp') diff --git a/logic/minecraft/World.cpp b/logic/minecraft/World.cpp index 142839d2..bb99aa96 100644 --- a/logic/minecraft/World.cpp +++ b/logic/minecraft/World.cpp @@ -27,6 +27,7 @@ #include #include #include +#include World::World(const QFileInfo &file) { @@ -76,9 +77,16 @@ void World::readFromZip(const QFileInfo &file) { return; } + auto location = MMCZip::findFileInZip(&zip, "level.dat"); + is_valid = !location.isEmpty(); + if (!is_valid) + { + return; + } + m_containerOffsetPath = location; QuaZipFile zippedFile(&zip); // read the install profile - is_valid = zip.setCurrentFile("level.dat"); + is_valid = zip.setCurrentFile(location + "level.dat"); if (!is_valid) { return; @@ -109,8 +117,12 @@ bool World::install(QString to) } if(m_containerFile.isFile()) { - // FIXME: check if this is OK. - return !MMCZip::extractDir(m_containerFile.absoluteFilePath(), finalPath).isEmpty(); + QuaZip zip(m_containerFile.absoluteFilePath()); + if (!zip.open(QuaZip::mdUnzip)) + { + return false; + } + return !MMCZip::extractSubDir(&zip, m_containerOffsetPath, finalPath).isEmpty(); } else if(m_containerFile.isDir()) { -- cgit v1.2.3