diff options
| author | Silarn <jrim@rimpo.org> | 2018-04-09 12:18:22 -0500 |
|---|---|---|
| committer | Silarn <jrim@rimpo.org> | 2018-04-09 12:18:22 -0500 |
| commit | 9465966b2c782a3b86ed933e868b306194289bbd (patch) | |
| tree | a4cc2e209286803b613cc0b65dc3f857bab5f05c /src | |
| parent | 47dc5cded72ff79a3964ef39b7ad23e6b27fcdff (diff) | |
Created threaded process for writing mod meta files to prevent hangs
Diffstat (limited to 'src')
| -rw-r--r-- | src/mainwindow.cpp | 14 | ||||
| -rw-r--r-- | src/mainwindow.h | 3 | ||||
| -rw-r--r-- | src/nexusinterface.cpp | 2 |
3 files changed, 13 insertions, 6 deletions
diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index 85e96993..1e2ec68b 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -153,8 +153,6 @@ along with Mod Organizer. If not, see <http://www.gnu.org/licenses/>. #include <QDebug>
#include <QtGlobal>
-#include <QtConcurrent/QtConcurrentRun>
-
#ifndef Q_MOC_RUN
#include <boost/thread.hpp>
#include <boost/algorithm/string.hpp>
@@ -901,6 +899,8 @@ void MainWindow::cleanup() QWebEngineProfile::defaultProfile()->clearAllVisitedLinks();
m_IntegratedBrowser.close();
+ m_SaveMetaTimer.stop();
+ m_MetaSave.waitForFinished();
}
@@ -1568,9 +1568,13 @@ void MainWindow::checkBSAList() void MainWindow::saveModMetas()
{
- for (unsigned int i = 0; i < ModInfo::getNumMods(); ++i) {
- ModInfo::Ptr modInfo = ModInfo::getByIndex(i);
- modInfo->saveMeta();
+ if (m_MetaSave.isFinished()) {
+ m_MetaSave = QtConcurrent::run([this]() {
+ for (unsigned int i = 0; i < ModInfo::getNumMods(); ++i) {
+ ModInfo::Ptr modInfo = ModInfo::getByIndex(i);
+ modInfo->saveMeta();
+ }
+ });
}
}
diff --git a/src/mainwindow.h b/src/mainwindow.h index d0957305..ef6eb262 100644 --- a/src/mainwindow.h +++ b/src/mainwindow.h @@ -63,6 +63,7 @@ namespace MOShared { class DirectoryEntry; } #include <QHeaderView>
#include <QVariant>
#include <Qt>
+#include <QtConcurrent/QtConcurrentRun>
class QAction;
class QAbstractItemModel;
@@ -336,6 +337,8 @@ private: QTimer m_SaveMetaTimer;
QTimer m_UpdateProblemsTimer;
+ QFuture<void> m_MetaSave;
+
QTime m_StartTime;
//SaveGameInfoWidget *m_CurrentSaveView;
MOBase::ISaveGameInfoWidget *m_CurrentSaveView;
diff --git a/src/nexusinterface.cpp b/src/nexusinterface.cpp index eba02a6f..97186e8b 100644 --- a/src/nexusinterface.cpp +++ b/src/nexusinterface.cpp @@ -500,7 +500,7 @@ void NexusInterface::requestFinished(std::list<NXMRequestInfo>::iterator iter) iter->m_URL = reply->attribute(QNetworkRequest::RedirectionTargetAttribute).toString();
iter->m_Reroute = true;
m_RequestQueue.enqueue(*iter);
- nextRequest();
+ //nextRequest();
return;
}
QByteArray data = reply->readAll();
|
