From 7da585c5979fe369bca670a5c827f1b5ca645059 Mon Sep 17 00:00:00 2001 From: RickyRister Date: Thu, 1 Jan 2026 03:05:23 -0800 Subject: [PATCH] use static methods --- .../src/game/deckview/deck_view_container.cpp | 7 +++--- .../interface/widgets/general/home_widget.cpp | 7 +++--- .../widgets/tabs/abstract_tab_deck_editor.cpp | 23 ++++++++----------- .../widgets/tabs/tab_deck_storage.cpp | 23 ++++++++----------- .../tab_deck_storage_visual.cpp | 7 +++--- .../deck_preview_deck_tags_display_widget.cpp | 8 +++---- .../deck_preview/deck_preview_widget.cpp | 6 ++--- 7 files changed, 37 insertions(+), 44 deletions(-) diff --git a/cockatrice/src/game/deckview/deck_view_container.cpp b/cockatrice/src/game/deckview/deck_view_container.cpp index c7876a12f..44b2be6d1 100644 --- a/cockatrice/src/game/deckview/deck_view_container.cpp +++ b/cockatrice/src/game/deckview/deck_view_container.cpp @@ -260,16 +260,15 @@ void DeckViewContainer::loadLocalDeck() void DeckViewContainer::loadDeckFromFile(const QString &filePath) { DeckFileFormat::Format fmt = DeckFileFormat::getFormatFromName(filePath); - DeckLoader deck(this); - bool success = deck.loadFromFile(filePath, fmt, true); + std::optional deckOpt = DeckLoader::loadFromFile(filePath, fmt, true); - if (!success) { + if (!deckOpt) { QMessageBox::critical(this, tr("Error"), tr("The selected file could not be loaded.")); return; } - loadDeckFromDeckList(deck.getDeck().deckList); + loadDeckFromDeckList(deckOpt.value().deckList); } void DeckViewContainer::loadDeckFromDeckList(const DeckList &deck) diff --git a/cockatrice/src/interface/widgets/general/home_widget.cpp b/cockatrice/src/interface/widgets/general/home_widget.cpp index f35f90256..9bc49f99f 100644 --- a/cockatrice/src/interface/widgets/general/home_widget.cpp +++ b/cockatrice/src/interface/widgets/general/home_widget.cpp @@ -76,10 +76,9 @@ void HomeWidget::initializeBackgroundFromSource() void HomeWidget::loadBackgroundSourceDeck() { - DeckLoader deckLoader = DeckLoader(this); - deckLoader.loadFromFile(SettingsCache::instance().getDeckPath() + "background.cod", DeckFileFormat::Cockatrice, - false); - backgroundSourceDeck = deckLoader.getDeck().deckList; + std::optional deckOpt = DeckLoader::loadFromFile( + SettingsCache::instance().getDeckPath() + "background.cod", DeckFileFormat::Cockatrice, false); + backgroundSourceDeck = deckOpt.has_value() ? deckOpt.value().deckList : DeckList(); } void HomeWidget::updateRandomCard() 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 53540b6f9..25b0f8218 100644 --- a/cockatrice/src/interface/widgets/tabs/abstract_tab_deck_editor.cpp +++ b/cockatrice/src/interface/widgets/tabs/abstract_tab_deck_editor.cpp @@ -282,13 +282,13 @@ void AbstractTabDeckEditor::openDeckFromFile(const QString &fileName, DeckOpenLo { DeckFileFormat::Format fmt = DeckFileFormat::getFormatFromName(fileName); - auto l = DeckLoader(this); - if (l.loadFromFile(fileName, fmt, true)) { + std::optional deckOpt = DeckLoader::loadFromFile(fileName, fmt, true); + if (deckOpt) { if (deckOpenLocation == NEW_TAB) { - emit openDeckEditor(l.getDeck()); + emit openDeckEditor(deckOpt.value()); } else { deckMenu->setSaveStatus(false); - openDeck(l.getDeck()); + openDeck(deckOpt.value()); } } else { QMessageBox::critical(this, tr("Error"), tr("Could not open deck at %1").arg(fileName)); @@ -324,9 +324,7 @@ bool AbstractTabDeckEditor::actSaveDeck() if (loadedDeck.lastLoadInfo.fileName.isEmpty()) return actSaveDeckAs(); - auto deckLoader = DeckLoader(this); - deckLoader.setDeck(loadedDeck); - if (deckLoader.saveToFile(loadedDeck.lastLoadInfo.fileName, loadedDeck.lastLoadInfo.fileFormat)) { + if (DeckLoader::saveToFile(loadedDeck)) { deckStateManager->setModified(false); return true; } @@ -343,14 +341,14 @@ bool AbstractTabDeckEditor::actSaveDeck() */ bool AbstractTabDeckEditor::actSaveDeckAs() { - LoadedDeck loadedDeck = deckStateManager->toLoadedDeck(); + DeckList deckList = deckStateManager->getDeckList(); QFileDialog dialog(this, tr("Save deck")); dialog.setDirectory(SettingsCache::instance().getDeckPath()); dialog.setAcceptMode(QFileDialog::AcceptSave); dialog.setDefaultSuffix("cod"); dialog.setNameFilters(DeckLoader::FILE_NAME_FILTERS); - dialog.selectFile(loadedDeck.deckList.getName().trimmed()); + dialog.selectFile(deckList.getName().trimmed()); if (!dialog.exec()) return false; @@ -358,16 +356,15 @@ bool AbstractTabDeckEditor::actSaveDeckAs() QString fileName = dialog.selectedFiles().at(0); DeckFileFormat::Format fmt = DeckFileFormat::getFormatFromName(fileName); - DeckLoader deckLoader = DeckLoader(this); - deckLoader.setDeck(loadedDeck); - if (!deckLoader.saveToFile(fileName, fmt)) { + std::optional infoOpt = DeckLoader::saveToFile(deckList, fileName, fmt); + if (!infoOpt) { QMessageBox::critical( this, tr("Error"), tr("The deck could not be saved.\nPlease check that the directory is writable and try again.")); return false; } - deckStateManager->setLastLoadInfo({.fileName = fileName, .fileFormat = fmt}); + deckStateManager->setLastLoadInfo(infoOpt.value()); deckStateManager->setModified(false); SettingsCache::instance().recents().updateRecentlyOpenedDeckPaths(fileName); diff --git a/cockatrice/src/interface/widgets/tabs/tab_deck_storage.cpp b/cockatrice/src/interface/widgets/tabs/tab_deck_storage.cpp index 73b3fc0ac..26e3f2ecf 100644 --- a/cockatrice/src/interface/widgets/tabs/tab_deck_storage.cpp +++ b/cockatrice/src/interface/widgets/tabs/tab_deck_storage.cpp @@ -241,11 +241,11 @@ void TabDeckStorage::actOpenLocalDeck() continue; QString filePath = localDirModel->filePath(curLeft); - auto deckLoader = new DeckLoader(this); - if (!deckLoader->loadFromFile(filePath, DeckFileFormat::Cockatrice, true)) + std::optional deckOpt = DeckLoader::loadFromFile(filePath, DeckFileFormat::Cockatrice, true); + if (!deckOpt) continue; - emit openDeckEditor(deckLoader->getDeck()); + emit openDeckEditor(deckOpt.value()); } } @@ -307,13 +307,13 @@ void TabDeckStorage::uploadDeck(const QString &filePath, const QString &targetPa QFile deckFile(filePath); QFileInfo deckFileInfo(deckFile); - DeckLoader deckLoader(this); - if (!deckLoader.loadFromFile(filePath, DeckFileFormat::Cockatrice)) { + std::optional deckOpt = DeckLoader::loadFromFile(filePath, DeckFileFormat::Cockatrice, true); + if (!deckOpt) { QMessageBox::critical(this, tr("Error"), tr("Invalid deck file")); return; } - DeckList deck = deckLoader.getDeck().deckList; + DeckList deck = deckOpt.value().deckList; if (deck.getName().isEmpty()) { bool ok; @@ -434,11 +434,11 @@ void TabDeckStorage::openRemoteDeckFinished(const Response &r, const CommandCont const Response_DeckDownload &resp = r.GetExtension(Response_DeckDownload::ext); const Command_DeckDownload &cmd = commandContainer.session_command(0).GetExtension(Command_DeckDownload::ext); - DeckLoader loader(this); - if (!loader.loadFromRemote(QString::fromStdString(resp.deck()), cmd.deck_id())) + std::optional deckOpt = DeckLoader::loadFromRemote(QString::fromStdString(resp.deck()), cmd.deck_id()); + if (!deckOpt) return; - emit openDeckEditor(loader.getDeck()); + emit openDeckEditor(deckOpt.value()); } void TabDeckStorage::actDownload() @@ -496,10 +496,7 @@ void TabDeckStorage::downloadFinished(const Response &r, DeckList deckList = DeckList(QString::fromStdString(resp.deck())); - DeckLoader deckLoader(this); - deckLoader.setDeck({deckList, {}}); - - deckLoader.saveToFile(filePath, DeckFileFormat::Cockatrice); + DeckLoader::saveToFile(deckList, filePath, DeckFileFormat::Cockatrice); } void TabDeckStorage::actNewFolder() diff --git a/cockatrice/src/interface/widgets/tabs/visual_deck_storage/tab_deck_storage_visual.cpp b/cockatrice/src/interface/widgets/tabs/visual_deck_storage/tab_deck_storage_visual.cpp index 9570702ed..0cbcb641a 100644 --- a/cockatrice/src/interface/widgets/tabs/visual_deck_storage/tab_deck_storage_visual.cpp +++ b/cockatrice/src/interface/widgets/tabs/visual_deck_storage/tab_deck_storage_visual.cpp @@ -24,11 +24,12 @@ TabDeckStorageVisual::TabDeckStorageVisual(TabSupervisor *_tabSupervisor) void TabDeckStorageVisual::actOpenLocalDeck(const QString &filePath) { - auto deckLoader = DeckLoader(this); - if (!deckLoader.loadFromFile(filePath, DeckFileFormat::getFormatFromName(filePath), true)) { + std::optional deckOpt = + DeckLoader::loadFromFile(filePath, DeckFileFormat::getFormatFromName(filePath), true); + if (!deckOpt) { QMessageBox::critical(this, tr("Error"), tr("Could not open deck at %1").arg(filePath)); return; } - emit openDeckEditor(deckLoader.getDeck()); + emit openDeckEditor(deckOpt.value()); } 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 d57cda1c6..8cd1004de 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 @@ -77,10 +77,10 @@ static QStringList findAllKnownTags() QStringList allFiles = getAllFiles(SettingsCache::instance().getDeckPath()); QStringList knownTags; - auto loader = DeckLoader(nullptr); for (const QString &file : allFiles) { - loader.loadFromFile(file, DeckFileFormat::getFormatFromName(file), false); - QStringList tags = loader.getDeck().deckList.getTags(); + std::optional deckOpt = + DeckLoader::loadFromFile(file, DeckFileFormat::getFormatFromName(file), false); + QStringList tags = deckOpt.has_value() ? deckOpt->deckList.getTags() : QStringList(); knownTags.append(tags); knownTags.removeDuplicates(); } @@ -124,7 +124,7 @@ static bool confirmOverwriteIfExists(QWidget *parent, const QString &filePath) static void convertFileToCockatriceFormat(DeckPreviewWidget *deckPreviewWidget) { - deckPreviewWidget->deckLoader->convertToCockatriceFormat(deckPreviewWidget->filePath); + DeckLoader::convertToCockatriceFormat(deckPreviewWidget->deckLoader->getDeck()); deckPreviewWidget->filePath = deckPreviewWidget->deckLoader->getDeck().lastLoadInfo.fileName; deckPreviewWidget->refreshBannerCardText(); } 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 f98e37e16..5c55db456 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 @@ -288,7 +288,7 @@ void DeckPreviewWidget::setBannerCard(int /* changedIndex */) auto [name, id] = bannerCardComboBox->currentData().value>(); CardRef cardRef = {name, id}; deckLoader->getDeck().deckList.setBannerCard(cardRef); - deckLoader->saveToFile(filePath, DeckFileFormat::getFormatFromName(filePath)); + DeckLoader::saveToFile(deckLoader->getDeck()); bannerCardDisplayWidget->setCard(CardDatabaseManager::query()->getCard(cardRef)); } @@ -311,7 +311,7 @@ void DeckPreviewWidget::imageDoubleClickedEvent(QMouseEvent *event, DeckPreviewC void DeckPreviewWidget::setTags(const QStringList &tags) { deckLoader->getDeck().deckList.setTags(tags); - deckLoader->saveToFile(filePath, DeckFileFormat::Cockatrice); + DeckLoader::saveToFile(deckLoader->getDeck()); } QMenu *DeckPreviewWidget::createRightClickMenu() @@ -386,7 +386,7 @@ void DeckPreviewWidget::actRenameDeck() // write change deckLoader->getDeck().deckList.setName(newName); - deckLoader->saveToFile(filePath, DeckFileFormat::getFormatFromName(filePath)); + DeckLoader::saveToFile(deckLoader->getDeck()); // update VDS refreshBannerCardText();