summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/mainwindow.cpp14
-rw-r--r--src/transfersavesdialog.cpp26
2 files changed, 32 insertions, 8 deletions
diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp
index a20dfd06..03675a2b 100644
--- a/src/mainwindow.cpp
+++ b/src/mainwindow.cpp
@@ -1932,11 +1932,21 @@ void MainWindow::refreshSaveList()
QDir savesDir = currentSavesDir();
savesDir.setNameFilters(filters);
+ savesDir.setFilter(QDir::Files);
+ QDirIterator it(savesDir, QDirIterator::Subdirectories);
log::debug("reading save games from {}", savesDir.absolutePath());
- QFileInfoList files = savesDir.entryInfoList(QDir::Files, QDir::Time);
+ QFileInfoList files;
+ while (it.hasNext()) {
+ it.next();
+ files.append(it.fileInfo());
+ }
+ std::sort(files.begin(), files.end(), [](auto const& lhs, auto const& rhs) {
+ return lhs.fileTime(QFileDevice::FileModificationTime) < rhs.fileTime(QFileDevice::FileModificationTime);
+ });
+
for (const QFileInfo &file : files) {
- QListWidgetItem *item = new QListWidgetItem(file.fileName());
+ QListWidgetItem *item = new QListWidgetItem(savesDir.relativeFilePath(file.absoluteFilePath()));
item->setData(Qt::UserRole, file.absoluteFilePath());
ui->savegameList->addItem(item);
}
diff --git a/src/transfersavesdialog.cpp b/src/transfersavesdialog.cpp
index 6b8f7bd0..ea1861d5 100644
--- a/src/transfersavesdialog.cpp
+++ b/src/transfersavesdialog.cpp
@@ -276,8 +276,6 @@ void TransferSavesDialog::on_localCharacterList_currentTextChanged(const QString
void TransferSavesDialog::refreshSaves(SaveCollection &saveCollection, QString const &savedir)
{
saveCollection.clear();
- QDir savesDir(savedir);
- savesDir.setNameFilters(QStringList() << QString("*.%1").arg(m_GamePlugin->savegameExtension()));
SaveGameInfo const *info = m_GamePlugin->feature<SaveGameInfo>();
if (info == nullptr) {
@@ -285,10 +283,26 @@ void TransferSavesDialog::refreshSaves(SaveCollection &saveCollection, QString c
info = &dummyInfo;
}
- QStringList files = savesDir.entryList(QDir::Files, QDir::Time);
- for (const QString &filename : files) {
- QString file = savesDir.absoluteFilePath(filename);
- MOBase::ISaveGame const *save = info->getSaveGameInfo(file);
+ QStringList filters;
+ filters << QString("*.") + m_GamePlugin->savegameExtension();
+
+ QDir savesDir(savedir);
+ savesDir.setNameFilters(QStringList() << QString("*.") + m_GamePlugin->savegameExtension());
+ savesDir.setFilter(QDir::Files);
+ QDirIterator it(savesDir, QDirIterator::Subdirectories);
+ log::debug("reading save games from {}", savesDir.absolutePath());
+
+ QFileInfoList files;
+ while (it.hasNext()) {
+ it.next();
+ files.append(it.fileInfo());
+ }
+ std::sort(files.begin(), files.end(), [](auto const& lhs, auto const& rhs) {
+ return lhs.fileTime(QFileDevice::FileModificationTime) < rhs.fileTime(QFileDevice::FileModificationTime);
+ });
+
+ for (const QFileInfo &file: files) {
+ MOBase::ISaveGame const *save = info->getSaveGameInfo(file.absoluteFilePath());
saveCollection[save->getSaveGroupIdentifier()].push_back(
std::unique_ptr<MOBase::ISaveGame const>(save));
}