aboutsummaryrefslogtreecommitdiff
path: root/launcher/minecraft/mod/Mod.cpp
diff options
context:
space:
mode:
authorflow <flowlnlnln@gmail.com>2022-08-12 17:06:20 -0300
committerflow <flowlnlnln@gmail.com>2022-08-20 10:48:51 -0300
commite7cf9932a9695417d40d895ac6174186f074f053 (patch)
tree4eb2c02b9c46366d2b22c396a153504aa9e3f40f /launcher/minecraft/mod/Mod.cpp
parent0c9d03f5dffc37f3eda500fd520907a142ac061f (diff)
downloadPrismLauncher-e7cf9932a9695417d40d895ac6174186f074f053.tar.gz
PrismLauncher-e7cf9932a9695417d40d895ac6174186f074f053.tar.bz2
PrismLauncher-e7cf9932a9695417d40d895ac6174186f074f053.zip
refactor: simplify Mod structure
No need to keep track of pointers left and right. A single one already gives enough headaches! Signed-off-by: flow <flowlnlnln@gmail.com>
Diffstat (limited to 'launcher/minecraft/mod/Mod.cpp')
-rw-r--r--launcher/minecraft/mod/Mod.cpp50
1 files changed, 15 insertions, 35 deletions
diff --git a/launcher/minecraft/mod/Mod.cpp b/launcher/minecraft/mod/Mod.cpp
index ed91d999..5e186471 100644
--- a/launcher/minecraft/mod/Mod.cpp
+++ b/launcher/minecraft/mod/Mod.cpp
@@ -44,13 +44,7 @@
#include "MetadataHandler.h"
#include "Version.h"
-namespace {
-
-ModDetails invalidDetails;
-
-}
-
-Mod::Mod(const QFileInfo& file) : Resource(file)
+Mod::Mod(const QFileInfo& file) : Resource(file), m_local_details()
{
m_enabled = (file.suffix() != "disabled");
}
@@ -59,7 +53,7 @@ Mod::Mod(const QDir& mods_dir, const Metadata::ModStruct& metadata)
: Mod(mods_dir.absoluteFilePath(metadata.filename))
{
m_name = metadata.name;
- m_temp_metadata = std::make_shared<Metadata::ModStruct>(std::move(metadata));
+ m_local_details.metadata = std::make_shared<Metadata::ModStruct>(std::move(metadata));
}
auto Mod::enable(bool value) -> bool
@@ -95,22 +89,14 @@ auto Mod::enable(bool value) -> bool
void Mod::setStatus(ModStatus status)
{
- if (m_localDetails) {
- m_localDetails->status = status;
- } else {
- m_temp_status = status;
- }
+ m_local_details.status = status;
}
-void Mod::setMetadata(const Metadata::ModStruct& metadata)
+void Mod::setMetadata(std::shared_ptr<Metadata::ModStruct>&& metadata)
{
if (status() == ModStatus::NoMetadata)
setStatus(ModStatus::Installed);
- if (m_localDetails) {
- m_localDetails->metadata = std::make_shared<Metadata::ModStruct>(std::move(metadata));
- } else {
- m_temp_metadata = std::make_shared<Metadata::ModStruct>(std::move(metadata));
- }
+ m_local_details.metadata = metadata;
}
std::pair<int, bool> Mod::compare(const Resource& other, SortType type) const
@@ -176,7 +162,7 @@ auto Mod::destroy(QDir& index_dir, bool preserve_metadata) -> bool
auto Mod::details() const -> const ModDetails&
{
- return m_localDetails ? *m_localDetails : invalidDetails;
+ return m_local_details;
}
auto Mod::name() const -> QString
@@ -213,35 +199,29 @@ auto Mod::authors() const -> QStringList
auto Mod::status() const -> ModStatus
{
- if (!m_localDetails)
- return m_temp_status;
return details().status;
}
auto Mod::metadata() -> std::shared_ptr<Metadata::ModStruct>
{
- if (m_localDetails)
- return m_localDetails->metadata;
- return m_temp_metadata;
+ return m_local_details.metadata;
}
auto Mod::metadata() const -> const std::shared_ptr<Metadata::ModStruct>
{
- if (m_localDetails)
- return m_localDetails->metadata;
- return m_temp_metadata;
+ return m_local_details.metadata;
}
-void Mod::finishResolvingWithDetails(std::shared_ptr<ModDetails> details)
+void Mod::finishResolvingWithDetails(ModDetails&& details)
{
m_is_resolving = false;
m_is_resolved = true;
- m_localDetails = details;
- setStatus(m_temp_status);
+ std::shared_ptr<Metadata::ModStruct> metadata = details.metadata;
+ if (details.status == ModStatus::Unknown)
+ details.status = m_local_details.status;
- if (m_localDetails && m_temp_metadata && m_temp_metadata->isValid()) {
- setMetadata(*m_temp_metadata);
- m_temp_metadata.reset();
- }
+ m_local_details = std::move(details);
+ if (metadata)
+ setMetadata(std::move(metadata));
}