Merge https://github.com/robotbrain/MultiMC5 into develop
This commit is contained in:
		| @@ -47,7 +47,7 @@ void Mod::repath(const QFileInfo &file) | ||||
| 	} | ||||
| 	else if (m_file.isFile()) | ||||
| 	{ | ||||
| 		if(name_base.endsWith(".disabled")) | ||||
| 		if (name_base.endsWith(".disabled")) | ||||
| 		{ | ||||
| 			m_enabled = false; | ||||
| 			name_base.chop(9); | ||||
| @@ -62,6 +62,11 @@ void Mod::repath(const QFileInfo &file) | ||||
| 			m_type = MOD_ZIPFILE; | ||||
| 			name_base.chop(4); | ||||
| 		} | ||||
| 		else if (name_base.endsWith(".litemod")) | ||||
| 		{ | ||||
| 			m_type = MOD_LITEMOD; | ||||
| 			name_base.chop(8); | ||||
| 		} | ||||
| 		else | ||||
| 		{ | ||||
| 			m_type = MOD_SINGLEFILE; | ||||
| @@ -79,7 +84,7 @@ void Mod::repath(const QFileInfo &file) | ||||
|  | ||||
| 		if (zip.setCurrentFile("mcmod.info")) | ||||
| 		{ | ||||
| 			if(!file.open(QIODevice::ReadOnly)) | ||||
| 			if (!file.open(QIODevice::ReadOnly)) | ||||
| 			{ | ||||
| 				zip.close(); | ||||
| 				return; | ||||
| @@ -120,6 +125,27 @@ void Mod::repath(const QFileInfo &file) | ||||
| 			ReadMCModInfo(data); | ||||
| 		} | ||||
| 	} | ||||
| 	else if (m_type == MOD_LITEMOD) | ||||
| 	{ | ||||
| 		QuaZip zip(m_file.filePath()); | ||||
| 		if (!zip.open(QuaZip::mdUnzip)) | ||||
| 			return; | ||||
|  | ||||
| 		QuaZipFile file(&zip); | ||||
|  | ||||
| 		if (zip.setCurrentFile("litemod.json")) | ||||
| 		{ | ||||
| 			if (!file.open(QIODevice::ReadOnly)) | ||||
| 			{ | ||||
| 				zip.close(); | ||||
| 				return; | ||||
| 			} | ||||
|  | ||||
| 			ReadLiteModInfo(file.readAll()); | ||||
| 			file.close(); | ||||
| 		} | ||||
| 		zip.close(); | ||||
| 	} | ||||
| } | ||||
|  | ||||
| // NEW format | ||||
| @@ -152,8 +178,7 @@ void Mod::ReadMCModInfo(QByteArray contents) | ||||
| 		} | ||||
| 		m_credits = firstObj.value("credits").toString(); | ||||
| 		return; | ||||
| 	} | ||||
| 	; | ||||
| 	}; | ||||
| 	QJsonParseError jsonError; | ||||
| 	QJsonDocument jsonDoc = QJsonDocument::fromJson(contents, &jsonError); | ||||
| 	// this is the very old format that had just the array | ||||
| @@ -197,13 +222,29 @@ void Mod::ReadForgeInfo(QByteArray contents) | ||||
| 	m_version = major + "." + minor + "." + revision + "." + build; | ||||
| } | ||||
|  | ||||
| void Mod::ReadLiteModInfo(QByteArray contents) | ||||
| { | ||||
| 	QJsonParseError jsonError; | ||||
| 	QJsonDocument jsonDoc = QJsonDocument::fromJson(contents, &jsonError); | ||||
| 	auto object = jsonDoc.object(); | ||||
| 	m_mod_id = object.value("name").toString(); | ||||
| 	if(object.contains("version")) | ||||
| 		m_version=object.value("version").toString(""); | ||||
| 	else | ||||
| 		m_version=object.value("revision").toString(""); | ||||
| 	m_mcversion = object.value("mcversion").toString(); | ||||
| 	m_authors = object.value("author").toString(); | ||||
| 	m_description = object.value("description").toString(); | ||||
| 	m_homeurl = object.value("url").toString(); | ||||
| } | ||||
|  | ||||
| bool Mod::replace(Mod &with) | ||||
| { | ||||
| 	if (!destroy()) | ||||
| 		return false; | ||||
| 	bool success = false; | ||||
| 	auto t = with.type(); | ||||
| 	 | ||||
|  | ||||
| 	if (t == MOD_ZIPFILE || t == MOD_SINGLEFILE) | ||||
| 	{ | ||||
| 		QLOG_DEBUG() << "Copy: " << with.m_file.filePath() << " to " << m_file.filePath(); | ||||
| @@ -260,6 +301,7 @@ QString Mod::version() const | ||||
| 	switch (type()) | ||||
| 	{ | ||||
| 	case MOD_ZIPFILE: | ||||
| 	case MOD_LITEMOD: | ||||
| 		return m_version; | ||||
| 	case MOD_FOLDER: | ||||
| 		return "Folder"; | ||||
| @@ -272,27 +314,27 @@ QString Mod::version() const | ||||
|  | ||||
| bool Mod::enable(bool value) | ||||
| { | ||||
| 	if(m_type == Mod::MOD_UNKNOWN || m_type == Mod::MOD_FOLDER) | ||||
| 	if (m_type == Mod::MOD_UNKNOWN || m_type == Mod::MOD_FOLDER) | ||||
| 		return false; | ||||
|  | ||||
| 	if(m_enabled == value) | ||||
| 	if (m_enabled == value) | ||||
| 		return false; | ||||
|  | ||||
| 	QString path = m_file.absoluteFilePath(); | ||||
| 	if(value) | ||||
| 	if (value) | ||||
| 	{ | ||||
| 		QFile foo(path); | ||||
| 		if(!path.endsWith(".disabled")) | ||||
| 		if (!path.endsWith(".disabled")) | ||||
| 			return false; | ||||
| 		path.chop(9); | ||||
| 		if(!foo.rename(path)) | ||||
| 		if (!foo.rename(path)) | ||||
| 			return false; | ||||
| 	} | ||||
| 	else | ||||
| 	{ | ||||
| 		QFile foo(path); | ||||
| 		path += ".disabled"; | ||||
| 		if(!foo.rename(path)) | ||||
| 		if (!foo.rename(path)) | ||||
| 			return false; | ||||
| 	} | ||||
| 	m_file = QFileInfo(path); | ||||
| @@ -305,6 +347,5 @@ bool Mod::operator==(const Mod &other) const | ||||
| } | ||||
| bool Mod::strongCompare(const Mod &other) const | ||||
| { | ||||
| 	return mmc_id() == other.mmc_id() && | ||||
| 		   version() == other.version() && type() == other.type(); | ||||
| 	return mmc_id() == other.mmc_id() && version() == other.version() && type() == other.type(); | ||||
| } | ||||
|   | ||||
| @@ -25,6 +25,7 @@ public: | ||||
| 		MOD_ZIPFILE,	//!< The mod is a zip file containing the mod's class files. | ||||
| 		MOD_SINGLEFILE, //!< The mod is a single file (not a zip file). | ||||
| 		MOD_FOLDER,	 //!< The mod is in a folder on the filesystem. | ||||
| 		MOD_LITEMOD, //!< The mod is a litemod | ||||
| 	}; | ||||
|  | ||||
| 	Mod(const QFileInfo &file); | ||||
| @@ -102,6 +103,7 @@ public: | ||||
| private: | ||||
| 	void ReadMCModInfo(QByteArray contents); | ||||
| 	void ReadForgeInfo(QByteArray contents); | ||||
| 	void ReadLiteModInfo(QByteArray contents); | ||||
|  | ||||
| protected: | ||||
|  | ||||
|   | ||||
| @@ -255,7 +255,7 @@ bool ModList::installMod(const QFileInfo &filename, int index) | ||||
| 	auto type = m.type(); | ||||
| 	if (type == Mod::MOD_UNKNOWN) | ||||
| 		return false; | ||||
| 	if (type == Mod::MOD_SINGLEFILE || type == Mod::MOD_ZIPFILE) | ||||
| 	if (type == Mod::MOD_SINGLEFILE || type == Mod::MOD_ZIPFILE || type == Mod::MOD_LITEMOD) | ||||
| 	{ | ||||
| 		QString newpath = PathCombine(m_dir.path(), filename.fileName()); | ||||
| 		if (!QFile::copy(filename.filePath(), newpath)) | ||||
|   | ||||
		Reference in New Issue
	
	Block a user