From c1e9128d1e2924f8b96975249820f3e61d5c712f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20B=C3=A5ngens?= Date: Thu, 30 Jan 2025 01:37:40 +0100 Subject: [PATCH] fix GlobalSaveClicked() and checkCommonFiles(QList* games) --- src/Model.cpp | 63 ++++++++++++++------------------- src/Model.hpp | 3 +- src/TombRaiderLinuxLauncher.cpp | 15 ++++++-- 3 files changed, 40 insertions(+), 41 deletions(-) diff --git a/src/Model.cpp b/src/Model.cpp index 14a842e..105fb41 100644 --- a/src/Model.cpp +++ b/src/Model.cpp @@ -31,34 +31,33 @@ Model::Model() { Model::~Model() {} +bool Model::setDirectory(const QString& level, const QString& game) { + bool status = false; + if (fileManager.setUpCamp(level, game) && + downloader.setUpCamp(level) && + data.initializeDatabase(level)) { + status = true; + } + return status; +} + void Model::setup(const QString& level, const QString& game) { if (setDirectory(level, game) == true) { - QByteArray commonFiles(8, '\0'); + QList commonFiles; checkCommonFiles(&commonFiles); - m_availableGames.clear(); - for (int i = 1; i <= 5; i++) { - qint8 dirStatus = commonFiles[i]; - if (dirStatus == 1) { - if (fileManager.checkDir( - QString("/Original.TR%1").arg(i), false) == true) { - m_availableGames.append(i); - } + // Iterate backward to avoid index shifting + for (int i = 4; i >= 0; i--) { + int dirStatus = commonFiles[i]; + if (fileManager.checkDir( + QString("/Original.TR%1").arg(i + 1), false) == true) { + commonFiles[i] = i + 1; } else if (dirStatus == 2) { - m_availableGames.append(-i); - // check if there is one of - // TOMBRAID/tomb.exe - // Tomb2.exe - // tomb3.exe - // tomb4.exe - // PCTomb5.exe + commonFiles[i] = -(i + 1); } else { - if (fileManager.checkDir( - QString("/Original.TR%1").arg(i), false) == true) { - m_availableGames.append(i); - } + commonFiles.removeAt(i); } } - emit generateListSignal(m_availableGames); + emit generateListSignal(commonFiles); QCoreApplication::processEvents(); } else { // send signal to gui with error about setup fail @@ -66,28 +65,18 @@ void Model::setup(const QString& level, const QString& game) { } } -bool Model::setDirectory(const QString& level, const QString& game) { - bool status = false; - if (fileManager.setUpCamp(level, game) && - downloader.setUpCamp(level) && - data.initializeDatabase(level)) { - status = true; - } - return status; -} - -void Model::checkCommonFiles(QByteArray* games) { +void Model::checkCommonFiles(QList* games) { for (int i = 1; i <= 5; i++) { int dirStatus = checkGameDirectory(i); if (dirStatus == 1) { // symbolic link - m_availableGames.append(1); + games->append(1); } else if (dirStatus == 2) { // directory - m_availableGames.append(2); + games->append(2); } else if (dirStatus == 3) { - m_availableGames.append(3); + games->append(3); qDebug() << "File could be a broken link or a regular file"; } else { - m_availableGames.append(0); + games->append(0); qDebug() << "File don't exist"; } } @@ -178,7 +167,7 @@ void Model::setupGame(int id) { assert(s != (unsigned int)0); const QString levelPath = QString("/Original.TR%1/").arg(id); - const QString gamePath = QString("%1/").arg(getGameDirectory(id)); + const QString gamePath = QString("/%1/").arg(getGameDirectory(id)); for (size_t i = 0; i < s; i++) { const QString levelFile = QString("%1%2").arg(levelPath, list[i].path); diff --git a/src/Model.hpp b/src/Model.hpp index db4dbed..f4889da 100644 --- a/src/Model.hpp +++ b/src/Model.hpp @@ -57,7 +57,7 @@ class Model : public QObject { static Model instance; return instance; } - void checkCommonFiles(QByteArray* games); + void checkCommonFiles(QList* games); int checkGameDirectory(int id); int checkLevelDirectory(int id); void getList(QVector* list); @@ -84,7 +84,6 @@ class Model : public QObject { bool unpackLevel(const int id, const QString& name); Runner m_wineRunner = Runner("/usr/bin/wine"); - QList m_availableGames; Data& data = Data::getInstance(); FileManager& fileManager = FileManager::getInstance(); Downloader& downloader = Downloader::getInstance(); diff --git a/src/TombRaiderLinuxLauncher.cpp b/src/TombRaiderLinuxLauncher.cpp index 9d1a5e7..46397eb 100644 --- a/src/TombRaiderLinuxLauncher.cpp +++ b/src/TombRaiderLinuxLauncher.cpp @@ -124,6 +124,7 @@ TombRaiderLinuxLauncher::TombRaiderLinuxLauncher(QWidget *parent) } void TombRaiderLinuxLauncher::generateList(const QList& availableGames) { + ui->listWidgetModds->clear(); const QString pictures = ":/pictures/"; OriginalGameData pictueData; @@ -599,8 +600,18 @@ void TombRaiderLinuxLauncher::downloadError(int status) { } void TombRaiderLinuxLauncher::GlobalSaveClicked() { - m_settings.setValue("gamePath" , ui->tableWidgetSetup->item(0, 0)->text()); - m_settings.setValue("levelPath" , ui->tableWidgetSetup->item(1, 0)->text()); + const QString newLevelPath = ui->tableWidgetSetup->item(1, 0)->text(); + const QString newGamePath = ui->tableWidgetSetup->item(0, 0)->text(); + + const QString oldLevelPath = m_settings.value("levelPath").toString(); + const QString oldGamePath = m_settings.value("gamePath").toString(); + + if ((newLevelPath != oldLevelPath) || (newGamePath != oldGamePath)) { + m_settings.setValue("levelPath" , newLevelPath); + m_settings.setValue("gamePath" , newGamePath); + + controller.setup(newLevelPath, newGamePath); + } } void TombRaiderLinuxLauncher::GlobalResetClicked() { ui->tableWidgetSetup->item(0, 0)->setText(