diff options
| author | Tannin <Tannin@Miranda> | 2013-02-17 09:26:29 +0100 |
|---|---|---|
| committer | Tannin <Tannin@Miranda> | 2013-02-17 09:26:29 +0100 |
| commit | 6516a6b7c19713de28db7142612f1c095e541317 (patch) | |
| tree | 06829bf7f82e1251a9e3db27185b7df90833bbc8 /src/transfersavesdialog.cpp | |
| parent | 5d1154c24e2475ed2b7ac248de27ab7b501a1e5e (diff) | |
- moved shared and uibase libraries to namespaces
- bugfix: the "fix mods" function was accessing the save game data incorrectly, causing a crash
Diffstat (limited to 'src/transfersavesdialog.cpp')
| -rw-r--r-- | src/transfersavesdialog.cpp | 628 |
1 files changed, 316 insertions, 312 deletions
diff --git a/src/transfersavesdialog.cpp b/src/transfersavesdialog.cpp index c6ddfd78..e69e4ab2 100644 --- a/src/transfersavesdialog.cpp +++ b/src/transfersavesdialog.cpp @@ -17,315 +17,319 @@ You should have received a copy of the GNU General Public License along with Mod Organizer. If not, see <http://www.gnu.org/licenses/>. */ -#include "transfersavesdialog.h"
-#include "ui_transfersavesdialog.h"
-#include "utility.h"
-#include <gameinfo.h>
-#include <QDir>
-#include <QMessageBox>
-#include <Shlwapi.h>
-#include <shlobj.h>
-
-
-TransferSavesDialog::TransferSavesDialog(const Profile &profile, QWidget *parent)
- : TutorableDialog("TransferSaves", parent), ui(new Ui::TransferSavesDialog), m_Profile(profile)
-{
- ui->setupUi(this);
- refreshGlobalSaves();
- refreshLocalSaves();
- refreshGlobalCharacters();
- refreshLocalCharacters();
-}
-
-TransferSavesDialog::~TransferSavesDialog()
-{
- delete ui;
-}
-
-
-void TransferSavesDialog::refreshGlobalSaves()
-{
- m_GlobalSaves.clear();
-
- QDir savesDir(QDir::fromNativeSeparators(ToQString(GameInfo::instance().getSaveGameDir())));
-
- QStringList filters;
- filters << ToQString(GameInfo::instance().getSaveGameExtension());
- savesDir.setNameFilters(filters);
-
- QStringList files = savesDir.entryList(QDir::Files, QDir::Time);
-
- foreach (const QString &filename, files) {
- SaveGameGamebryo *save = new SaveGameGamebryo(this, savesDir.absoluteFilePath(filename));
- save->setParent(this);
- m_GlobalSaves.push_back(save);
- }
-}
-
-
-void TransferSavesDialog::refreshLocalSaves()
-{
- m_LocalSaves.clear();
-
- QDir savesDir(m_Profile.getPath().append("/saves"));
-
- QStringList filters;
- filters << ToQString(GameInfo::instance().getSaveGameExtension());
- savesDir.setNameFilters(filters);
-
- QStringList files = savesDir.entryList(QDir::Files, QDir::Time);
-
- foreach (const QString &filename, files) {
- SaveGameGamebryo *save = new SaveGameGamebryo(this, savesDir.absoluteFilePath(filename));
- save->setParent(this);
- m_LocalSaves.push_back(save);
- }
-}
-
-
-void TransferSavesDialog::refreshGlobalCharacters()
-{
- std::set<QString> characters;
- for (std::vector<SaveGame*>::const_iterator iter = m_GlobalSaves.begin();
- iter != m_GlobalSaves.end(); ++iter) {
- characters.insert((*iter)->pcName());
- }
- ui->globalCharacterList->clear();
- for (std::set<QString>::const_iterator iter = characters.begin();
- iter != characters.end(); ++iter) {
- ui->globalCharacterList->addItem(*iter);
- }
- if (ui->globalCharacterList->count() > 0) {
- ui->globalCharacterList->setCurrentRow(0);
- ui->copyToLocalBtn->setEnabled(true);
- ui->moveToLocalBtn->setEnabled(true);
- } else {
- ui->copyToLocalBtn->setEnabled(false);
- ui->moveToLocalBtn->setEnabled(false);
- }
-}
-
-
-void TransferSavesDialog::refreshLocalCharacters()
-{
- std::set<QString> characters;
- for (std::vector<SaveGame*>::const_iterator iter = m_LocalSaves.begin();
- iter != m_LocalSaves.end(); ++iter) {
- characters.insert((*iter)->pcName());
- }
- ui->localCharacterList->clear();
- for (std::set<QString>::const_iterator iter = characters.begin();
- iter != characters.end(); ++iter) {
- ui->localCharacterList->addItem(*iter);
- }
- if (ui->localCharacterList->count() > 0) {
- ui->localCharacterList->setCurrentRow(0);
- ui->copyToGlobalBtn->setEnabled(true);
- ui->moveToGlobalBtn->setEnabled(true);
- } else {
- ui->copyToGlobalBtn->setEnabled(false);
- ui->moveToGlobalBtn->setEnabled(false);
- }
-}
-
-
-bool TransferSavesDialog::testOverwrite(OverwriteMode &overwriteMode, const QString &destinationFile)
-{
- QMessageBox::StandardButton res = overwriteMode == OVERWRITE_YES ? QMessageBox::Yes : QMessageBox::No;
- if (overwriteMode == OVERWRITE_ASK) {
- res = QMessageBox::question(this, tr("Overwrite"),
- tr("Overwrite the file \"%1\"").arg(destinationFile),
- QMessageBox::Yes | QMessageBox::No | QMessageBox::YesToAll | QMessageBox::NoToAll);
- if (res == QMessageBox::YesToAll) {
- overwriteMode = OVERWRITE_YES;
- res = QMessageBox::Yes;
- } else if (res == QMessageBox::NoToAll) {
- overwriteMode = OVERWRITE_NO;
- res = QMessageBox::No;
- }
- }
- return res == QMessageBox::Yes;
-}
-
-QStringList TransferSavesDialog::getFilesToProcess(const SaveGame *save)
-{
- QStringList result = save->attachedFiles();
- result.append(save->fileName());
- return result;
-}
-
-void TransferSavesDialog::on_moveToLocalBtn_clicked()
-{
- QString selectedCharacter = ui->globalCharacterList->currentItem()->text();
- if (QMessageBox::question(this, tr("Confirm"),
- tr("Copy all save games of character \"%1\" to the profile?").arg(selectedCharacter),
- QMessageBox::Yes | QMessageBox::No) == QMessageBox::Yes) {
- QString destination = m_Profile.getPath().append("/saves");
- OverwriteMode overwriteMode = OVERWRITE_ASK;
-
- for (std::vector<SaveGame*>::const_iterator iter = m_GlobalSaves.begin();
- iter != m_GlobalSaves.end(); ++iter) {
- if ((*iter)->pcName() == selectedCharacter) {
- QStringList files = getFilesToProcess(*iter);
- foreach (const QString &file, files) {
- QFileInfo fileInfo(file);
- QString destinationFile = destination.mid(0).append("/").append(fileInfo.fileName());
- if (QFile::exists(destinationFile)) {
- if (testOverwrite(overwriteMode, destinationFile)) {
- QFile::remove(destinationFile);
- } else {
- continue;
- }
- }
- if (!QFile::rename(fileInfo.absoluteFilePath(), destinationFile)) {
- qCritical("failed to move %s to %s",
- fileInfo.absoluteFilePath().toUtf8().constData(),
- destinationFile.toUtf8().constData());
- }
- }
- }
- }
- }
- refreshGlobalSaves();
- refreshGlobalCharacters();
- refreshLocalSaves();
- refreshLocalCharacters();
-}
-
-void TransferSavesDialog::on_copyToLocalBtn_clicked()
-{
- QString selectedCharacter = ui->globalCharacterList->currentItem()->text();
- if (QMessageBox::question(this, tr("Confirm"),
- tr("Copy all save games of character \"%1\" to the profile?").arg(selectedCharacter),
- QMessageBox::Yes | QMessageBox::No) == QMessageBox::Yes) {
- QString destination = m_Profile.getPath().append("/saves");
- OverwriteMode overwriteMode = OVERWRITE_ASK;
- for (std::vector<SaveGame*>::const_iterator iter = m_GlobalSaves.begin();
- iter != m_GlobalSaves.end(); ++iter) {
- if ((*iter)->pcName() == selectedCharacter) {
- QStringList files = getFilesToProcess(*iter);
- foreach (const QString &file, files) {
- QFileInfo fileInfo(file);
- QString destinationFile = destination.mid(0).append("/").append(fileInfo.fileName());
- if (QFile::exists(destinationFile)) {
- if (testOverwrite(overwriteMode, destinationFile)) {
- QFile::remove(destinationFile);
- } else {
- continue;
- }
- }
- if (!QFile::copy(fileInfo.absoluteFilePath(), destinationFile)) {
- qCritical("failed to copy %s to %s",
- fileInfo.absoluteFilePath().toUtf8().constData(),
- destinationFile.toUtf8().constData());
- }
- }
- }
- }
- }
- refreshLocalSaves();
- refreshLocalCharacters();
-}
-
-void TransferSavesDialog::on_moveToGlobalBtn_clicked()
-{
- QString selectedCharacter = ui->localCharacterList->currentItem()->text();
- if (QMessageBox::question(this, tr("Confirm"),
- tr("Move all save games of character \"%1\" to the global location? Please be aware "
- "that this will mess up the running number of save games.").arg(selectedCharacter),
- QMessageBox::Yes | QMessageBox::No) == QMessageBox::Yes) {
-
- QString destination = QDir::fromNativeSeparators(ToQString(GameInfo::instance().getSaveGameDir()));
- OverwriteMode overwriteMode = OVERWRITE_ASK;
- for (std::vector<SaveGame*>::const_iterator iter = m_LocalSaves.begin();
- iter != m_LocalSaves.end(); ++iter) {
- if ((*iter)->pcName() == selectedCharacter) {
- QStringList files = getFilesToProcess(*iter);
- foreach (const QString &file, files) {
- QFileInfo fileInfo(file);
- QString destinationFile = destination.mid(0).append("/").append(fileInfo.fileName());
- if (QFile::exists(destinationFile)) {
- if (testOverwrite(overwriteMode, destinationFile)) {
- QFile::remove(destinationFile);
- } else {
- continue;
- }
- }
- if (!QFile::rename(fileInfo.absoluteFilePath(), destinationFile)) {
- qCritical("failed to move %s to %s",
- fileInfo.absoluteFilePath().toUtf8().constData(),
- destinationFile.toUtf8().constData());
- }
- }
- }
- }
- }
- refreshGlobalSaves();
- refreshGlobalCharacters();
- refreshLocalSaves();
- refreshLocalCharacters();
-}
-
-void TransferSavesDialog::on_copyToGlobalBtn_clicked()
-{
- QString selectedCharacter = ui->localCharacterList->currentItem()->text();
- if (QMessageBox::question(this, tr("Confirm"),
- tr("Copy all save games of character \"%1\" to the global location? Please be aware "
- "that this will mess up the running number of save games.").arg(selectedCharacter),
- QMessageBox::Yes | QMessageBox::No) == QMessageBox::Yes) {
-
- QString destination = QDir::fromNativeSeparators(ToQString(GameInfo::instance().getSaveGameDir()));
- OverwriteMode overwriteMode = OVERWRITE_ASK;
- for (std::vector<SaveGame*>::const_iterator iter = m_LocalSaves.begin();
- iter != m_LocalSaves.end(); ++iter) {
- if ((*iter)->pcName() == selectedCharacter) {
- QStringList files = getFilesToProcess(*iter);
- foreach (const QString &file, files) {
- QFileInfo fileInfo(file);
- QString destinationFile = destination.mid(0).append("/").append(fileInfo.fileName());
- if (QFile::exists(destinationFile)) {
- if (testOverwrite(overwriteMode, destinationFile)) {
- QFile::remove(destinationFile);
- } else {
- continue;
- }
- }
- if (!QFile::copy(fileInfo.absoluteFilePath(), destinationFile)) {
- qCritical("failed to copy %s to %s",
- fileInfo.absoluteFilePath().toUtf8().constData(),
- destinationFile.toUtf8().constData());
- }
- }
- }
- }
- }
- refreshGlobalSaves();
- refreshGlobalCharacters();
-}
-
-void TransferSavesDialog::on_doneButton_clicked()
-{
- close();
-}
-
-void TransferSavesDialog::on_globalCharacterList_currentTextChanged(const QString ¤tText)
-{
- ui->globalSavesList->clear();
- for (std::vector<SaveGame*>::const_iterator iter = m_GlobalSaves.begin();
- iter != m_GlobalSaves.end(); ++iter) {
- if ((*iter)->pcName() == currentText) {
- ui->globalSavesList->addItem(QFileInfo((*iter)->fileName()).fileName());
- }
- }
-}
-
-void TransferSavesDialog::on_localCharacterList_currentTextChanged(const QString ¤tText)
-{
- ui->localSavesList->clear();
- for (std::vector<SaveGame*>::const_iterator iter = m_LocalSaves.begin();
- iter != m_LocalSaves.end(); ++iter) {
- if ((*iter)->pcName() == currentText) {
- ui->localSavesList->addItem(QFileInfo((*iter)->fileName()).fileName());
- }
- }
-}
+#include "transfersavesdialog.h" +#include "ui_transfersavesdialog.h" +#include "utility.h" +#include <gameinfo.h> +#include <QDir> +#include <QMessageBox> +#include <Shlwapi.h> +#include <shlobj.h> + + +using namespace MOBase; +using namespace MOShared; + + +TransferSavesDialog::TransferSavesDialog(const Profile &profile, QWidget *parent) + : TutorableDialog("TransferSaves", parent), ui(new Ui::TransferSavesDialog), m_Profile(profile) +{ + ui->setupUi(this); + refreshGlobalSaves(); + refreshLocalSaves(); + refreshGlobalCharacters(); + refreshLocalCharacters(); +} + +TransferSavesDialog::~TransferSavesDialog() +{ + delete ui; +} + + +void TransferSavesDialog::refreshGlobalSaves() +{ + m_GlobalSaves.clear(); + + QDir savesDir(QDir::fromNativeSeparators(ToQString(GameInfo::instance().getSaveGameDir()))); + + QStringList filters; + filters << ToQString(GameInfo::instance().getSaveGameExtension()); + savesDir.setNameFilters(filters); + + QStringList files = savesDir.entryList(QDir::Files, QDir::Time); + + foreach (const QString &filename, files) { + SaveGameGamebryo *save = new SaveGameGamebryo(this, savesDir.absoluteFilePath(filename)); + save->setParent(this); + m_GlobalSaves.push_back(save); + } +} + + +void TransferSavesDialog::refreshLocalSaves() +{ + m_LocalSaves.clear(); + + QDir savesDir(m_Profile.getPath().append("/saves")); + + QStringList filters; + filters << ToQString(GameInfo::instance().getSaveGameExtension()); + savesDir.setNameFilters(filters); + + QStringList files = savesDir.entryList(QDir::Files, QDir::Time); + + foreach (const QString &filename, files) { + SaveGameGamebryo *save = new SaveGameGamebryo(this, savesDir.absoluteFilePath(filename)); + save->setParent(this); + m_LocalSaves.push_back(save); + } +} + + +void TransferSavesDialog::refreshGlobalCharacters() +{ + std::set<QString> characters; + for (std::vector<SaveGame*>::const_iterator iter = m_GlobalSaves.begin(); + iter != m_GlobalSaves.end(); ++iter) { + characters.insert((*iter)->pcName()); + } + ui->globalCharacterList->clear(); + for (std::set<QString>::const_iterator iter = characters.begin(); + iter != characters.end(); ++iter) { + ui->globalCharacterList->addItem(*iter); + } + if (ui->globalCharacterList->count() > 0) { + ui->globalCharacterList->setCurrentRow(0); + ui->copyToLocalBtn->setEnabled(true); + ui->moveToLocalBtn->setEnabled(true); + } else { + ui->copyToLocalBtn->setEnabled(false); + ui->moveToLocalBtn->setEnabled(false); + } +} + + +void TransferSavesDialog::refreshLocalCharacters() +{ + std::set<QString> characters; + for (std::vector<SaveGame*>::const_iterator iter = m_LocalSaves.begin(); + iter != m_LocalSaves.end(); ++iter) { + characters.insert((*iter)->pcName()); + } + ui->localCharacterList->clear(); + for (std::set<QString>::const_iterator iter = characters.begin(); + iter != characters.end(); ++iter) { + ui->localCharacterList->addItem(*iter); + } + if (ui->localCharacterList->count() > 0) { + ui->localCharacterList->setCurrentRow(0); + ui->copyToGlobalBtn->setEnabled(true); + ui->moveToGlobalBtn->setEnabled(true); + } else { + ui->copyToGlobalBtn->setEnabled(false); + ui->moveToGlobalBtn->setEnabled(false); + } +} + + +bool TransferSavesDialog::testOverwrite(OverwriteMode &overwriteMode, const QString &destinationFile) +{ + QMessageBox::StandardButton res = overwriteMode == OVERWRITE_YES ? QMessageBox::Yes : QMessageBox::No; + if (overwriteMode == OVERWRITE_ASK) { + res = QMessageBox::question(this, tr("Overwrite"), + tr("Overwrite the file \"%1\"").arg(destinationFile), + QMessageBox::Yes | QMessageBox::No | QMessageBox::YesToAll | QMessageBox::NoToAll); + if (res == QMessageBox::YesToAll) { + overwriteMode = OVERWRITE_YES; + res = QMessageBox::Yes; + } else if (res == QMessageBox::NoToAll) { + overwriteMode = OVERWRITE_NO; + res = QMessageBox::No; + } + } + return res == QMessageBox::Yes; +} + +QStringList TransferSavesDialog::getFilesToProcess(const SaveGame *save) +{ + QStringList result = save->attachedFiles(); + result.append(save->fileName()); + return result; +} + +void TransferSavesDialog::on_moveToLocalBtn_clicked() +{ + QString selectedCharacter = ui->globalCharacterList->currentItem()->text(); + if (QMessageBox::question(this, tr("Confirm"), + tr("Copy all save games of character \"%1\" to the profile?").arg(selectedCharacter), + QMessageBox::Yes | QMessageBox::No) == QMessageBox::Yes) { + QString destination = m_Profile.getPath().append("/saves"); + OverwriteMode overwriteMode = OVERWRITE_ASK; + + for (std::vector<SaveGame*>::const_iterator iter = m_GlobalSaves.begin(); + iter != m_GlobalSaves.end(); ++iter) { + if ((*iter)->pcName() == selectedCharacter) { + QStringList files = getFilesToProcess(*iter); + foreach (const QString &file, files) { + QFileInfo fileInfo(file); + QString destinationFile = destination.mid(0).append("/").append(fileInfo.fileName()); + if (QFile::exists(destinationFile)) { + if (testOverwrite(overwriteMode, destinationFile)) { + QFile::remove(destinationFile); + } else { + continue; + } + } + if (!QFile::rename(fileInfo.absoluteFilePath(), destinationFile)) { + qCritical("failed to move %s to %s", + fileInfo.absoluteFilePath().toUtf8().constData(), + destinationFile.toUtf8().constData()); + } + } + } + } + } + refreshGlobalSaves(); + refreshGlobalCharacters(); + refreshLocalSaves(); + refreshLocalCharacters(); +} + +void TransferSavesDialog::on_copyToLocalBtn_clicked() +{ + QString selectedCharacter = ui->globalCharacterList->currentItem()->text(); + if (QMessageBox::question(this, tr("Confirm"), + tr("Copy all save games of character \"%1\" to the profile?").arg(selectedCharacter), + QMessageBox::Yes | QMessageBox::No) == QMessageBox::Yes) { + QString destination = m_Profile.getPath().append("/saves"); + OverwriteMode overwriteMode = OVERWRITE_ASK; + for (std::vector<SaveGame*>::const_iterator iter = m_GlobalSaves.begin(); + iter != m_GlobalSaves.end(); ++iter) { + if ((*iter)->pcName() == selectedCharacter) { + QStringList files = getFilesToProcess(*iter); + foreach (const QString &file, files) { + QFileInfo fileInfo(file); + QString destinationFile = destination.mid(0).append("/").append(fileInfo.fileName()); + if (QFile::exists(destinationFile)) { + if (testOverwrite(overwriteMode, destinationFile)) { + QFile::remove(destinationFile); + } else { + continue; + } + } + if (!QFile::copy(fileInfo.absoluteFilePath(), destinationFile)) { + qCritical("failed to copy %s to %s", + fileInfo.absoluteFilePath().toUtf8().constData(), + destinationFile.toUtf8().constData()); + } + } + } + } + } + refreshLocalSaves(); + refreshLocalCharacters(); +} + +void TransferSavesDialog::on_moveToGlobalBtn_clicked() +{ + QString selectedCharacter = ui->localCharacterList->currentItem()->text(); + if (QMessageBox::question(this, tr("Confirm"), + tr("Move all save games of character \"%1\" to the global location? Please be aware " + "that this will mess up the running number of save games.").arg(selectedCharacter), + QMessageBox::Yes | QMessageBox::No) == QMessageBox::Yes) { + + QString destination = QDir::fromNativeSeparators(ToQString(GameInfo::instance().getSaveGameDir())); + OverwriteMode overwriteMode = OVERWRITE_ASK; + for (std::vector<SaveGame*>::const_iterator iter = m_LocalSaves.begin(); + iter != m_LocalSaves.end(); ++iter) { + if ((*iter)->pcName() == selectedCharacter) { + QStringList files = getFilesToProcess(*iter); + foreach (const QString &file, files) { + QFileInfo fileInfo(file); + QString destinationFile = destination.mid(0).append("/").append(fileInfo.fileName()); + if (QFile::exists(destinationFile)) { + if (testOverwrite(overwriteMode, destinationFile)) { + QFile::remove(destinationFile); + } else { + continue; + } + } + if (!QFile::rename(fileInfo.absoluteFilePath(), destinationFile)) { + qCritical("failed to move %s to %s", + fileInfo.absoluteFilePath().toUtf8().constData(), + destinationFile.toUtf8().constData()); + } + } + } + } + } + refreshGlobalSaves(); + refreshGlobalCharacters(); + refreshLocalSaves(); + refreshLocalCharacters(); +} + +void TransferSavesDialog::on_copyToGlobalBtn_clicked() +{ + QString selectedCharacter = ui->localCharacterList->currentItem()->text(); + if (QMessageBox::question(this, tr("Confirm"), + tr("Copy all save games of character \"%1\" to the global location? Please be aware " + "that this will mess up the running number of save games.").arg(selectedCharacter), + QMessageBox::Yes | QMessageBox::No) == QMessageBox::Yes) { + + QString destination = QDir::fromNativeSeparators(ToQString(GameInfo::instance().getSaveGameDir())); + OverwriteMode overwriteMode = OVERWRITE_ASK; + for (std::vector<SaveGame*>::const_iterator iter = m_LocalSaves.begin(); + iter != m_LocalSaves.end(); ++iter) { + if ((*iter)->pcName() == selectedCharacter) { + QStringList files = getFilesToProcess(*iter); + foreach (const QString &file, files) { + QFileInfo fileInfo(file); + QString destinationFile = destination.mid(0).append("/").append(fileInfo.fileName()); + if (QFile::exists(destinationFile)) { + if (testOverwrite(overwriteMode, destinationFile)) { + QFile::remove(destinationFile); + } else { + continue; + } + } + if (!QFile::copy(fileInfo.absoluteFilePath(), destinationFile)) { + qCritical("failed to copy %s to %s", + fileInfo.absoluteFilePath().toUtf8().constData(), + destinationFile.toUtf8().constData()); + } + } + } + } + } + refreshGlobalSaves(); + refreshGlobalCharacters(); +} + +void TransferSavesDialog::on_doneButton_clicked() +{ + close(); +} + +void TransferSavesDialog::on_globalCharacterList_currentTextChanged(const QString ¤tText) +{ + ui->globalSavesList->clear(); + for (std::vector<SaveGame*>::const_iterator iter = m_GlobalSaves.begin(); + iter != m_GlobalSaves.end(); ++iter) { + if ((*iter)->pcName() == currentText) { + ui->globalSavesList->addItem(QFileInfo((*iter)->fileName()).fileName()); + } + } +} + +void TransferSavesDialog::on_localCharacterList_currentTextChanged(const QString ¤tText) +{ + ui->localSavesList->clear(); + for (std::vector<SaveGame*>::const_iterator iter = m_LocalSaves.begin(); + iter != m_LocalSaves.end(); ++iter) { + if ((*iter)->pcName() == currentText) { + ui->localSavesList->addItem(QFileInfo((*iter)->fileName()).fileName()); + } + } +} |
