aboutsummaryrefslogtreecommitdiff
path: root/launcher/minecraft/mod/Mod.cpp
diff options
context:
space:
mode:
authorflow <flowlnlnln@gmail.com>2022-06-19 14:26:15 -0300
committerflow <flowlnlnln@gmail.com>2022-07-17 11:33:43 -0300
commitfd6755c93f3f3f7551f9b7c11d1bbbb48c22e210 (patch)
tree4a5e101deaede01b79f4fa04f5b2c4421b481089 /launcher/minecraft/mod/Mod.cpp
parenta53ee2e35cafd36964663d632877badcf53d8786 (diff)
downloadPrismLauncher-fd6755c93f3f3f7551f9b7c11d1bbbb48c22e210.tar.gz
PrismLauncher-fd6755c93f3f3f7551f9b7c11d1bbbb48c22e210.tar.bz2
PrismLauncher-fd6755c93f3f3f7551f9b7c11d1bbbb48c22e210.zip
change: mod metadata improvements
- Use slug instead of name - Keep temporary status before having local details Signed-off-by: flow <flowlnlnln@gmail.com>
Diffstat (limited to 'launcher/minecraft/mod/Mod.cpp')
-rw-r--r--launcher/minecraft/mod/Mod.cpp36
1 files changed, 23 insertions, 13 deletions
diff --git a/launcher/minecraft/mod/Mod.cpp b/launcher/minecraft/mod/Mod.cpp
index bba7b342..7227fc94 100644
--- a/launcher/minecraft/mod/Mod.cpp
+++ b/launcher/minecraft/mod/Mod.cpp
@@ -147,25 +147,36 @@ void Mod::setStatus(ModStatus status)
if (m_localDetails) {
m_localDetails->status = status;
} else {
- m_temp_status = status;
+ if (!m_temp_status.get())
+ m_temp_status.reset(new ModStatus());
+
+ *m_temp_status = status;
}
}
-void Mod::setMetadata(Metadata::ModStruct* metadata)
+void Mod::setMetadata(const Metadata::ModStruct& metadata)
{
if (status() == ModStatus::NoMetadata)
setStatus(ModStatus::Installed);
if (m_localDetails) {
- m_localDetails->metadata.reset(metadata);
+ m_localDetails->metadata = std::make_shared<Metadata::ModStruct>(std::move(metadata));
} else {
- m_temp_metadata.reset(metadata);
+ m_temp_metadata = std::make_shared<Metadata::ModStruct>(std::move(metadata));
}
}
auto Mod::destroy(QDir& index_dir, bool preserve_metadata) -> bool
{
- if (!preserve_metadata && status() != ModStatus::NoMetadata)
- Metadata::remove(index_dir, metadata()->mod_id());
+ if (!preserve_metadata) {
+ qDebug() << QString("Destroying metadata for '%1' on purpose").arg(name());
+
+ if (metadata()) {
+ Metadata::remove(index_dir, metadata()->slug);
+ } else {
+ auto n = name();
+ Metadata::remove(index_dir, n);
+ }
+ }
m_type = MOD_UNKNOWN;
return FS::deletePath(m_file.filePath());
@@ -182,7 +193,7 @@ auto Mod::name() const -> QString
if (!d_name.isEmpty())
return d_name;
- if (status() != ModStatus::NoMetadata)
+ if (metadata())
return metadata()->name;
return m_name;
@@ -211,7 +222,7 @@ auto Mod::authors() const -> QStringList
auto Mod::status() const -> ModStatus
{
if (!m_localDetails)
- return m_temp_status;
+ return m_temp_status ? *m_temp_status : ModStatus::NoMetadata;
return details().status;
}
@@ -235,11 +246,10 @@ void Mod::finishResolvingWithDetails(std::shared_ptr<ModDetails> details)
m_resolved = true;
m_localDetails = details;
+ setStatus(m_temp_status ? *m_temp_status : ModStatus::NoMetadata);
+
if (m_localDetails && m_temp_metadata && m_temp_metadata->isValid()) {
- m_localDetails->metadata = m_temp_metadata;
- if (status() == ModStatus::NoMetadata)
- setStatus(ModStatus::Installed);
+ setMetadata(*m_temp_metadata);
+ m_temp_metadata.reset();
}
-
- setStatus(m_temp_status);
}