remove InstanceName

Signed-off-by: Trial97 <alexandru.tripon97@gmail.com>
This commit is contained in:
Trial97 2026-05-07 23:39:31 +03:00
parent f67a670bcf
commit 3338db3f28
No known key found for this signature in database
GPG key ID: 55EF5DA53DB36318
8 changed files with 95 additions and 110 deletions

View file

@ -955,7 +955,7 @@ class InstanceStaging : public Task {
void childSucceeded()
{
unsigned sleepTime = backoff();
if (m_parent->commitStagedInstance(m_stagingPath, *m_child, m_child->group(), *m_child)) {
if (m_parent->commitStagedInstance(m_stagingPath, *m_child, m_child->group())) {
m_backoffTimer.stop();
emitSucceeded();
return;
@ -972,14 +972,14 @@ class InstanceStaging : public Task {
void childFailed(const QString& reason)
{
m_backoffTimer.stop();
m_parent->destroyStagingPath(m_stagingPath);
FS::deletePath(m_stagingPath);
emitFailed(reason);
}
void childAborted()
{
m_backoffTimer.stop();
m_parent->destroyStagingPath(m_stagingPath);
FS::deletePath(m_stagingPath);
emitAborted();
}
@ -1024,22 +1024,20 @@ QString InstanceList::getStagedInstancePath()
return result;
}
bool InstanceList::commitStagedInstance(const QString& path,
const InstanceName& instanceName,
QString groupName,
const InstanceTask& commiting)
bool InstanceList::commitStagedInstance(const QString& path, const InstanceTask& instanceTask, QString groupName)
{
if (groupName.isEmpty() && !groupName.isNull())
if (groupName.isEmpty() && !groupName.isNull()) {
groupName = QString();
}
QString instID;
auto should_override = commiting.shouldOverride();
auto shouldOverride = instanceTask.shouldOverride();
if (should_override) {
instID = commiting.originalInstanceID();
if (shouldOverride) {
instID = instanceTask.originalInstanceID();
} else {
instID = FS::DirNameFromString(instanceName.modifiedName(), m_instDir);
instID = FS::DirNameFromString(instanceTask.modifiedName(), m_instDir);
}
Q_ASSERT(!instID.isEmpty());
@ -1048,7 +1046,7 @@ bool InstanceList::commitStagedInstance(const QString& path,
WatchLock lock(m_watcher, m_instDir);
QString destination = FS::PathCombine(m_instDir, instID);
if (should_override) {
if (shouldOverride) {
if (!FS::overrideFolder(destination, path)) {
qWarning() << "Failed to override" << path << "to" << destination;
return false;
@ -1073,11 +1071,6 @@ bool InstanceList::commitStagedInstance(const QString& path,
return true;
}
bool InstanceList::destroyStagingPath(const QString& keyPath)
{
return FS::deletePath(keyPath);
}
int InstanceList::getTotalPlayTime()
{
updateTotalPlayTime();

View file

@ -46,7 +46,6 @@
class QFileSystemWatcher;
class InstanceTask;
struct InstanceName;
using InstanceId = QString;
using GroupId = QString;
@ -136,13 +135,7 @@ class InstanceList : public QAbstractListModel {
* should_override is used when another similar instance already exists, and we want to override it
* - for instance, when updating it.
*/
bool commitStagedInstance(const QString& keyPath, const InstanceName& instanceName, QString groupName, const InstanceTask&);
/**
* Destroy a previously created staging area given by @keyPath - used when creation fails.
* Used by instance manipulation tasks.
*/
bool destroyStagingPath(const QString& keyPath);
bool commitStagedInstance(const QString& keyPath, const InstanceTask& instanceTask, QString groupName);
int getTotalPlayTime();

View file

@ -7,89 +7,100 @@
#include <QPushButton>
InstanceNameChange askForChangingInstanceName(QWidget* parent, const QString& old_name, const QString& new_name)
InstanceNameChange askForChangingInstanceName(QWidget* parent, const QString& oldName, const QString& newName)
{
auto dialog =
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),
.arg(oldName, newName),
QMessageBox::Question, QMessageBox::No | QMessageBox::Yes);
auto result = dialog->exec();
if (result == QMessageBox::Yes)
if (result == QMessageBox::Yes) {
return InstanceNameChange::ShouldChange;
}
return InstanceNameChange::ShouldKeep;
}
ShouldUpdate askIfShouldUpdate(QWidget* parent, QString original_version_name)
ShouldUpdate askIfShouldUpdate(QWidget* parent, QString originalVersionName)
{
if (APPLICATION->settings()->get("SkipModpackUpdatePrompt").toBool())
if (APPLICATION->settings()->get("SkipModpackUpdatePrompt").toBool()) {
return ShouldUpdate::SkipUpdating;
}
auto info = CustomMessageBox::selectable(
auto* info = CustomMessageBox::selectable(
parent, QObject::tr("Similar modpack was found!"),
QObject::tr(
"One or more of your instances are from this same modpack%1. Do you want to create a "
"separate instance, or update the existing one?\n\nNOTE: Make sure you made a backup of your important instance data before "
"updating, as worlds can be corrupted and some configuration may be lost (due to pack overrides).")
.arg(original_version_name),
.arg(originalVersionName),
QMessageBox::Information, QMessageBox::Cancel);
QAbstractButton* update = info->addButton(QObject::tr("Update existing instance"), QMessageBox::AcceptRole);
QAbstractButton* skip = info->addButton(QObject::tr("Create new instance"), QMessageBox::ResetRole);
info->exec();
if (info->clickedButton() == update)
if (info->clickedButton() == update) {
return ShouldUpdate::Update;
if (info->clickedButton() == skip)
}
if (info->clickedButton() == skip) {
return ShouldUpdate::SkipUpdating;
}
return ShouldUpdate::Cancel;
}
QString InstanceName::name() const
QString InstanceTask::name() const
{
if (!m_modified_name.isEmpty())
if (!m_modifiedName.isEmpty()) {
return modifiedName();
if (!m_original_version.isEmpty())
return QString("%1 %2").arg(m_original_name, m_original_version);
}
if (!m_originalVersion.isEmpty()) {
return QString("%1 %2").arg(m_originalName, m_originalVersion);
}
return m_original_name;
return m_originalName;
}
QString InstanceName::originalName() const
QString InstanceTask::originalName() const
{
return m_original_name;
return m_originalName;
}
QString InstanceName::modifiedName() const
QString InstanceTask::modifiedName() const
{
if (!m_modified_name.isEmpty())
return m_modified_name;
return m_original_name;
if (!m_modifiedName.isEmpty()) {
return m_modifiedName;
}
return m_originalName;
}
QString InstanceName::version() const
QString InstanceTask::version() const
{
return m_original_version;
return m_originalVersion;
}
void InstanceName::setName(InstanceName& other)
void InstanceTask::setOriginalName(const QString& name, const QString& version)
{
m_original_name = other.m_original_name;
m_original_version = other.m_original_version;
m_modified_name = other.m_modified_name;
m_originalName = name;
m_originalVersion = version;
}
void InstanceTask::setOverride(bool override, const QString& instanceIdToOverride)
{
m_overrideExisting = override;
if (!instanceIdToOverride.isEmpty()) {
m_originalInstanceId = instanceIdToOverride;
}
}
InstanceTask::InstanceTask() : Task(), InstanceName() {}
ShouldDeleteSaves askIfShouldDeleteSaves(QWidget* parent)
{
auto dialog = CustomMessageBox::selectable(parent, QObject::tr("Delete Existing Save Files"),
QObject::tr("An earlier version of this mod pack installed save files.\n"
"Would you like to remove those existing saves as part of this update?"),
QMessageBox::Question, QMessageBox::No | QMessageBox::Yes);
auto* dialog = CustomMessageBox::selectable(parent, QObject::tr("Delete Existing Save Files"),
QObject::tr("An earlier version of this mod pack installed save files.\n"
"Would you like to remove those existing saves as part of this update?"),
QMessageBox::Question, QMessageBox::No | QMessageBox::Yes);
auto result = dialog->exec();
return result == QMessageBox::Yes ? ShouldDeleteSaves::Yes : ShouldDeleteSaves::No;
}

View file

@ -1,40 +1,21 @@
#pragma once
#include <cstdint>
#include "settings/SettingsObject.h"
#include "tasks/Task.h"
/* Helpers */
enum class InstanceNameChange { ShouldChange, ShouldKeep };
[[nodiscard]] InstanceNameChange askForChangingInstanceName(QWidget* parent, const QString& old_name, const QString& new_name);
enum class ShouldUpdate { Update, SkipUpdating, Cancel };
[[nodiscard]] ShouldUpdate askIfShouldUpdate(QWidget* parent, QString original_version_name);
enum class ShouldDeleteSaves { NotAsked, Yes, No };
enum class InstanceNameChange : std::uint8_t { ShouldChange, ShouldKeep };
[[nodiscard]] InstanceNameChange askForChangingInstanceName(QWidget* parent, const QString& oldName, const QString& newName);
enum class ShouldUpdate : std::uint8_t { Update, SkipUpdating, Cancel };
[[nodiscard]] ShouldUpdate askIfShouldUpdate(QWidget* parent, QString originalVersionName);
enum class ShouldDeleteSaves : std::uint8_t { NotAsked, Yes, No };
[[nodiscard]] ShouldDeleteSaves askIfShouldDeleteSaves(QWidget* parent);
struct InstanceName {
public:
InstanceName() = default;
InstanceName(QString name, QString version) : m_original_name(std::move(name)), m_original_version(std::move(version)) {}
QString modifiedName() const;
QString originalName() const;
QString name() const;
QString version() const;
void setName(QString name) { m_modified_name = name; }
void setName(InstanceName& other);
protected:
QString m_original_name;
QString m_original_version;
QString m_modified_name;
};
class InstanceTask : public Task, public InstanceName {
class InstanceTask : public Task {
Q_OBJECT
public:
InstanceTask();
InstanceTask() = default;
~InstanceTask() override = default;
void setParentSettings(SettingsObject* settings) { m_globalSettings = settings; }
@ -46,29 +27,37 @@ class InstanceTask : public Task, public InstanceName {
void setGroup(const QString& group) { m_instGroup = group; }
QString group() const { return m_instGroup; }
bool shouldConfirmUpdate() const { return m_confirm_update; }
void setConfirmUpdate(bool confirm) { m_confirm_update = confirm; }
bool shouldConfirmUpdate() const { return m_confirmUpdate; }
void setConfirmUpdate(bool confirm) { m_confirmUpdate = confirm; }
bool shouldOverride() const { return m_override_existing; }
bool shouldOverride() const { return m_overrideExisting; }
QString originalInstanceID() const { return m_original_instance_id; };
QString originalInstanceID() const { return m_originalInstanceId; };
QString modifiedName() const;
QString originalName() const;
QString name() const;
QString version() const;
void setName(const QString& name) { m_modifiedName = name; }
void setOriginalName(const QString& name, const QString& version);
protected:
void setOverride(bool override, QString instance_id_to_override = {})
{
m_override_existing = override;
if (!instance_id_to_override.isEmpty())
m_original_instance_id = instance_id_to_override;
}
void setOverride(bool override, const QString& instanceIdToOverride = {});
protected: /* data */
SettingsObject* m_globalSettings;
SettingsObject* m_globalSettings{};
QString m_instIcon;
QString m_instGroup;
QString m_stagingPath;
bool m_override_existing = false;
bool m_confirm_update = true;
bool m_overrideExisting = false;
bool m_confirmUpdate = true;
QString m_original_instance_id;
QString m_originalInstanceId;
QString m_originalName;
QString m_originalVersion;
QString m_modifiedName;
};

View file

@ -62,7 +62,7 @@ class FlameCreationTask final : public InstanceCreationTask {
setStagingPath(staging_path);
setParentSettings(global_settings);
m_original_instance_id = std::move(original_instance_id);
m_originalInstanceId = std::move(original_instance_id);
}
bool abort() override;
@ -73,7 +73,7 @@ class FlameCreationTask final : public InstanceCreationTask {
private slots:
void idResolverSucceeded(QEventLoop&);
void setupDownloadJob(QEventLoop&);
void copyBlockedMods(QList<BlockedMod> const& blocked_mods);
void copyBlockedMods(const QList<BlockedMod>& blocked_mods);
void validateOtherResources(QEventLoop& loop);
QString getVersionForLoader(QString uid, QString loaderType, QString version, QString mcVersion);

View file

@ -35,7 +35,7 @@ class ModrinthCreationTask final : public InstanceCreationTask {
setStagingPath(stagingPath);
setParentSettings(globalSettings);
m_original_instance_id = std::move(originalInstanceId);
m_originalInstanceId = std::move(originalInstanceId);
}
bool abort() override;

View file

@ -254,9 +254,8 @@ InstanceTask* NewInstanceDialog::extractTask()
{
InstanceTask* extracted = creationTask.release();
InstanceName inst_name(ui->instNameTextBox->placeholderText().trimmed(), importVersion);
inst_name.setName(ui->instNameTextBox->text().trimmed());
extracted->setName(inst_name);
extracted->setName(ui->instNameTextBox->text().trimmed());
extracted->setOriginalName(ui->instNameTextBox->placeholderText().trimmed(), importVersion);
extracted->setGroup(instGroup());
extracted->setIcon(iconKey());

View file

@ -128,7 +128,8 @@ ManagedPackPage::ManagedPackPage(BaseInstance* inst, InstanceWindow* instance_wi
QDesktopServices::openUrl(url);
});
connect(ui->urlLine, &QLineEdit::textChanged, this, [this](QString text) { m_inst->settings()->set("ManagedPackURL", text.trimmed()); });
connect(ui->urlLine, &QLineEdit::textChanged, this,
[this](QString text) { m_inst->settings()->set("ManagedPackURL", text.trimmed()); });
}
ManagedPackPage::~ManagedPackPage()
@ -523,9 +524,8 @@ void ManagedPackPage::updatePack(const QUrl& url, QString versionID, QString ver
if (versionName.isEmpty()) {
extracted->setName(m_inst->name());
} else {
InstanceName inst_name(m_inst->getManagedPackName(), versionName);
inst_name.setName(m_inst->name().replace(m_inst->getManagedPackVersionName(), versionName));
extracted->setName(inst_name);
extracted->setOriginalName(m_inst->getManagedPackName(), versionName);
extracted->setName(m_inst->name().replace(m_inst->getManagedPackVersionName(), versionName));
}
extracted->setGroup(APPLICATION->instances()->getInstanceGroup(m_inst->id()));
extracted->setIcon(m_inst->iconKey());