diff options
author | flow <flowlnlnln@gmail.com> | 2022-07-18 12:40:25 -0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-07-18 12:40:25 -0300 |
commit | dec81c4f274dd8388d442062cf9fa18600aa850d (patch) | |
tree | 11bf89a63035e4bf52b4d875a63cf5872da69bdc /launcher/minecraft/mod/Mod.cpp | |
parent | 56085310cb066c7b3899684c3e3f39fe9fd311c4 (diff) | |
parent | 54b335711acac5e57e94bc9cb81c751c9b2872c5 (diff) | |
download | PrismLauncher-dec81c4f274dd8388d442062cf9fa18600aa850d.tar.gz PrismLauncher-dec81c4f274dd8388d442062cf9fa18600aa850d.tar.bz2 PrismLauncher-dec81c4f274dd8388d442062cf9fa18600aa850d.zip |
Merge pull request #588 from flowln/mod_update
Implement mod updater (:sunglasses:)
Diffstat (limited to 'launcher/minecraft/mod/Mod.cpp')
-rw-r--r-- | launcher/minecraft/mod/Mod.cpp | 39 |
1 files changed, 23 insertions, 16 deletions
diff --git a/launcher/minecraft/mod/Mod.cpp b/launcher/minecraft/mod/Mod.cpp index 742709e3..588d76e3 100644 --- a/launcher/minecraft/mod/Mod.cpp +++ b/launcher/minecraft/mod/Mod.cpp @@ -150,25 +150,30 @@ void Mod::setStatus(ModStatus status) 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 +auto Mod::destroy(QDir& index_dir, bool preserve_metadata) -> bool { - auto n = name(); - // FIXME: This can fail to remove the metadata if the - // "ModMetadataDisabled" setting is on, since there could - // be a name mismatch! - Metadata::remove(index_dir, n); + 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,9 +187,12 @@ auto Mod::details() const -> const ModDetails& auto Mod::name() const -> QString { auto d_name = details().name; - if (!d_name.isEmpty()) { + if (!d_name.isEmpty()) return d_name; - } + + if (metadata()) + return metadata()->name; + return m_name; } @@ -235,11 +243,10 @@ void Mod::finishResolvingWithDetails(std::shared_ptr<ModDetails> details) m_resolved = true; m_localDetails = details; + setStatus(m_temp_status); + 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); } |