summaryrefslogtreecommitdiff
path: root/src/modinfowithconflictinfo.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/modinfowithconflictinfo.cpp')
-rw-r--r--src/modinfowithconflictinfo.cpp176
1 files changed, 92 insertions, 84 deletions
diff --git a/src/modinfowithconflictinfo.cpp b/src/modinfowithconflictinfo.cpp
index 74a208e9..b8ece783 100644
--- a/src/modinfowithconflictinfo.cpp
+++ b/src/modinfowithconflictinfo.cpp
@@ -6,117 +6,125 @@
using namespace MOBase;
using namespace MOShared;
-ModInfoWithConflictInfo::ModInfoWithConflictInfo(DirectoryEntry** directoryStructure)
- : m_DirectoryStructure(directoryStructure) {}
+ModInfoWithConflictInfo::ModInfoWithConflictInfo(DirectoryEntry **directoryStructure)
+ : m_DirectoryStructure(directoryStructure) {}
-void ModInfoWithConflictInfo::clearCaches() { m_LastConflictCheck = QTime(); }
+void ModInfoWithConflictInfo::clearCaches()
+{
+ m_LastConflictCheck = QTime();
+}
-std::vector<ModInfo::EFlag> ModInfoWithConflictInfo::getFlags() const {
- std::vector<ModInfo::EFlag> result;
- switch (isConflicted()) {
+std::vector<ModInfo::EFlag> ModInfoWithConflictInfo::getFlags() const
+{
+ std::vector<ModInfo::EFlag> result;
+ switch (isConflicted()) {
case CONFLICT_MIXED: {
- result.push_back(ModInfo::FLAG_CONFLICT_MIXED);
+ result.push_back(ModInfo::FLAG_CONFLICT_MIXED);
} break;
case CONFLICT_OVERWRITE: {
- result.push_back(ModInfo::FLAG_CONFLICT_OVERWRITE);
+ result.push_back(ModInfo::FLAG_CONFLICT_OVERWRITE);
} break;
case CONFLICT_OVERWRITTEN: {
- result.push_back(ModInfo::FLAG_CONFLICT_OVERWRITTEN);
+ result.push_back(ModInfo::FLAG_CONFLICT_OVERWRITTEN);
} break;
case CONFLICT_REDUNDANT: {
- result.push_back(ModInfo::FLAG_CONFLICT_REDUNDANT);
+ result.push_back(ModInfo::FLAG_CONFLICT_REDUNDANT);
} break;
- default: { /* NOP */
- }
- }
- return result;
+ default: { /* NOP */ }
+ }
+ return result;
}
-void ModInfoWithConflictInfo::doConflictCheck() const {
- m_OverwriteList.clear();
- m_OverwrittenList.clear();
- bool providesAnything = false;
+void ModInfoWithConflictInfo::doConflictCheck() const
+{
+ m_OverwriteList.clear();
+ m_OverwrittenList.clear();
- int dataID = 0;
- if ((*m_DirectoryStructure)->originExists(L"data")) {
- dataID = (*m_DirectoryStructure)->getOriginByName(L"data").getID();
- }
+ bool providesAnything = false;
- std::wstring name = ToWString(this->name());
+ int dataID = 0;
+ if ((*m_DirectoryStructure)->originExists(L"data")) {
+ dataID = (*m_DirectoryStructure)->getOriginByName(L"data").getID();
+ }
- m_CurrentConflictState = CONFLICT_NONE;
+ std::wstring name = ToWString(this->name());
- if ((*m_DirectoryStructure)->originExists(name)) {
- FilesOrigin& origin = (*m_DirectoryStructure)->getOriginByName(name);
- std::vector<FileEntry::Ptr> files = origin.getFiles();
- // for all files in this origin
- for (FileEntry::Ptr file : files) {
- const std::vector<std::pair<int, std::wstring>>& alternatives = file->getAlternatives();
- if ((alternatives.size() == 0) || (alternatives.begin()->first == dataID)) {
- // no alternatives -> no conflict
- providesAnything = true;
- } else {
- if (file->getOrigin() != origin.getID()) {
- FilesOrigin& altOrigin = (*m_DirectoryStructure)->getOriginByID(file->getOrigin());
- unsigned int altIndex = ModInfo::getIndex(ToQString(altOrigin.getName()));
- m_OverwrittenList.insert(altIndex);
- } else {
- providesAnything = true;
- }
+ m_CurrentConflictState = CONFLICT_NONE;
- // for all non-providing alternative origins
- for (auto altInfo : alternatives) {
- if ((altInfo.first != dataID) && (altInfo.first != origin.getID())) {
- FilesOrigin& altOrigin = (*m_DirectoryStructure)->getOriginByID(altInfo.first);
- unsigned int altIndex = ModInfo::getIndex(ToQString(altOrigin.getName()));
- if (origin.getPriority() > altOrigin.getPriority()) {
- m_OverwriteList.insert(altIndex);
- } else {
- m_OverwrittenList.insert(altIndex);
- }
- }
- }
- }
+ if ((*m_DirectoryStructure)->originExists(name)) {
+ FilesOrigin &origin = (*m_DirectoryStructure)->getOriginByName(name);
+ std::vector<FileEntry::Ptr> files = origin.getFiles();
+ // for all files in this origin
+ for (FileEntry::Ptr file : files) {
+ const std::vector<std::pair<int, std::wstring>> &alternatives = file->getAlternatives();
+ if ((alternatives.size() == 0) || (alternatives.begin()->first == dataID)) {
+ // no alternatives -> no conflict
+ providesAnything = true;
+ } else {
+ if (file->getOrigin() != origin.getID()) {
+ FilesOrigin &altOrigin = (*m_DirectoryStructure)->getOriginByID(file->getOrigin());
+ unsigned int altIndex = ModInfo::getIndex(ToQString(altOrigin.getName()));
+ m_OverwrittenList.insert(altIndex);
+ } else {
+ providesAnything = true;
}
- m_LastConflictCheck = QTime::currentTime();
- if (files.size() != 0) {
- if (!providesAnything)
- m_CurrentConflictState = CONFLICT_REDUNDANT;
- else if (!m_OverwriteList.empty() && !m_OverwrittenList.empty())
- m_CurrentConflictState = CONFLICT_MIXED;
- else if (!m_OverwriteList.empty())
- m_CurrentConflictState = CONFLICT_OVERWRITE;
- else if (!m_OverwrittenList.empty())
- m_CurrentConflictState = CONFLICT_OVERWRITTEN;
+ // for all non-providing alternative origins
+ for (auto altInfo : alternatives) {
+ if ((altInfo.first != dataID) && (altInfo.first != origin.getID())) {
+ FilesOrigin &altOrigin = (*m_DirectoryStructure)->getOriginByID(altInfo.first);
+ unsigned int altIndex = ModInfo::getIndex(ToQString(altOrigin.getName()));
+ if (origin.getPriority() > altOrigin.getPriority()) {
+ m_OverwriteList.insert(altIndex);
+ } else {
+ m_OverwrittenList.insert(altIndex);
+ }
+ }
}
+ }
}
-}
+ m_LastConflictCheck = QTime::currentTime();
-ModInfoWithConflictInfo::EConflictType ModInfoWithConflictInfo::isConflicted() const {
- // this is costy so cache the result
- QTime now = QTime::currentTime();
- if (m_LastConflictCheck.isNull() || (m_LastConflictCheck.secsTo(now) > 10)) {
- doConflictCheck();
+ if (files.size() != 0) {
+ if (!providesAnything)
+ m_CurrentConflictState = CONFLICT_REDUNDANT;
+ else if (!m_OverwriteList.empty() && !m_OverwrittenList.empty())
+ m_CurrentConflictState = CONFLICT_MIXED;
+ else if (!m_OverwriteList.empty())
+ m_CurrentConflictState = CONFLICT_OVERWRITE;
+ else if (!m_OverwrittenList.empty())
+ m_CurrentConflictState = CONFLICT_OVERWRITTEN;
}
+ }
+}
+
+ModInfoWithConflictInfo::EConflictType ModInfoWithConflictInfo::isConflicted() const
+{
+ // this is costy so cache the result
+ QTime now = QTime::currentTime();
+ if (m_LastConflictCheck.isNull() || (m_LastConflictCheck.secsTo(now) > 10)) {
+ doConflictCheck();
+ }
- return m_CurrentConflictState;
+ return m_CurrentConflictState;
}
-bool ModInfoWithConflictInfo::isRedundant() const {
- std::wstring name = ToWString(this->name());
- if ((*m_DirectoryStructure)->originExists(name)) {
- FilesOrigin& origin = (*m_DirectoryStructure)->getOriginByName(name);
- std::vector<FileEntry::Ptr> files = origin.getFiles();
- bool ignore = false;
- for (auto iter = files.begin(); iter != files.end(); ++iter) {
- if ((*iter)->getOrigin(ignore) == origin.getID()) {
- return false;
- }
- }
- return true;
- } else {
+
+bool ModInfoWithConflictInfo::isRedundant() const
+{
+ std::wstring name = ToWString(this->name());
+ if ((*m_DirectoryStructure)->originExists(name)) {
+ FilesOrigin &origin = (*m_DirectoryStructure)->getOriginByName(name);
+ std::vector<FileEntry::Ptr> files = origin.getFiles();
+ bool ignore = false;
+ for (auto iter = files.begin(); iter != files.end(); ++iter) {
+ if ((*iter)->getOrigin(ignore) == origin.getID()) {
return false;
+ }
}
+ return true;
+ } else {
+ return false;
+ }
}