From fd584f803893c84049146f0d6d6d2d5f758f55e6 Mon Sep 17 00:00:00 2001 From: Tannin Date: Sun, 12 Apr 2015 15:52:22 +0200 Subject: - operations not possible during directory refresh can now be delayed unit after the refresh. - will now rewrite the plugin list(s) immediately after running external application - changes missing from changeset 9f522a324341 --- src/mainwindow.cpp | 4 ++++ src/mainwindow.h | 5 +++++ src/organizercore.cpp | 13 +++++++++++-- src/organizercore.h | 1 + 4 files changed, 21 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index 286c9013..d36ec158 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -4436,6 +4436,10 @@ void MainWindow::on_bossButton_clicked() QFile::remove(m_OrganizerCore.currentProfile()->getLoadOrderFileName()); } m_OrganizerCore.refreshESPList(); + if (GameInfo::instance().getLoadOrderMechanism() == GameInfo::TYPE_FILETIME) { + // the load order should have been retrieved from file time, now save it to our own format + m_OrganizerCore.savePluginList(); + } } } diff --git a/src/mainwindow.h b/src/mainwindow.h index 88419594..51d67e1e 100644 --- a/src/mainwindow.h +++ b/src/mainwindow.h @@ -247,6 +247,11 @@ private: void scheduleUpdateButton(); + QDir currentSavesDir() const; + + void startMonitorSaves(); + void stopMonitorSaves(); + private: static const char *PATTERN_BACKUP_GLOB; diff --git a/src/organizercore.cpp b/src/organizercore.cpp index 50e72548..5375cd3a 100644 --- a/src/organizercore.cpp +++ b/src/organizercore.cpp @@ -892,8 +892,13 @@ void OrganizerCore::spawnBinary(const QFileInfo &binary, const QString &argument // need to remove our stored load order because it may be outdated if a foreign tool changed the // file time. After removing that file, refreshESPList will use the file time as the order if (GameInfo::instance().getLoadOrderMechanism() == GameInfo::TYPE_FILETIME) { + qDebug("removing loadorder.txt"); QFile::remove(m_CurrentProfile->getLoadOrderFileName()); - refreshESPList(); + } + refreshESPList(); + if (GameInfo::instance().getLoadOrderMechanism() == GameInfo::TYPE_FILETIME) { + // the load order should have been retrieved from file time, now save it to our own format + savePluginList(); } m_FinishedRun(binary.absoluteFilePath(), processExitCode); @@ -1311,6 +1316,9 @@ void OrganizerCore::directory_refreshed() ModInfo::Ptr modInfo = ModInfo::getByIndex(i); modInfo->clearCaches(); } + for (auto task : m_PostRefreshTasks) { + task(); + } } void OrganizerCore::profileRefresh() @@ -1480,7 +1488,8 @@ bool OrganizerCore::saveCurrentLists() void OrganizerCore::savePluginList() { if (m_DirectoryUpdate) { - qWarning("Can't save plugin lists now, might outdated"); + // delay save till after directory update + m_PostRefreshTasks.append([&] () { this->savePluginList(); }); return; } m_PluginList.saveTo(m_CurrentProfile->getPluginsFileName(), diff --git a/src/organizercore.h b/src/organizercore.h index bb35cbb5..e9914ea7 100644 --- a/src/organizercore.h +++ b/src/organizercore.h @@ -244,6 +244,7 @@ private: PluginList m_PluginList; QList> m_PostLoginTasks; + QList> m_PostRefreshTasks; ExecutablesList m_ExecutablesList; QStringList m_PendingDownloads; -- cgit v1.3.1