summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorisanae <14251494+isanae@users.noreply.github.com>2020-02-15 14:22:42 -0500
committerisanae <14251494+isanae@users.noreply.github.com>2020-02-18 17:25:05 -0500
commitdbb3f5117a3f977bbef34ebdab217f379429d1f2 (patch)
treec9425391f78bef67e3e033ad7b8188d0e9900acb /src
parent777d822f13fcd15fc5f5ac0bb45589460a1e16f1 (diff)
removed directoryrefresher.h from organizercore.h
Diffstat (limited to 'src')
-rw-r--r--src/directoryrefresher.cpp174
-rw-r--r--src/directoryrefresher.h8
-rw-r--r--src/organizercore.cpp19
-rw-r--r--src/organizercore.h41
-rw-r--r--src/shared/directoryentry.cpp99
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),