From d3fe9ff1faed52da8f647d9294e9ce371b0361e4 Mon Sep 17 00:00:00 2001
From: isanae <14251494+isanae@users.noreply.github.com>
Date: Sun, 16 Feb 2020 18:57:38 -0500
Subject: moved TimeThis to uibase fixed progress bar
---
src/directoryrefresher.h | 74 ++++++++++++++++++++++++++++++++++++++++++++----
1 file changed, 68 insertions(+), 6 deletions(-)
(limited to 'src/directoryrefresher.h')
diff --git a/src/directoryrefresher.h b/src/directoryrefresher.h
index e81b55dd..bd08dad6 100644
--- a/src/directoryrefresher.h
+++ b/src/directoryrefresher.h
@@ -20,14 +20,14 @@ along with Mod Organizer. If not, see .
#ifndef DIRECTORYREFRESHER_H
#define DIRECTORYREFRESHER_H
+#include "fileregisterfwd.h"
+#include "profile.h"
#include
#include
#include
#include
#include
#include
-#include "profile.h"
-
/**
* @brief used to asynchronously generate the virtual view of the combined data directory
@@ -38,11 +38,15 @@ class DirectoryRefresher : public QObject
Q_OBJECT
public:
- struct EntryInfo {
+ struct EntryInfo
+ {
EntryInfo(const QString &modName, const QString &absolutePath,
const QStringList &stealFiles, const QStringList &archives, int priority)
: modName(modName), absolutePath(absolutePath), stealFiles(stealFiles)
- , archives(archives), priority(priority) {}
+ , archives(archives), priority(priority)
+ {
+ }
+
QString modName;
QString absolutePath;
QStringList stealFiles;
@@ -121,7 +125,10 @@ public:
void addMultipleModsFilesToStructure(
MOShared::DirectoryEntry *directoryStructure,
- const std::vector& entries, bool emitProgress=false);
+ const std::vector& entries,
+ DirectoryRefreshProgress* progress=nullptr);
+
+ void updateProgress(const DirectoryRefreshProgress* p);
public slots:
@@ -132,7 +139,7 @@ public slots:
signals:
- void progress(int progress);
+ void progress(const DirectoryRefreshProgress* p);
void error(const QString &error);
void refreshed();
@@ -149,4 +156,59 @@ private:
int priority, const QString &directory, const QStringList &stealFiles);
};
+
+class DirectoryRefreshProgress : QObject
+{
+ Q_OBJECT;
+
+public:
+ DirectoryRefreshProgress(DirectoryRefresher* r) :
+ QObject(r), m_refresher(r), m_modCount(0), m_modDone(0), m_finished(false)
+ {
+ }
+
+ void start(std::size_t modCount)
+ {
+ m_modCount = modCount;
+ m_modDone = 0;
+ m_finished = false;
+ }
+
+
+ bool finished() const
+ {
+ return m_finished;
+ }
+
+ int percentDone() const
+ {
+ int percent = 100;
+
+ if (m_modCount > 0) {
+ const double d = static_cast(m_modDone) / m_modCount;
+ percent = static_cast(d * 100);
+ }
+
+ return percent;
+ }
+
+
+ void finish()
+ {
+ m_finished = true;
+ }
+
+ void addDone()
+ {
+ ++m_modDone;
+ m_refresher->updateProgress(this);
+ }
+
+private:
+ DirectoryRefresher* m_refresher;
+ std::size_t m_modCount;
+ std::atomic m_modDone;
+ bool m_finished;
+};
+
#endif // DIRECTORYREFRESHER_H
--
cgit v1.3.1