diff options
author | flow <flowlnlnln@gmail.com> | 2022-06-19 14:26:15 -0300 |
---|---|---|
committer | flow <flowlnlnln@gmail.com> | 2022-07-17 11:33:43 -0300 |
commit | fd6755c93f3f3f7551f9b7c11d1bbbb48c22e210 (patch) | |
tree | 4a5e101deaede01b79f4fa04f5b2c4421b481089 /launcher/minecraft/mod/Mod.cpp | |
parent | a53ee2e35cafd36964663d632877badcf53d8786 (diff) | |
download | PrismLauncher-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.cpp | 36 |
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); } |