diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/mainwindow.cpp | 14 | ||||
| -rw-r--r-- | src/transfersavesdialog.cpp | 26 |
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));
}
|
