summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMikaël Capelle <capelle.mikael@gmail.com>2021-01-21 21:56:26 +0100
committerMikaël Capelle <capelle.mikael@gmail.com>2021-01-21 21:56:26 +0100
commitd94b7c444d02e070875026d8c037fbd9700d2ca8 (patch)
treec7d9c5a101c16aacf4e635a4e7e301d4206ebd30
parentb1795f83cd500b5b58928efa5e170de8338178d5 (diff)
Move update of directory structure after mod priority change to organizer core.
-rw-r--r--src/modlistview.cpp36
-rw-r--r--src/organizercore.cpp45
-rw-r--r--src/organizercore.h1
3 files changed, 44 insertions, 38 deletions
diff --git a/src/modlistview.cpp b/src/modlistview.cpp
index aa920905..a6bb4982 100644
--- a/src/modlistview.cpp
+++ b/src/modlistview.cpp
@@ -434,42 +434,6 @@ void ModListView::onModPrioritiesChanged(const QModelIndexList& indices)
}
}
- for (unsigned int i = 0; i < m_core->currentProfile()->numMods(); ++i) {
- int priority = m_core->currentProfile()->getModPriority(i);
- if (m_core->currentProfile()->modEnabled(i)) {
- ModInfo::Ptr modInfo = ModInfo::getByIndex(i);
- // priorities in the directory structure are one higher because data is 0
- m_core->directoryStructure()->getOriginByName(MOBase::ToWString(modInfo->internalName())).setPriority(priority + 1);
- }
- }
- m_core->refreshBSAList();
- m_core->currentProfile()->writeModlist();
- m_core->directoryStructure()->getFileRegister()->sortOrigins();
-
- for (auto& idx : indices) {
- ModInfo::Ptr modInfo = ModInfo::getByIndex(idx.data(ModList::IndexRole).toInt());
- // clear caches on all mods conflicting with the moved mod
- for (int i : modInfo->getModOverwrite()) {
- ModInfo::getByIndex(i)->clearCaches();
- }
- for (int i : modInfo->getModOverwritten()) {
- ModInfo::getByIndex(i)->clearCaches();
- }
- for (int i : modInfo->getModArchiveOverwrite()) {
- ModInfo::getByIndex(i)->clearCaches();
- }
- for (int i : modInfo->getModArchiveOverwritten()) {
- ModInfo::getByIndex(i)->clearCaches();
- }
- for (int i : modInfo->getModArchiveLooseOverwrite()) {
- ModInfo::getByIndex(i)->clearCaches();
- }
- for (int i : modInfo->getModArchiveLooseOverwritten()) {
- ModInfo::getByIndex(i)->clearCaches();
- }
- // update conflict check on the moved mod
- modInfo->doConflictCheck();
- }
setOverwriteMarkers(selectionModel()->selectedRows());
}
diff --git a/src/organizercore.cpp b/src/organizercore.cpp
index cf641886..df4cfe5e 100644
--- a/src/organizercore.cpp
+++ b/src/organizercore.cpp
@@ -119,6 +119,7 @@ OrganizerCore::OrganizerCore(Settings &settings)
connect(&m_ModList, SIGNAL(removeOrigin(QString)), this,
SLOT(removeOrigin(QString)));
connect(&m_ModList, &ModList::modStatesChanged, [=] { currentProfile()->writeModlist(); });
+ connect(&m_ModList, &ModList::modPrioritiesChanged, [this](auto&& indexes) { modPrioritiesChanged(indexes); });
connect(NexusInterface::instance().getAccessManager(),
SIGNAL(validateSuccessful(bool)), this, SLOT(loginSuccessful(bool)));
@@ -581,8 +582,8 @@ void OrganizerCore::setCurrentProfile(const QString &profileName)
m_Settings.game().setSelectedProfileName(m_CurrentProfile->name());
- connect(m_CurrentProfile.get(), SIGNAL(modStatusChanged(uint)), this, SLOT(modStatusChanged(uint)));
- connect(m_CurrentProfile.get(), SIGNAL(modStatusChanged(QList<uint>)), this, SLOT(modStatusChanged(QList<uint>)));
+ connect(m_CurrentProfile.get(), qOverload<uint>(&Profile::modStatusChanged), [this](auto&& index) { modStatusChanged(index); });
+ connect(m_CurrentProfile.get(), qOverload<QList<uint>>(&Profile::modStatusChanged), [this](auto&& indexes) { modStatusChanged(indexes); });
refreshDirectoryStructure();
m_CurrentProfile->debugDump();
@@ -1565,6 +1566,46 @@ void OrganizerCore::profileRefresh()
refresh();
}
+void OrganizerCore::modPrioritiesChanged(const QModelIndexList& indices)
+{
+ for (unsigned int i = 0; i < currentProfile()->numMods(); ++i) {
+ int priority = currentProfile()->getModPriority(i);
+ if (currentProfile()->modEnabled(i)) {
+ ModInfo::Ptr modInfo = ModInfo::getByIndex(i);
+ // priorities in the directory structure are one higher because data is 0
+ directoryStructure()->getOriginByName(MOBase::ToWString(modInfo->internalName())).setPriority(priority + 1);
+ }
+ }
+ refreshBSAList();
+ currentProfile()->writeModlist();
+ directoryStructure()->getFileRegister()->sortOrigins();
+
+ for (auto& idx : indices) {
+ ModInfo::Ptr modInfo = ModInfo::getByIndex(idx.data(ModList::IndexRole).toInt());
+ // clear caches on all mods conflicting with the moved mod
+ for (int i : modInfo->getModOverwrite()) {
+ ModInfo::getByIndex(i)->clearCaches();
+ }
+ for (int i : modInfo->getModOverwritten()) {
+ ModInfo::getByIndex(i)->clearCaches();
+ }
+ for (int i : modInfo->getModArchiveOverwrite()) {
+ ModInfo::getByIndex(i)->clearCaches();
+ }
+ for (int i : modInfo->getModArchiveOverwritten()) {
+ ModInfo::getByIndex(i)->clearCaches();
+ }
+ for (int i : modInfo->getModArchiveLooseOverwrite()) {
+ ModInfo::getByIndex(i)->clearCaches();
+ }
+ for (int i : modInfo->getModArchiveLooseOverwritten()) {
+ ModInfo::getByIndex(i)->clearCaches();
+ }
+ // update conflict check on the moved mod
+ modInfo->doConflictCheck();
+ }
+}
+
void OrganizerCore::modStatusChanged(unsigned int index)
{
try {
diff --git a/src/organizercore.h b/src/organizercore.h
index 53686c8a..c00d0d42 100644
--- a/src/organizercore.h
+++ b/src/organizercore.h
@@ -362,6 +362,7 @@ public slots:
ModInfo::Ptr installArchive(const QString& archivePath, int priority = -1, bool reinstallation = false,
ModInfo::Ptr currentMod = nullptr, const QString& modName = QString());
+ void modPrioritiesChanged(QModelIndexList const& indexes);
void modStatusChanged(unsigned int index);
void modStatusChanged(QList<unsigned int> index);
void requestDownload(const QUrl &url, QNetworkReply *reply);