From 858361e6d3acc968a31318ef0c87bd94014b9703 Mon Sep 17 00:00:00 2001 From: RickyRister <42636155+RickyRister@users.noreply.github.com> Date: Fri, 28 Nov 2025 14:41:11 -0800 Subject: [PATCH] [DeckLoader] Refactor last load info into struct (#6366) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * [DeckLoader] Refactor last load info into struct * Use constant * [[nodiscard]] * do discard, I guess. --------- Co-authored-by: BrĂ¼bach, Lukas --- .../src/interface/deck_loader/deck_loader.cpp | 42 +++++++++++-------- .../src/interface/deck_loader/deck_loader.h | 38 ++++++++++------- .../widgets/tabs/abstract_tab_deck_editor.cpp | 12 +++--- .../deck_preview_deck_tags_display_widget.cpp | 4 +- .../deck_preview/deck_preview_widget.cpp | 8 ++-- 5 files changed, 60 insertions(+), 44 deletions(-) diff --git a/cockatrice/src/interface/deck_loader/deck_loader.cpp b/cockatrice/src/interface/deck_loader/deck_loader.cpp index 320302142..372aa0aa8 100644 --- a/cockatrice/src/interface/deck_loader/deck_loader.cpp +++ b/cockatrice/src/interface/deck_loader/deck_loader.cpp @@ -25,13 +25,11 @@ const QStringList DeckLoader::ACCEPTED_FILE_EXTENSIONS = {"*.cod", "*.dec", "*.d const QStringList DeckLoader::FILE_NAME_FILTERS = { tr("Common deck formats (%1)").arg(ACCEPTED_FILE_EXTENSIONS.join(" ")), tr("All files (*.*)")}; -DeckLoader::DeckLoader(QObject *parent) - : QObject(parent), deckList(new DeckList()), lastFileFormat(CockatriceFormat), lastRemoteDeckId(-1) +DeckLoader::DeckLoader(QObject *parent) : QObject(parent), deckList(new DeckList()) { } -DeckLoader::DeckLoader(QObject *parent, DeckList *_deckList) - : QObject(parent), deckList(_deckList), lastFileFormat(CockatriceFormat), lastRemoteDeckId(-1) +DeckLoader::DeckLoader(QObject *parent, DeckList *_deckList) : QObject(parent), deckList(_deckList) { } @@ -64,8 +62,10 @@ bool DeckLoader::loadFromFile(const QString &fileName, FileFormat fmt, bool user } if (result) { - lastFileName = fileName; - lastFileFormat = fmt; + lastLoadInfo = { + .fileName = fileName, + .fileFormat = fmt, + }; if (userRequest) { updateLastLoadedTimestamp(fileName, fmt); } @@ -86,8 +86,10 @@ bool DeckLoader::loadFromFileAsync(const QString &fileName, FileFormat fmt, bool watcher->deleteLater(); if (result) { - lastFileName = fileName; - lastFileFormat = fmt; + lastLoadInfo = { + .fileName = fileName, + .fileFormat = fmt, + }; if (userRequest) { updateLastLoadedTimestamp(fileName, fmt); } @@ -129,9 +131,9 @@ bool DeckLoader::loadFromRemote(const QString &nativeString, int remoteDeckId) { bool result = deckList->loadFromString_Native(nativeString); if (result) { - lastFileName = QString(); - lastFileFormat = CockatriceFormat; - lastRemoteDeckId = remoteDeckId; + lastLoadInfo = { + .remoteDeckId = remoteDeckId, + }; emit deckLoaded(); } @@ -157,8 +159,10 @@ bool DeckLoader::saveToFile(const QString &fileName, FileFormat fmt) } if (result) { - lastFileName = fileName; - lastFileFormat = fmt; + lastLoadInfo = { + .fileName = fileName, + .fileFormat = fmt, + }; qCInfo(DeckLoaderLog) << "Deck was saved -" << result; } @@ -201,8 +205,10 @@ bool DeckLoader::updateLastLoadedTimestamp(const QString &fileName, FileFormat f file.close(); // Close the file to ensure changes are flushed if (result) { - lastFileName = fileName; - lastFileFormat = fmt; + lastLoadInfo = { + .fileName = fileName, + .fileFormat = fmt, + }; // Re-open the file and set the original timestamp if (!file.open(QIODevice::ReadWrite)) { @@ -582,8 +588,10 @@ bool DeckLoader::convertToCockatriceFormat(QString fileName) } else { qCInfo(DeckLoaderLog) << "Original file deleted successfully:" << fileName; } - lastFileName = newFileName; - lastFileFormat = CockatriceFormat; + lastLoadInfo = { + .fileName = newFileName, + .fileFormat = CockatriceFormat, + }; } return result; diff --git a/cockatrice/src/interface/deck_loader/deck_loader.h b/cockatrice/src/interface/deck_loader/deck_loader.h index ba9ba807d..00136e6bb 100644 --- a/cockatrice/src/interface/deck_loader/deck_loader.h +++ b/cockatrice/src/interface/deck_loader/deck_loader.h @@ -28,6 +28,21 @@ public: CockatriceFormat }; + /** + * @brief Information about where the deck was loaded from. + * + * For local decks, the remoteDeckId field will always be -1. + * For remote decks, fileName will be empty and fileFormat will always be CockatriceFormat + */ + struct LoadInfo + { + static constexpr int NON_REMOTE_ID = -1; + + QString fileName = ""; + FileFormat fileFormat = CockatriceFormat; + int remoteDeckId = NON_REMOTE_ID; + }; + /** * Supported file extensions for decklist files */ @@ -46,9 +61,7 @@ public: private: DeckList *deckList; - QString lastFileName; - FileFormat lastFileFormat; - int lastRemoteDeckId; + LoadInfo lastLoadInfo; public: DeckLoader(QObject *parent); @@ -56,26 +69,19 @@ public: DeckLoader(const DeckLoader &) = delete; DeckLoader &operator=(const DeckLoader &) = delete; - [[nodiscard]] const QString &getLastFileName() const + const LoadInfo &getLastLoadInfo() const { - return lastFileName; + return lastLoadInfo; } - void setLastFileName(const QString &_lastFileName) + + void setLastLoadInfo(const LoadInfo &info) { - lastFileName = _lastFileName; - } - [[nodiscard]] FileFormat getLastFileFormat() const - { - return lastFileFormat; - } - [[nodiscard]] int getLastRemoteDeckId() const - { - return lastRemoteDeckId; + lastLoadInfo = info; } [[nodiscard]] bool hasNotBeenLoaded() const { - return getLastFileName().isEmpty() && getLastRemoteDeckId() == -1; + return lastLoadInfo.fileName.isEmpty() && lastLoadInfo.remoteDeckId == LoadInfo::NON_REMOTE_ID; } static void clearSetNamesAndNumbers(const DeckList *deckList); diff --git a/cockatrice/src/interface/widgets/tabs/abstract_tab_deck_editor.cpp b/cockatrice/src/interface/widgets/tabs/abstract_tab_deck_editor.cpp index a3d3fe2cf..89611aa48 100644 --- a/cockatrice/src/interface/widgets/tabs/abstract_tab_deck_editor.cpp +++ b/cockatrice/src/interface/widgets/tabs/abstract_tab_deck_editor.cpp @@ -224,8 +224,8 @@ void AbstractTabDeckEditor::openDeck(DeckLoader *deck) { setDeck(deck); - if (!deck->getLastFileName().isEmpty()) { - SettingsCache::instance().recents().updateRecentlyOpenedDeckPaths(deck->getLastFileName()); + if (!deck->getLastLoadInfo().fileName.isEmpty()) { + SettingsCache::instance().recents().updateRecentlyOpenedDeckPaths(deck->getLastLoadInfo().fileName); } } @@ -411,7 +411,7 @@ void AbstractTabDeckEditor::openDeckFromFile(const QString &fileName, DeckOpenLo bool AbstractTabDeckEditor::actSaveDeck() { DeckLoader *const deck = getDeckLoader(); - if (deck->getLastRemoteDeckId() != -1) { + if (deck->getLastLoadInfo().remoteDeckId != DeckLoader::LoadInfo::NON_REMOTE_ID) { QString deckString = deck->getDeckList()->writeToString_Native(); if (deckString.length() > MAX_FILE_LENGTH) { QMessageBox::critical(this, tr("Error"), tr("Could not save remote deck")); @@ -419,7 +419,7 @@ bool AbstractTabDeckEditor::actSaveDeck() } Command_DeckUpload cmd; - cmd.set_deck_id(static_cast(deck->getLastRemoteDeckId())); + cmd.set_deck_id(static_cast(deck->getLastLoadInfo().remoteDeckId)); cmd.set_deck_list(deckString.toStdString()); PendingCommand *pend = AbstractClient::prepareSessionCommand(cmd); @@ -427,9 +427,9 @@ bool AbstractTabDeckEditor::actSaveDeck() tabSupervisor->getClient()->sendCommand(pend); return true; - } else if (deck->getLastFileName().isEmpty()) + } else if (deck->getLastLoadInfo().fileName.isEmpty()) return actSaveDeckAs(); - else if (deck->saveToFile(deck->getLastFileName(), deck->getLastFileFormat())) { + else if (deck->saveToFile(deck->getLastLoadInfo().fileName, deck->getLastLoadInfo().fileFormat)) { setModified(false); return true; } diff --git a/cockatrice/src/interface/widgets/visual_deck_storage/deck_preview/deck_preview_deck_tags_display_widget.cpp b/cockatrice/src/interface/widgets/visual_deck_storage/deck_preview/deck_preview_deck_tags_display_widget.cpp index eb105697f..b8425e842 100644 --- a/cockatrice/src/interface/widgets/visual_deck_storage/deck_preview/deck_preview_deck_tags_display_widget.cpp +++ b/cockatrice/src/interface/widgets/visual_deck_storage/deck_preview/deck_preview_deck_tags_display_widget.cpp @@ -112,7 +112,7 @@ void DeckPreviewDeckTagsDisplayWidget::openTagEditDlg() return; deckPreviewWidget->deckLoader->convertToCockatriceFormat(deckPreviewWidget->filePath); - deckPreviewWidget->filePath = deckPreviewWidget->deckLoader->getLastFileName(); + deckPreviewWidget->filePath = deckPreviewWidget->deckLoader->getLastLoadInfo().fileName; deckPreviewWidget->refreshBannerCardText(); canAddTags = true; } @@ -125,7 +125,7 @@ void DeckPreviewDeckTagsDisplayWidget::openTagEditDlg() return; deckPreviewWidget->deckLoader->convertToCockatriceFormat(deckPreviewWidget->filePath); - deckPreviewWidget->filePath = deckPreviewWidget->deckLoader->getLastFileName(); + deckPreviewWidget->filePath = deckPreviewWidget->deckLoader->getLastLoadInfo().fileName; deckPreviewWidget->refreshBannerCardText(); canAddTags = true; diff --git a/cockatrice/src/interface/widgets/visual_deck_storage/deck_preview/deck_preview_widget.cpp b/cockatrice/src/interface/widgets/visual_deck_storage/deck_preview/deck_preview_widget.cpp index 8b2bec10b..b330b0c4c 100644 --- a/cockatrice/src/interface/widgets/visual_deck_storage/deck_preview/deck_preview_widget.cpp +++ b/cockatrice/src/interface/widgets/visual_deck_storage/deck_preview/deck_preview_widget.cpp @@ -79,7 +79,7 @@ void DeckPreviewWidget::initializeUi(const bool deckLoadSuccess) bannerCardDisplayWidget->setCard(bannerCard); bannerCardDisplayWidget->setFontSize(24); - setFilePath(deckLoader->getLastFileName()); + setFilePath(deckLoader->getLastLoadInfo().fileName); colorIdentityWidget = new ColorIdentityWidget(this, getColorIdentity()); deckTagsDisplayWidget = new DeckPreviewDeckTagsDisplayWidget(this, deckLoader->getDeckList()); @@ -185,7 +185,7 @@ QString DeckPreviewWidget::getColorIdentity() */ QString DeckPreviewWidget::getDisplayName() const { - return deckLoader->getDeckList()->getName().isEmpty() ? QFileInfo(deckLoader->getLastFileName()).fileName() + return deckLoader->getDeckList()->getName().isEmpty() ? QFileInfo(deckLoader->getLastLoadInfo().fileName).fileName() : deckLoader->getDeckList()->getName(); } @@ -408,7 +408,9 @@ void DeckPreviewWidget::actRenameFile() return; } - deckLoader->setLastFileName(newFilePath); + DeckLoader::LoadInfo lastLoadInfo = deckLoader->getLastLoadInfo(); + lastLoadInfo.fileName = newFilePath; + deckLoader->setLastLoadInfo(lastLoadInfo); // update VDS setFilePath(newFilePath);