diff options
| author | isanae <14251494+isanae@users.noreply.github.com> | 2020-02-15 14:22:42 -0500 |
|---|---|---|
| committer | isanae <14251494+isanae@users.noreply.github.com> | 2020-02-18 17:25:05 -0500 |
| commit | dbb3f5117a3f977bbef34ebdab217f379429d1f2 (patch) | |
| tree | c9425391f78bef67e3e033ad7b8188d0e9900acb | |
| parent | 777d822f13fcd15fc5f5ac0bb45589460a1e16f1 (diff) | |
removed directoryrefresher.h from organizercore.h
| -rw-r--r-- | src/directoryrefresher.cpp | 174 | ||||
| -rw-r--r-- | src/directoryrefresher.h | 8 | ||||
| -rw-r--r-- | src/organizercore.cpp | 19 | ||||
| -rw-r--r-- | src/organizercore.h | 41 | ||||
| -rw-r--r-- | src/shared/directoryentry.cpp | 99 |
5 files changed, 160 insertions, 181 deletions
diff --git a/src/directoryrefresher.cpp b/src/directoryrefresher.cpp index 3b92389a..8a64d4a9 100644 --- a/src/directoryrefresher.cpp +++ b/src/directoryrefresher.cpp @@ -45,22 +45,141 @@ using namespace MOBase; using namespace MOShared;
-DirectoryRefresher::DirectoryRefresher(std::size_t threadCount)
- : m_DirectoryStructure(nullptr), m_threadCount(threadCount), m_lastFileCount(0)
+DirectoryStats::DirectoryStats()
+{
+ std::memset(this, 0, sizeof(DirectoryStats));
+}
+
+DirectoryStats& DirectoryStats::operator+=(const DirectoryStats& o)
+{
+ dirTimes += o.dirTimes;
+ fileTimes += o.fileTimes;
+ sortTimes += o.sortTimes;
+
+ subdirLookupTimes += o.subdirLookupTimes;
+ addDirectoryTimes += o.addDirectoryTimes;
+
+ filesLookupTimes += o.filesLookupTimes;
+ addFileTimes += o.addFileTimes;
+ addOriginToFileTimes += o.addOriginToFileTimes;
+ addFileToOriginTimes += o.addFileToOriginTimes;
+ addFileToRegisterTimes += o.addFileToRegisterTimes;
+
+ originExists += o.originExists;
+ originCreate += o.originCreate;
+ originsNeededEnabled += o.originsNeededEnabled;
+
+ subdirExists += o.subdirExists;
+ subdirCreate += o.subdirCreate;
+
+ fileExists += o.fileExists;
+ fileCreate += o.fileCreate;
+ filesInsertedInRegister += o.filesInsertedInRegister;
+ filesAssignedInRegister += o.filesAssignedInRegister;
+
+ return *this;
+}
+
+std::string DirectoryStats::csvHeader()
{
+ QStringList sl = {
+ "dirTimes",
+ "fileTimes",
+ "sortTimes",
+ "subdirLookupTimes",
+ "addDirectoryTimes",
+ "filesLookupTimes",
+ "addFileTimes",
+ "addOriginToFileTimes",
+ "addFileToOriginTimes",
+ "addFileToRegisterTimes",
+ "originExists",
+ "originCreate",
+ "originsNeededEnabled",
+ "subdirExists",
+ "subdirCreate",
+ "fileExists",
+ "fileCreate",
+ "filesInsertedInRegister",
+ "filesAssignedInRegister"};
+
+ return sl.join(",").toStdString();
}
-DirectoryRefresher::~DirectoryRefresher()
+std::string DirectoryStats::toCsv() const
+{
+ QStringList oss;
+
+ auto s = [](auto ns) {
+ return ns.count() / 1000.0 / 1000.0 / 1000.0;
+ };
+
+ oss
+ << QString::number(s(dirTimes))
+ << QString::number(s(fileTimes))
+ << QString::number(s(sortTimes))
+
+ << QString::number(s(subdirLookupTimes))
+ << QString::number(s(addDirectoryTimes))
+
+ << QString::number(s(filesLookupTimes))
+ << QString::number(s(addFileTimes))
+ << QString::number(s(addOriginToFileTimes))
+ << QString::number(s(addFileToOriginTimes))
+ << QString::number(s(addFileToRegisterTimes))
+
+ << QString::number(originExists)
+ << QString::number(originCreate)
+ << QString::number(originsNeededEnabled)
+
+ << QString::number(subdirExists)
+ << QString::number(subdirCreate)
+
+ << QString::number(fileExists)
+ << QString::number(fileCreate)
+ << QString::number(filesInsertedInRegister)
+ << QString::number(filesAssignedInRegister);
+
+ return oss.join(",").toStdString();
+}
+
+void dumpStats(std::vector<DirectoryStats>& stats)
+{
+ static int run = 0;
+ static const std::string file("c:\\tmp\\data.csv");
+
+ if (run == 0) {
+ std::ofstream out(file, std::ios::out|std::ios::trunc);
+ out << fmt::format("what,run,{}", DirectoryStats::csvHeader()) << "\n";
+ }
+
+ std::sort(stats.begin(), stats.end(), [](auto&& a, auto&& b){
+ return (naturalCompare(QString::fromStdString(a.mod), QString::fromStdString(b.mod)) < 0);
+ });
+
+ std::ofstream out(file, std::ios::app);
+
+ DirectoryStats total;
+ for (const auto& s : stats) {
+ out << fmt::format("{},{},{}", s.mod, run, s.toCsv()) << "\n";
+ total += s;
+ }
+
+ out << fmt::format("total,{},{}", run, total.toCsv()) << "\n";
+
+ ++run;
+}
+
+
+DirectoryRefresher::DirectoryRefresher(std::size_t threadCount)
+ : m_threadCount(threadCount), m_lastFileCount(0)
{
- delete m_DirectoryStructure;
}
DirectoryEntry *DirectoryRefresher::stealDirectoryStructure()
{
QMutexLocker locker(&m_RefreshLock);
- DirectoryEntry *result = m_DirectoryStructure;
- m_DirectoryStructure = nullptr;
- return result;
+ return m_Root.release();
}
void DirectoryRefresher::setMods(const std::vector<std::tuple<QString, QString, int> > &mods
@@ -251,32 +370,6 @@ struct ModThread env::ThreadPool<ModThread> g_threads;
-void dumpStats(std::vector<DirectoryStats>& stats)
-{
- static int run = 0;
- static const std::string file("c:\\tmp\\data.csv");
-
- if (run == 0) {
- std::ofstream out(file, std::ios::out|std::ios::trunc);
- out << fmt::format("what,run,{}", DirectoryStats::csvHeader()) << "\n";
- }
-
- std::sort(stats.begin(), stats.end(), [](auto&& a, auto&& b){
- return (naturalCompare(QString::fromStdString(a.mod), QString::fromStdString(b.mod)) < 0);
- });
-
- std::ofstream out(file, std::ios::app);
-
- DirectoryStats total;
- for (const auto& s : stats) {
- out << fmt::format("{},{},{}", s.mod, run, s.toCsv()) << "\n";
- total += s;
- }
-
- out << fmt::format("total,{},{}", run, total.toCsv()) << "\n";
-
- ++run;
-}
void DirectoryRefresher::addMultipleModsFilesToStructure(
MOShared::DirectoryEntry *directoryStructure,
@@ -332,10 +425,9 @@ void DirectoryRefresher::refresh() TimeThis tt("refresh");
QMutexLocker locker(&m_RefreshLock);
- delete m_DirectoryStructure;
- m_DirectoryStructure = new DirectoryEntry(L"data", nullptr, 0);
- m_DirectoryStructure->getFileRegister()->reserve(m_lastFileCount);
+ m_Root.reset(new DirectoryEntry(L"data", nullptr, 0));
+ m_Root->getFileRegister()->reserve(m_lastFileCount);
IPluginGame *game = qApp->property("managed_game").value<IPluginGame*>();
@@ -344,20 +436,20 @@ void DirectoryRefresher::refresh() {
DirectoryStats dummy;
- m_DirectoryStructure->addFromOrigin(L"data", dataDirectory, 0, dummy);
+ m_Root->addFromOrigin(L"data", dataDirectory, 0, dummy);
}
std::sort(m_Mods.begin(), m_Mods.end(), [](auto lhs, auto rhs) {
return lhs.priority < rhs.priority;
});
- addMultipleModsFilesToStructure(m_DirectoryStructure, m_Mods, true);
+ addMultipleModsFilesToStructure(m_Root.get(), m_Mods, true);
- m_DirectoryStructure->getFileRegister()->sortOrigins();
+ m_Root->getFileRegister()->sortOrigins();
- cleanStructure(m_DirectoryStructure);
+ cleanStructure(m_Root.get());
- m_lastFileCount = m_DirectoryStructure->getFileRegister()->highestCount();
+ m_lastFileCount = m_Root->getFileRegister()->highestCount();
log::debug("refresher saw {} files", m_lastFileCount);
emit progress(100);
diff --git a/src/directoryrefresher.h b/src/directoryrefresher.h index 2102140c..e81b55dd 100644 --- a/src/directoryrefresher.h +++ b/src/directoryrefresher.h @@ -50,14 +50,8 @@ public: int priority;
};
- /**
- * @brief constructor
- *
- **/
DirectoryRefresher(std::size_t threadCount);
- ~DirectoryRefresher();
-
// noncopyable
DirectoryRefresher(const DirectoryRefresher&) = delete;
DirectoryRefresher& operator=(const DirectoryRefresher&) = delete;
@@ -145,7 +139,7 @@ signals: private:
std::vector<EntryInfo> m_Mods;
std::set<QString> m_EnabledArchives;
- MOShared::DirectoryEntry *m_DirectoryStructure;
+ std::unique_ptr<MOShared::DirectoryEntry> m_Root;
QMutex m_RefreshLock;
std::size_t m_threadCount;
std::size_t m_lastFileCount;
diff --git a/src/organizercore.cpp b/src/organizercore.cpp index 2c680847..80df044a 100644 --- a/src/organizercore.cpp +++ b/src/organizercore.cpp @@ -34,6 +34,7 @@ #include "env.h" #include "envmodule.h" #include "envfs.h" +#include "directoryrefresher.h" #include "shared/directoryentry.h" #include "shared/filesorigin.h" #include "shared/fileentry.h" @@ -96,7 +97,7 @@ OrganizerCore::OrganizerCore(Settings &settings) , m_Updater(NexusInterface::instance(m_PluginContainer)) , m_ModList(m_PluginContainer, this) , m_PluginList(this) - , m_DirectoryRefresher(settings.refreshThreadCount()) + , m_DirectoryRefresher(new DirectoryRefresher(settings.refreshThreadCount())) , m_DirectoryStructure(new DirectoryEntry(L"data", nullptr, 0)) , m_DownloadManager(NexusInterface::instance(m_PluginContainer), this) , m_DirectoryUpdate(false) @@ -114,7 +115,7 @@ OrganizerCore::OrganizerCore(Settings &settings) connect(&m_DownloadManager, SIGNAL(downloadSpeed(QString, int)), this, SLOT(downloadSpeed(QString, int))); - connect(&m_DirectoryRefresher, SIGNAL(refreshed()), this, + connect(m_DirectoryRefresher.get(), SIGNAL(refreshed()), this, SLOT(directory_refreshed())); connect(&m_ModList, SIGNAL(removeOrigin(QString)), this, @@ -139,7 +140,7 @@ OrganizerCore::OrganizerCore(Settings &settings) // make directory refresher run in a separate thread m_RefresherThread.start(); - m_DirectoryRefresher.moveToThread(&m_RefresherThread); + m_DirectoryRefresher->moveToThread(&m_RefresherThread); } OrganizerCore::~OrganizerCore() @@ -1255,7 +1256,7 @@ void OrganizerCore::updateModsInDirectoryStructure(QMap<unsigned int, ModInfo::P modInfo[idx]->stealFiles(), {}, m_CurrentProfile->getModPriority(idx)}); } - m_DirectoryRefresher.addMultipleModsFilesToStructure( + m_DirectoryRefresher->addMultipleModsFilesToStructure( m_DirectoryStructure, entries); DirectoryRefresher::cleanStructure(m_DirectoryStructure); @@ -1274,13 +1275,13 @@ void OrganizerCore::updateModsInDirectoryStructure(QMap<unsigned int, ModInfo::P } std::vector<QString> archives = enabledArchives(); - m_DirectoryRefresher.setMods( + m_DirectoryRefresher->setMods( m_CurrentProfile->getActiveMods(), std::set<QString>(archives.begin(), archives.end())); // finally also add files from bsas to the directory structure for (auto idx : modInfo.keys()) { - m_DirectoryRefresher.addModBSAToStructure( + m_DirectoryRefresher->addModBSAToStructure( m_DirectoryStructure, modInfo[idx]->name(), m_CurrentProfile->getModPriority(idx), modInfo[idx]->absolutePath(), modInfo[idx]->archives()); @@ -1398,18 +1399,18 @@ void OrganizerCore::refreshDirectoryStructure() const auto activeModList = m_CurrentProfile->getActiveMods(); const auto archives = enabledArchives(); - m_DirectoryRefresher.setMods( + m_DirectoryRefresher->setMods( activeModList, std::set<QString>(archives.begin(), archives.end())); // runs refresh() in a thread - QTimer::singleShot(0, &m_DirectoryRefresher, SLOT(refresh())); + QTimer::singleShot(0, m_DirectoryRefresher.get(), SLOT(refresh())); } void OrganizerCore::directory_refreshed() { log::debug("structure refreshed"); - DirectoryEntry *newStructure = m_DirectoryRefresher.stealDirectoryStructure(); + DirectoryEntry *newStructure = m_DirectoryRefresher->stealDirectoryStructure(); Q_ASSERT(newStructure != m_DirectoryStructure); if (newStructure == nullptr) { diff --git a/src/organizercore.h b/src/organizercore.h index 980156d3..a4d1a799 100644 --- a/src/organizercore.h +++ b/src/organizercore.h @@ -1,13 +1,11 @@ #ifndef ORGANIZERCORE_H
#define ORGANIZERCORE_H
-
#include "selfupdater.h"
#include "settings.h"
#include "modlist.h"
#include "modinfo.h"
#include "pluginlist.h"
-#include "directoryrefresher.h"
#include "installationmanager.h"
#include "downloadmanager.h"
#include "executableslist.h"
@@ -23,17 +21,6 @@ #include "executableinfo.h"
#include <log.h>
-class ModListSortProxy;
-class PluginListSortProxy;
-class Profile;
-class IUserInterface;
-
-namespace MOBase {
- template <typename T> class GuessedValue;
- class IModInterface;
-}
-namespace MOShared { class DirectoryEntry; }
-
#include <QDir>
#include <QFileInfo>
#include <QList>
@@ -44,21 +31,25 @@ namespace MOShared { class DirectoryEntry; } #include <QThread>
#include <QVariant>
-class QNetworkReply;
-class QUrl;
-class QWidget;
-
-#include <Windows.h> //for HANDLE, LPDWORD
-
-#include <functional>
-#include <vector>
-
+class ModListSortProxy;
+class PluginListSortProxy;
+class Profile;
+class IUserInterface;
class PluginContainer;
+class DirectoryRefresher;
-namespace MOBase {
+namespace MOBase
+{
+ template <typename T> class GuessedValue;
+ class IModInterface;
class IPluginGame;
}
+namespace MOShared
+{
+ class DirectoryEntry;
+}
+
class OrganizerCore : public QObject, public MOBase::IPluginDiagnose
{
@@ -113,7 +104,7 @@ public: SelfUpdater *updater() { return &m_Updater; }
InstallationManager *installationManager();
MOShared::DirectoryEntry *directoryStructure() { return m_DirectoryStructure; }
- DirectoryRefresher *directoryRefresher() { return &m_DirectoryRefresher; }
+ DirectoryRefresher *directoryRefresher() { return m_DirectoryRefresher.get(); }
ExecutablesList *executablesList() { return &m_ExecutablesList; }
void setExecutablesList(const ExecutablesList &executablesList) {
m_ExecutablesList = executablesList;
@@ -337,7 +328,7 @@ private: QStringList m_DefaultArchives;
QStringList m_ActiveArchives;
- DirectoryRefresher m_DirectoryRefresher;
+ std::unique_ptr<DirectoryRefresher> m_DirectoryRefresher;
MOShared::DirectoryEntry *m_DirectoryStructure;
DownloadManager m_DownloadManager;
diff --git a/src/shared/directoryentry.cpp b/src/shared/directoryentry.cpp index 14c8323e..7f140750 100644 --- a/src/shared/directoryentry.cpp +++ b/src/shared/directoryentry.cpp @@ -73,105 +73,6 @@ static bool DirCompareByName(const DirectoryEntry *lhs, const DirectoryEntry *rh }
-DirectoryStats::DirectoryStats()
-{
- std::memset(this, 0, sizeof(DirectoryStats));
-}
-
-DirectoryStats& DirectoryStats::operator+=(const DirectoryStats& o)
-{
- dirTimes += o.dirTimes;
- fileTimes += o.fileTimes;
- sortTimes += o.sortTimes;
-
- subdirLookupTimes += o.subdirLookupTimes;
- addDirectoryTimes += o.addDirectoryTimes;
-
- filesLookupTimes += o.filesLookupTimes;
- addFileTimes += o.addFileTimes;
- addOriginToFileTimes += o.addOriginToFileTimes;
- addFileToOriginTimes += o.addFileToOriginTimes;
- addFileToRegisterTimes += o.addFileToRegisterTimes;
-
- originExists += o.originExists;
- originCreate += o.originCreate;
- originsNeededEnabled += o.originsNeededEnabled;
-
- subdirExists += o.subdirExists;
- subdirCreate += o.subdirCreate;
-
- fileExists += o.fileExists;
- fileCreate += o.fileCreate;
- filesInsertedInRegister += o.filesInsertedInRegister;
- filesAssignedInRegister += o.filesAssignedInRegister;
-
- return *this;
-}
-
-std::string DirectoryStats::csvHeader()
-{
- QStringList sl = {
- "dirTimes",
- "fileTimes",
- "sortTimes",
- "subdirLookupTimes",
- "addDirectoryTimes",
- "filesLookupTimes",
- "addFileTimes",
- "addOriginToFileTimes",
- "addFileToOriginTimes",
- "addFileToRegisterTimes",
- "originExists",
- "originCreate",
- "originsNeededEnabled",
- "subdirExists",
- "subdirCreate",
- "fileExists",
- "fileCreate",
- "filesInsertedInRegister",
- "filesAssignedInRegister"};
-
- return sl.join(",").toStdString();
-}
-
-std::string DirectoryStats::toCsv() const
-{
- QStringList oss;
-
- auto s = [](auto ns) {
- return ns.count() / 1000.0 / 1000.0 / 1000.0;
- };
-
- oss
- << QString::number(s(dirTimes))
- << QString::number(s(fileTimes))
- << QString::number(s(sortTimes))
-
- << QString::number(s(subdirLookupTimes))
- << QString::number(s(addDirectoryTimes))
-
- << QString::number(s(filesLookupTimes))
- << QString::number(s(addFileTimes))
- << QString::number(s(addOriginToFileTimes))
- << QString::number(s(addFileToOriginTimes))
- << QString::number(s(addFileToRegisterTimes))
-
- << QString::number(originExists)
- << QString::number(originCreate)
- << QString::number(originsNeededEnabled)
-
- << QString::number(subdirExists)
- << QString::number(subdirCreate)
-
- << QString::number(fileExists)
- << QString::number(fileCreate)
- << QString::number(filesInsertedInRegister)
- << QString::number(filesAssignedInRegister);
-
- return oss.join(",").toStdString();
-}
-
-
DirectoryEntry::DirectoryEntry(
std::wstring name, DirectoryEntry *parent, int originID) :
m_OriginConnection(new OriginConnection),
|
