aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorflow <flowlnlnln@gmail.com>2022-09-11 13:16:25 -0300
committerflow <flowlnlnln@gmail.com>2022-09-20 18:36:10 -0300
commit06019f01e3e7b87e752ddc15deb850e272a82d21 (patch)
tree45b1e4783760902d0d771a2cf27f049b2f61493d
parentddde885084a8eba61e691974edbc75186438ed55 (diff)
downloadPrismLauncher-06019f01e3e7b87e752ddc15deb850e272a82d21.tar.gz
PrismLauncher-06019f01e3e7b87e752ddc15deb850e272a82d21.tar.bz2
PrismLauncher-06019f01e3e7b87e752ddc15deb850e272a82d21.zip
feat: add dialog to ask whether to chaneg instance's name
This prevents custom names from being lost when updating, by only changing the name if the old instance name constains the old version, so that we can update it if the user whishes to. Signed-off-by: flow <flowlnlnln@gmail.com>
-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;