refactor: make mod metadata presence (or lack of) easier to find out
This commit is contained in:
parent
a99858c64d
commit
96e36f0604
@ -54,7 +54,6 @@ Mod::Mod(const QDir& mods_dir, const Metadata::ModStruct& metadata)
|
|||||||
m_type = MOD_SINGLEFILE;
|
m_type = MOD_SINGLEFILE;
|
||||||
}
|
}
|
||||||
|
|
||||||
m_from_metadata = true;
|
|
||||||
m_enabled = true;
|
m_enabled = true;
|
||||||
m_changedDateTime = m_file.lastModified();
|
m_changedDateTime = m_file.lastModified();
|
||||||
|
|
||||||
@ -117,13 +116,27 @@ auto Mod::enable(bool value) -> bool
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!fromMetadata())
|
if (status() == ModStatus::NoMetadata)
|
||||||
repath(QFileInfo(path));
|
repath(QFileInfo(path));
|
||||||
|
|
||||||
m_enabled = value;
|
m_enabled = value;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Mod::setStatus(ModStatus status)
|
||||||
|
{
|
||||||
|
if(m_localDetails.get())
|
||||||
|
m_localDetails->status = status;
|
||||||
|
}
|
||||||
|
void Mod::setMetadata(Metadata::ModStruct* metadata)
|
||||||
|
{
|
||||||
|
if(status() == ModStatus::NoMetadata)
|
||||||
|
setStatus(ModStatus::Installed);
|
||||||
|
|
||||||
|
if(m_localDetails.get())
|
||||||
|
m_localDetails->metadata.reset(metadata);
|
||||||
|
}
|
||||||
|
|
||||||
auto Mod::destroy(QDir& index_dir) -> bool
|
auto Mod::destroy(QDir& index_dir) -> bool
|
||||||
{
|
{
|
||||||
auto n = name();
|
auto n = name();
|
||||||
@ -170,13 +183,22 @@ auto Mod::authors() const -> QStringList
|
|||||||
return details().authors;
|
return details().authors;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
auto Mod::status() const -> ModStatus
|
||||||
|
{
|
||||||
|
return details().status;
|
||||||
|
}
|
||||||
|
|
||||||
void Mod::finishResolvingWithDetails(std::shared_ptr<ModDetails> details)
|
void Mod::finishResolvingWithDetails(std::shared_ptr<ModDetails> details)
|
||||||
{
|
{
|
||||||
m_resolving = false;
|
m_resolving = false;
|
||||||
m_resolved = true;
|
m_resolved = true;
|
||||||
m_localDetails = details;
|
m_localDetails = details;
|
||||||
|
|
||||||
if (fromMetadata() && m_temp_metadata->isValid() && m_localDetails.get()) {
|
if (status() != ModStatus::NoMetadata
|
||||||
|
&& m_temp_metadata.get()
|
||||||
|
&& m_temp_metadata->isValid() &&
|
||||||
|
m_localDetails.get()) {
|
||||||
|
|
||||||
m_localDetails->metadata.swap(m_temp_metadata);
|
m_localDetails->metadata.swap(m_temp_metadata);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -41,7 +41,6 @@ public:
|
|||||||
auto dateTimeChanged() const -> QDateTime { return m_changedDateTime; }
|
auto dateTimeChanged() const -> QDateTime { return m_changedDateTime; }
|
||||||
auto internal_id() const -> QString { return m_internal_id; }
|
auto internal_id() const -> QString { return m_internal_id; }
|
||||||
auto type() const -> ModType { return m_type; }
|
auto type() const -> ModType { return m_type; }
|
||||||
auto fromMetadata() const -> bool { return m_from_metadata; }
|
|
||||||
auto enabled() const -> bool { return m_enabled; }
|
auto enabled() const -> bool { return m_enabled; }
|
||||||
|
|
||||||
auto valid() const -> bool { return m_type != MOD_UNKNOWN; }
|
auto valid() const -> bool { return m_type != MOD_UNKNOWN; }
|
||||||
@ -52,10 +51,14 @@ public:
|
|||||||
auto homeurl() const -> QString;
|
auto homeurl() const -> QString;
|
||||||
auto description() const -> QString;
|
auto description() const -> QString;
|
||||||
auto authors() const -> QStringList;
|
auto authors() const -> QStringList;
|
||||||
|
auto status() const -> ModStatus;
|
||||||
|
|
||||||
auto metadata() const -> const std::shared_ptr<Metadata::ModStruct> { return details().metadata; };
|
auto metadata() const -> const std::shared_ptr<Metadata::ModStruct> { return details().metadata; };
|
||||||
auto metadata() -> std::shared_ptr<Metadata::ModStruct> { return m_localDetails->metadata; };
|
auto metadata() -> std::shared_ptr<Metadata::ModStruct> { return m_localDetails->metadata; };
|
||||||
|
|
||||||
|
void setStatus(ModStatus status);
|
||||||
|
void setMetadata(Metadata::ModStruct* metadata);
|
||||||
|
|
||||||
auto enable(bool value) -> bool;
|
auto enable(bool value) -> bool;
|
||||||
|
|
||||||
// delete all the files of this mod
|
// delete all the files of this mod
|
||||||
@ -82,7 +85,6 @@ protected:
|
|||||||
/* Name as reported via the file name */
|
/* Name as reported via the file name */
|
||||||
QString m_name;
|
QString m_name;
|
||||||
ModType m_type = MOD_UNKNOWN;
|
ModType m_type = MOD_UNKNOWN;
|
||||||
bool m_from_metadata = false;
|
|
||||||
|
|
||||||
/* If the mod has metadata, this will be filled in the constructor, and passed to
|
/* If the mod has metadata, this will be filled in the constructor, and passed to
|
||||||
* the ModDetails when calling finishResolvingWithDetails */
|
* the ModDetails when calling finishResolvingWithDetails */
|
||||||
|
@ -7,6 +7,12 @@
|
|||||||
|
|
||||||
#include "minecraft/mod/MetadataHandler.h"
|
#include "minecraft/mod/MetadataHandler.h"
|
||||||
|
|
||||||
|
enum class ModStatus {
|
||||||
|
Installed, // Both JAR and Metadata are present
|
||||||
|
NotInstalled, // Only the Metadata is present
|
||||||
|
NoMetadata, // Only the JAR is present
|
||||||
|
};
|
||||||
|
|
||||||
struct ModDetails
|
struct ModDetails
|
||||||
{
|
{
|
||||||
/* Mod ID as defined in the ModLoader-specific metadata */
|
/* Mod ID as defined in the ModLoader-specific metadata */
|
||||||
@ -30,6 +36,9 @@ struct ModDetails
|
|||||||
/* List of the author's names */
|
/* List of the author's names */
|
||||||
QStringList authors;
|
QStringList authors;
|
||||||
|
|
||||||
|
/* Installation status of the mod */
|
||||||
|
ModStatus status;
|
||||||
|
|
||||||
/* Metadata information, if any */
|
/* Metadata information, if any */
|
||||||
std::shared_ptr<Metadata::ModStruct> metadata;
|
std::shared_ptr<Metadata::ModStruct> metadata;
|
||||||
};
|
};
|
||||||
|
@ -19,8 +19,13 @@ void ModFolderLoadTask::run()
|
|||||||
m_mods_dir.refresh();
|
m_mods_dir.refresh();
|
||||||
for (auto entry : m_mods_dir.entryInfoList()) {
|
for (auto entry : m_mods_dir.entryInfoList()) {
|
||||||
Mod mod(entry);
|
Mod mod(entry);
|
||||||
if (!m_result->mods.contains(mod.internal_id()))
|
if(m_result->mods.contains(mod.internal_id())){
|
||||||
|
m_result->mods[mod.internal_id()].setStatus(ModStatus::Installed);
|
||||||
|
}
|
||||||
|
else {
|
||||||
m_result->mods[mod.internal_id()] = mod;
|
m_result->mods[mod.internal_id()] = mod;
|
||||||
|
m_result->mods[mod.internal_id()].setStatus(ModStatus::NoMetadata);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
emit succeeded();
|
emit succeeded();
|
||||||
@ -42,6 +47,7 @@ void ModFolderLoadTask::getFromMetadata()
|
|||||||
}
|
}
|
||||||
|
|
||||||
Mod mod(m_mods_dir, metadata);
|
Mod mod(m_mods_dir, metadata);
|
||||||
|
mod.setStatus(ModStatus::NotInstalled);
|
||||||
m_result->mods[mod.internal_id()] = mod;
|
m_result->mods[mod.internal_id()] = mod;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -10,6 +10,7 @@ auto ProviderCapabilities::name(Provider p) -> const char*
|
|||||||
case Provider::FLAME:
|
case Provider::FLAME:
|
||||||
return "curseforge";
|
return "curseforge";
|
||||||
}
|
}
|
||||||
|
return {};
|
||||||
}
|
}
|
||||||
auto ProviderCapabilities::hashType(Provider p) -> QString
|
auto ProviderCapabilities::hashType(Provider p) -> QString
|
||||||
{
|
{
|
||||||
@ -19,6 +20,7 @@ auto ProviderCapabilities::hashType(Provider p) -> QString
|
|||||||
case Provider::FLAME:
|
case Provider::FLAME:
|
||||||
return "murmur2";
|
return "murmur2";
|
||||||
}
|
}
|
||||||
|
return {};
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace ModPlatform
|
} // namespace ModPlatform
|
||||||
|
@ -48,14 +48,9 @@ auto V1::createModFormat(QDir& index_dir, ::Mod& internal_mod) -> Mod
|
|||||||
if(mod.isValid())
|
if(mod.isValid())
|
||||||
return mod;
|
return mod;
|
||||||
|
|
||||||
// Manually construct packwiz mod
|
qWarning() << QString("Tried to create mod metadata with a Mod without metadata!");
|
||||||
mod.name = internal_mod.name();
|
|
||||||
mod.filename = internal_mod.fileinfo().fileName();
|
|
||||||
|
|
||||||
// TODO: Have a mechanism for telling the UI subsystem that we want to gather user information
|
return {};
|
||||||
// (i.e. which mod provider we want to use). Maybe an object parameter with a signal for that?
|
|
||||||
|
|
||||||
return mod;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void V1::updateModIndex(QDir& index_dir, Mod& mod)
|
void V1::updateModIndex(QDir& index_dir, Mod& mod)
|
||||||
|
Loading…
Reference in New Issue
Block a user