mirror of
https://github.com/PrismLauncher/PrismLauncher.git
synced 2026-06-29 01:54:20 +03:00
remove InstanceName
Signed-off-by: Trial97 <alexandru.tripon97@gmail.com>
This commit is contained in:
parent
f67a670bcf
commit
3338db3f28
8 changed files with 95 additions and 110 deletions
|
|
@ -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();
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
};
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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());
|
||||
|
|
|
|||
|
|
@ -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());
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue