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