NOISSUE add support for Flame packs with resource packs
And a bunch of undefined things we don't handle intentionally just yet...
This commit is contained in:
		| @@ -225,7 +225,7 @@ bool deletePath(QString path) | ||||
| } | ||||
|  | ||||
|  | ||||
| QString PathCombine(QString path1, QString path2) | ||||
| QString PathCombine(const QString & path1, const QString & path2) | ||||
| { | ||||
| 	if(!path1.size()) | ||||
| 		return path2; | ||||
| @@ -234,11 +234,16 @@ QString PathCombine(QString path1, QString path2) | ||||
|     return QDir::cleanPath(path1 + QDir::separator() + path2); | ||||
| } | ||||
|  | ||||
| QString PathCombine(QString path1, QString path2, QString path3) | ||||
| QString PathCombine(const QString & path1, const QString & path2, const QString & path3) | ||||
| { | ||||
| 	return PathCombine(PathCombine(path1, path2), path3); | ||||
| } | ||||
|  | ||||
| QString PathCombine(const QString & path1, const QString & path2, const QString & path3, const QString & path4) | ||||
| { | ||||
| 	return PathCombine(PathCombine(path1, path2, path3), path4); | ||||
| } | ||||
|  | ||||
| QString AbsolutePath(QString path) | ||||
| { | ||||
| 	return QFileInfo(path).absolutePath(); | ||||
|   | ||||
| @@ -83,8 +83,9 @@ private: | ||||
|  */ | ||||
| MULTIMC_LOGIC_EXPORT bool deletePath(QString path); | ||||
|  | ||||
| MULTIMC_LOGIC_EXPORT QString PathCombine(QString path1, QString path2); | ||||
| MULTIMC_LOGIC_EXPORT QString PathCombine(QString path1, QString path2, QString path3); | ||||
| MULTIMC_LOGIC_EXPORT QString PathCombine(const QString &path1, const QString &path2); | ||||
| MULTIMC_LOGIC_EXPORT QString PathCombine(const QString &path1, const QString &path2, const QString &path3); | ||||
| MULTIMC_LOGIC_EXPORT QString PathCombine(const QString &path1, const QString &path2, const QString &path3, const QString &path4); | ||||
|  | ||||
| MULTIMC_LOGIC_EXPORT QString AbsolutePath(QString path); | ||||
|  | ||||
|   | ||||
| @@ -297,8 +297,8 @@ void InstanceImportTask::processFlame() | ||||
| 		m_filesNetJob.reset(new NetJob(tr("Mod download"))); | ||||
| 		for(auto result: results.files) | ||||
| 		{ | ||||
| 			auto path = FS::PathCombine(m_stagingPath, "minecraft/mods", result.fileName); | ||||
| 			auto dl = Net::Download::makeFile(result.url,path); | ||||
| 			auto path = FS::PathCombine(m_stagingPath ,"minecraft", result.targetFolder, result.fileName); | ||||
| 			auto dl = Net::Download::makeFile(result.url, path); | ||||
| 			m_filesNetJob->addNetAction(dl); | ||||
| 		} | ||||
| 		m_modIdResolver.reset(); | ||||
|   | ||||
| @@ -49,6 +49,51 @@ void Flame::FileResolvingTask::netJobFinished() | ||||
| 			} | ||||
| 			out.fileName = Json::requireString(obj, "FileNameOnDisk"); | ||||
| 			out.url = Json::requireString(obj, "DownloadURL"); | ||||
| 			// This is a piece of a Flame project JSON pulled out into the file metadata (here) for convenience | ||||
| 			// It is also optional | ||||
| 			QJsonObject projObj = Json::ensureObject(obj, "_Project", {}); | ||||
| 			if(!projObj.isEmpty()) | ||||
| 			{ | ||||
| 				QString strType = Json::ensureString(projObj, "PackageType", "mod").toLower(); | ||||
| 				if(strType == "singlefile") | ||||
| 				{ | ||||
| 					out.type = File::Type::SingleFile; | ||||
| 				} | ||||
| 				// FIXME: what are these? | ||||
| 				/* | ||||
| 				else if(strType == "ctoc") | ||||
| 				{ | ||||
| 					out.type = File::Type::Ctoc; | ||||
| 				} | ||||
| 				else if(strType == "cmod2") | ||||
| 				{ | ||||
| 					out.type = File::Type::Cmod2; | ||||
| 				} | ||||
| 				*/ | ||||
| 				else if(strType == "mod") | ||||
| 				{ | ||||
| 					out.type = File::Type::Mod; | ||||
| 				} | ||||
| 				// FIXME: how to handle nested packs and folders? | ||||
| 				/* | ||||
| 				else if(strType == "folder") | ||||
| 				{ | ||||
| 					out.type = File::Type::Folder; | ||||
| 				} | ||||
| 				else if(strType == "modpack") | ||||
| 				{ | ||||
| 					out.type = File::Type::Modpack; | ||||
| 				} | ||||
| 				*/ | ||||
| 				else | ||||
| 				{ | ||||
| 					qCritical() << "Resolving of" << out.projectId << out.fileId << "failed because of unknown file type:" << strType; | ||||
| 					out.type = File::Type::Unknown; | ||||
| 					failed = true; | ||||
| 					continue; | ||||
| 				} | ||||
| 				out.targetFolder = Json::ensureString(projObj, "Path", "mods"); | ||||
| 			} | ||||
| 			out.resolved = true; | ||||
| 		} | ||||
| 		catch(JSONValidationError & e) | ||||
|   | ||||
| @@ -5,7 +5,6 @@ static void loadFileV1(Flame::File & f, QJsonObject & file) | ||||
| { | ||||
| 	f.projectId = Json::requireInteger(file, "projectID"); | ||||
| 	f.fileId = Json::requireInteger(file, "fileID"); | ||||
| 	// FIXME: what does this mean? | ||||
| 	f.required = Json::ensureBoolean(file, QString("required"), true); | ||||
| } | ||||
|  | ||||
|   | ||||
| @@ -9,12 +9,24 @@ struct File | ||||
| { | ||||
| 	int projectId = 0; | ||||
| 	int fileId = 0; | ||||
| 	// NOTE: the opposite to 'optional'. This is at the time of writing unused. | ||||
| 	bool required = true; | ||||
|  | ||||
| 	// our | ||||
| 	bool resolved = false; | ||||
| 	QString fileName; | ||||
| 	QString url; | ||||
| 	QString targetFolder = QLatin1Literal("mods"); | ||||
| 	enum class Type | ||||
| 	{ | ||||
| 		Unknown, | ||||
| 		Folder, | ||||
| 		Ctoc, | ||||
| 		SingleFile, | ||||
| 		Cmod2, | ||||
| 		Modpack, | ||||
| 		Mod | ||||
| 	} type = Type::Mod; | ||||
| }; | ||||
|  | ||||
| struct Modloader | ||||
|   | ||||
		Reference in New Issue
	
	Block a user