From 0c536a4c12e37caec2c3107875a97d5343c2a0a0 Mon Sep 17 00:00:00 2001 From: Thomas Tanner Date: Tue, 15 Dec 2015 15:58:01 +0000 Subject: Makes iSaveGame responsible for returning all files involved in savegame. Cleans up save deletion and save transfer dialogue somewhat --- src/mainwindow.cpp | 86 +++++++++++++++++++++------------------------ src/transfersavesdialog.cpp | 19 +++++----- 2 files changed, 48 insertions(+), 57 deletions(-) (limited to 'src') diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index 8c292f08..03233398 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -28,9 +28,11 @@ along with Mod Organizer. If not, see . #include "imodinterface.h" #include "iplugingame.h" #include "iplugindiagnose.h" +#include "isavegame.h" #include "nexusinterface.h" #include "organizercore.h" #include "previewgenerator.h" +#include "savegameinfo.h" #include "spawn.h" #include "versioninfo.h" @@ -70,7 +72,6 @@ along with Mod Organizer. If not, see . #include "safewritefile.h" #include "savegameinfowidget.h" #include "savegameinfowidgetgamebryo.h" -#include "scriptextender.h" #include "nxmaccessmanager.h" #include "appconfig.h" #include @@ -83,61 +84,63 @@ along with Mod Organizer. If not, see . #include #include #include +#include #include +#include #include +#include #include +#include +#include #include +#include #include #include #include +#include #include #include #include #include #include +#include #include +#include +#include +#include +#include #include #include +#include +#include +#include #include #include #include #include #include +#include +#include #include +#include #include #include +#include #include #include #include #include +#include +#include +#include +#include #include #include -#include -#include - -#include -#include #include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include -#include -#include -#include -#include -#include -#include -#include -#include -#include + +#include +#include #if QT_VERSION >= QT_VERSION_CHECK(5,0,0) @@ -146,9 +149,6 @@ along with Mod Organizer. If not, see . #include #endif -#include -#include - #ifndef Q_MOC_RUN #include #include @@ -3220,34 +3220,26 @@ void MainWindow::on_categoriesList_itemSelectionChanged() void MainWindow::deleteSavegame_clicked() { - QModelIndexList selectedIndexes = ui->savegameList->selectionModel()->selectedIndexes(); - - //This feels wrong and should be part of savegame interface - QStringList extensions; - { - ScriptExtender *extender = m_OrganizerCore.managedGame()->feature(); - if (extender != nullptr) { - extensions += extender->saveGameAttachmentExtensions(); - } - } + SaveGameInfo const *info = m_OrganizerCore.managedGame()->feature(); QString savesMsgLabel; QStringList deleteFiles; int count = 0; - for (const QModelIndex &idx : selectedIndexes) { - //QString name = idx.data().toString(); - QFileInfo fileName(idx.data(Qt::UserRole).toString()); + for (const QModelIndex &idx : ui->savegameList->selectionModel()->selectedIndexes()) { + QString name = idx.data(Qt::UserRole).toString(); if (count < 10) { - savesMsgLabel += "
  • " + fileName.completeBaseName() + "
  • "; + savesMsgLabel += "
  • " + QFileInfo(name).completeBaseName() + "
  • "; } ++count; - deleteFiles << fileName.absoluteFilePath(); - for (QString const &ext : extensions) { - deleteFiles << fileName.absoluteDir().absoluteFilePath(fileName.completeBaseName() + "." + ext); + if (info == nullptr) { + deleteFiles.push_back(name); + } else { + ISaveGame const *save = info->getSaveGameInfo(name); + deleteFiles += save->allFiles(); } } @@ -3256,7 +3248,9 @@ void MainWindow::deleteSavegame_clicked() } if (QMessageBox::question(this, tr("Confirm"), - tr("Are you sure you want to remove the following %n save(s)?
      %1

    Removed saves will be sent to the Recycle Bin.", "", selectedIndexes.count()) + tr("Are you sure you want to remove the following %n save(s)?
    " + "
      %1

    " + "Removed saves will be sent to the Recycle Bin.", "", count) .arg(savesMsgLabel), QMessageBox::Yes | QMessageBox::No) == QMessageBox::Yes) { shellDelete(deleteFiles, true); // recycle bin delete. diff --git a/src/transfersavesdialog.cpp b/src/transfersavesdialog.cpp index 710a33b9..b07a9510 100644 --- a/src/transfersavesdialog.cpp +++ b/src/transfersavesdialog.cpp @@ -71,6 +71,11 @@ public: return m_File; } + virtual QStringList allFiles() const override + { + return { m_File }; + } + private: QString m_File; }; @@ -298,19 +303,11 @@ bool TransferSavesDialog::transferCharacters(QString const &character, OverwriteMode overwriteMode = OVERWRITE_ASK; - QStringList extensions = { m_GamePlugin->savegameExtension() }; - { - ScriptExtender *ext = m_GamePlugin->feature(); - if (ext != nullptr) { - extensions += ext->saveGameAttachmentExtensions(); - } - } QDir destination(dest); for (SaveListItem const &save : saves) { - QFileInfo const saveFile = save->getFilename(); - for (QString const &ext : extensions) { - QFileInfo sourceFile(saveFile.absoluteDir().absoluteFilePath(saveFile.completeBaseName() + "." + ext)); - QString destinationFile = destination.absoluteFilePath(sourceFile.fileName()); + for (QString source : save->allFiles()) { + QFileInfo sourceFile(source); + QString destinationFile(destination.absoluteFilePath(sourceFile.fileName())); //If the file is already there, let them skip (or not). if (QFile::exists(destinationFile)) { -- cgit v1.3.1