refactor: move general info from Mod to Resource
This allows us to create other resources that are not Mods, but can still share a significant portion of code. Signed-off-by: flow <flowlnlnln@gmail.com>
This commit is contained in:
@ -36,13 +36,10 @@
|
||||
|
||||
#include "Mod.h"
|
||||
|
||||
#include <QDebug>
|
||||
#include <QDir>
|
||||
#include <QString>
|
||||
|
||||
#include <FileSystem.h>
|
||||
#include <QDebug>
|
||||
|
||||
#include "Application.h"
|
||||
#include "MetadataHandler.h"
|
||||
|
||||
namespace {
|
||||
@ -51,75 +48,27 @@ ModDetails invalidDetails;
|
||||
|
||||
}
|
||||
|
||||
Mod::Mod(const QFileInfo& file)
|
||||
Mod::Mod(const QFileInfo& file) : Resource(file)
|
||||
{
|
||||
repath(file);
|
||||
m_changedDateTime = file.lastModified();
|
||||
m_enabled = (file.suffix() != "disabled");
|
||||
}
|
||||
|
||||
Mod::Mod(const QDir& mods_dir, const Metadata::ModStruct& metadata)
|
||||
: m_file(mods_dir.absoluteFilePath(metadata.filename))
|
||||
, m_internal_id(metadata.filename)
|
||||
, m_name(metadata.name)
|
||||
: Mod(mods_dir.absoluteFilePath(metadata.filename))
|
||||
{
|
||||
if (m_file.isDir()) {
|
||||
m_type = MOD_FOLDER;
|
||||
} else {
|
||||
if (metadata.filename.endsWith(".zip") || metadata.filename.endsWith(".jar"))
|
||||
m_type = MOD_ZIPFILE;
|
||||
else if (metadata.filename.endsWith(".litemod"))
|
||||
m_type = MOD_LITEMOD;
|
||||
else
|
||||
m_type = MOD_SINGLEFILE;
|
||||
}
|
||||
|
||||
m_enabled = true;
|
||||
m_changedDateTime = m_file.lastModified();
|
||||
|
||||
m_name = metadata.name;
|
||||
m_temp_metadata = std::make_shared<Metadata::ModStruct>(std::move(metadata));
|
||||
}
|
||||
|
||||
void Mod::repath(const QFileInfo& file)
|
||||
{
|
||||
m_file = file;
|
||||
QString name_base = file.fileName();
|
||||
|
||||
m_type = Mod::MOD_UNKNOWN;
|
||||
|
||||
m_internal_id = name_base;
|
||||
|
||||
if (m_file.isDir()) {
|
||||
m_type = MOD_FOLDER;
|
||||
m_name = name_base;
|
||||
} else if (m_file.isFile()) {
|
||||
if (name_base.endsWith(".disabled")) {
|
||||
m_enabled = false;
|
||||
name_base.chop(9);
|
||||
} else {
|
||||
m_enabled = true;
|
||||
}
|
||||
if (name_base.endsWith(".zip") || name_base.endsWith(".jar")) {
|
||||
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;
|
||||
}
|
||||
m_name = name_base;
|
||||
}
|
||||
}
|
||||
|
||||
auto Mod::enable(bool value) -> bool
|
||||
{
|
||||
if (m_type == Mod::MOD_UNKNOWN || m_type == Mod::MOD_FOLDER)
|
||||
if (m_type == ResourceType::UNKNOWN || m_type == ResourceType::FOLDER)
|
||||
return false;
|
||||
|
||||
if (m_enabled == value)
|
||||
return false;
|
||||
|
||||
QString path = m_file.absoluteFilePath();
|
||||
QString path = m_file_info.absoluteFilePath();
|
||||
QFile file(path);
|
||||
if (value) {
|
||||
if (!path.endsWith(".disabled"))
|
||||
@ -136,7 +85,7 @@ auto Mod::enable(bool value) -> bool
|
||||
}
|
||||
|
||||
if (status() == ModStatus::NoMetadata)
|
||||
repath(QFileInfo(path));
|
||||
setFile(QFileInfo(path));
|
||||
|
||||
m_enabled = value;
|
||||
return true;
|
||||
@ -175,8 +124,7 @@ auto Mod::destroy(QDir& index_dir, bool preserve_metadata) -> bool
|
||||
}
|
||||
}
|
||||
|
||||
m_type = MOD_UNKNOWN;
|
||||
return FS::deletePath(m_file.filePath());
|
||||
return Resource::destroy();
|
||||
}
|
||||
|
||||
auto Mod::details() const -> const ModDetails&
|
||||
@ -239,8 +187,8 @@ auto Mod::metadata() const -> const std::shared_ptr<Metadata::ModStruct>
|
||||
|
||||
void Mod::finishResolvingWithDetails(std::shared_ptr<ModDetails> details)
|
||||
{
|
||||
m_resolving = false;
|
||||
m_resolved = true;
|
||||
m_is_resolving = false;
|
||||
m_is_resolved = true;
|
||||
m_localDetails = details;
|
||||
|
||||
setStatus(m_temp_status);
|
||||
|
Reference in New Issue
Block a user