aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--launcher/InstanceList.cpp5
-rw-r--r--launcher/InstanceTask.cpp24
-rw-r--r--launcher/InstanceTask.h4
-rw-r--r--launcher/modplatform/flame/FlameInstanceCreationTask.cpp12
-rw-r--r--launcher/modplatform/modrinth/ModrinthInstanceCreationTask.cpp10
5 files changed, 44 insertions, 11 deletions
diff --git a/launcher/InstanceList.cpp b/launcher/InstanceList.cpp
index a414e0d5..47b0e75a 100644
--- a/launcher/InstanceList.cpp
+++ b/launcher/InstanceList.cpp
@@ -908,11 +908,6 @@ bool InstanceList::commitStagedInstance(QString path, InstanceName const& instan
qWarning() << "Failed to override" << path << "to" << destination;
return false;
}
-
- if (!inst)
- inst = getInstanceById(instID);
- if (inst)
- inst->setName(instanceName.name());
} else {
if (!dir.rename(path, destination)) {
qWarning() << "Failed to move" << path << "to" << destination;
diff --git a/launcher/InstanceTask.cpp b/launcher/InstanceTask.cpp
index 43a0b947..da280731 100644
--- a/launcher/InstanceTask.cpp
+++ b/launcher/InstanceTask.cpp
@@ -1,5 +1,23 @@
#include "InstanceTask.h"
+#include "ui/dialogs/CustomMessageBox.h"
+
+InstanceNameChange askForChangingInstanceName(QWidget* parent, QString old_name, QString new_name)
+{
+ auto dialog =
+ CustomMessageBox::selectable(parent, QObject::tr("Change instance name"),
+ QObject::tr("The instance's name seems to include the old version. Would you like to update it?\n\n"
+ "Old name: %1\n"
+ "New name: %2")
+ .arg(old_name, new_name),
+ QMessageBox::Question, QMessageBox::No | QMessageBox::Yes);
+ auto result = dialog->exec();
+
+ if (result == QMessageBox::Yes)
+ return InstanceNameChange::ShouldChange;
+ return InstanceNameChange::ShouldKeep;
+}
+
QString InstanceName::name() const
{
if (!m_modified_name.isEmpty())
@@ -26,9 +44,9 @@ QString InstanceName::version() const
void InstanceName::setName(InstanceName& other)
{
- m_original_name = other.m_original_name;
- m_original_version = other.m_original_version;
- m_modified_name = other.m_modified_name;
+ m_original_name = other.m_original_name;
+ m_original_version = other.m_original_version;
+ m_modified_name = other.m_modified_name;
}
InstanceTask::InstanceTask() : Task(), InstanceName() {}
diff --git a/launcher/InstanceTask.h b/launcher/InstanceTask.h
index 5d67a2f0..0987b557 100644
--- a/launcher/InstanceTask.h
+++ b/launcher/InstanceTask.h
@@ -3,6 +3,10 @@
#include "settings/SettingsObject.h"
#include "tasks/Task.h"
+/* Helpers */
+enum class InstanceNameChange { ShouldChange, ShouldKeep };
+[[nodiscard]] InstanceNameChange askForChangingInstanceName(QWidget* parent, QString old_name, QString new_name);
+
struct InstanceName {
public:
InstanceName() = default;
diff --git a/launcher/modplatform/flame/FlameInstanceCreationTask.cpp b/launcher/modplatform/flame/FlameInstanceCreationTask.cpp
index 1b282770..69a41e55 100644
--- a/launcher/modplatform/flame/FlameInstanceCreationTask.cpp
+++ b/launcher/modplatform/flame/FlameInstanceCreationTask.cpp
@@ -15,8 +15,8 @@
#include "settings/INISettingsObject.h"
-#include "ui/dialogs/CustomMessageBox.h"
#include "ui/dialogs/BlockedModsDialog.h"
+#include "ui/dialogs/CustomMessageBox.h"
const static QMap<QString, QString> forgemap = { { "1.2.5", "3.4.9.171" },
{ "1.4.2", "6.0.1.355" },
@@ -348,12 +348,20 @@ bool FlameCreationTask::createInstance()
bool did_succeed = getError().isEmpty();
+ // Update information of the already installed instance, if any.
if (m_instance && did_succeed) {
setAbortable(false);
auto inst = m_instance.value();
+ // Only change the name if it didn't use a custom name, so that the previous custom name
+ // is preserved, but if we're using the original one, we update the version string.
+ // NOTE: This needs to come before the copyManagedPack call!
+ if (inst->name().contains(inst->getManagedPackVersionName())) {
+ if (askForChangingInstanceName(m_parent, inst->name(), instance.name()) == InstanceNameChange::ShouldChange)
+ inst->setName(instance.name());
+ }
+
inst->copyManagedPack(instance);
- inst->setName(instance.name());
}
return did_succeed;
diff --git a/launcher/modplatform/modrinth/ModrinthInstanceCreationTask.cpp b/launcher/modplatform/modrinth/ModrinthInstanceCreationTask.cpp
index c1898dd9..2cb6e786 100644
--- a/launcher/modplatform/modrinth/ModrinthInstanceCreationTask.cpp
+++ b/launcher/modplatform/modrinth/ModrinthInstanceCreationTask.cpp
@@ -262,12 +262,20 @@ bool ModrinthCreationTask::createInstance()
loop.exec();
+ // Update information of the already installed instance, if any.
if (m_instance && ended_well) {
setAbortable(false);
auto inst = m_instance.value();
+ // Only change the name if it didn't use a custom name, so that the previous custom name
+ // is preserved, but if we're using the original one, we update the version string.
+ // NOTE: This needs to come before the copyManagedPack call!
+ if (inst->name().contains(inst->getManagedPackVersionName())) {
+ if (askForChangingInstanceName(m_parent, inst->name(), instance.name()) == InstanceNameChange::ShouldChange)
+ inst->setName(instance.name());
+ }
+
inst->copyManagedPack(instance);
- inst->setName(instance.name());
}
return ended_well;