From 299a769a83a883e68ecf47ee928113ed45b533b3 Mon Sep 17 00:00:00 2001 From: Al Date: Sat, 5 Jan 2019 18:44:15 +0100 Subject: Improve performance of refresh (regex and code distribution) --- src/pluginlist.cpp | 30 ++++++++++++++++++++++++++---- 1 file changed, 26 insertions(+), 4 deletions(-) (limited to 'src/pluginlist.cpp') diff --git a/src/pluginlist.cpp b/src/pluginlist.cpp index 8f336dae..5171bf19 100644 --- a/src/pluginlist.cpp +++ b/src/pluginlist.cpp @@ -41,6 +41,7 @@ along with Mod Organizer. If not, see . #include #include #include +#include #include #include #include @@ -174,6 +175,19 @@ void PluginList::refresh(const QString &profileName QStringList availablePlugins; + QRegExp bsaReg = QRegExp(); + QRegExp ba2Reg = QRegExp(); + bsaReg.setPatternSyntax(QRegExp::Wildcard); + bsaReg.setCaseSensitivity(Qt::CaseInsensitive); + ba2Reg.setPatternSyntax(QRegExp::Wildcard); + ba2Reg.setCaseSensitivity(Qt::CaseInsensitive); + + //TODO: try QRegularExpression when we move to Qt5.12 + /*QRegularExpression bsaReg = QRegularExpression(); + QRegularExpression ba2Reg = QRegularExpression(); + bsaReg.setPatternOptions(QRegularExpression::CaseInsensitiveOption); + ba2Reg.setPatternOptions(QRegularExpression::CaseInsensitiveOption);*/ + std::vector files = baseDirectory.getFiles(); for (FileEntry::Ptr current : files) { if (current.get() == nullptr) { @@ -198,15 +212,23 @@ void PluginList::refresh(const QString &profileName try { FilesOrigin &origin = baseDirectory.getOriginByID(current->getOrigin(archive)); + //name without extension + QString baseName = QFileInfo(filename).baseName(); - QString iniPath = QFileInfo(filename).baseName() + ".ini"; + QString iniPath = baseName + ".ini"; bool hasIni = baseDirectory.findFile(ToWString(iniPath)).get() != nullptr; + bsaReg.setPattern(baseName + "*.bsa"); + ba2Reg.setPattern(baseName + "*.ba2"); + + + //bsaReg.setPattern(QRegularExpression::wildcardToRegularExpression(baseName + "*.bsa")); + //ba2Reg.setPattern(QRegularExpression::wildcardToRegularExpression(baseName + "*.ba2")); std::set loadedArchives; + QString candidateName; for (FileEntry::Ptr archiveCandidate : files) { - QString candidateName = ToQString(archiveCandidate->getName()); - if (candidateName.contains(QRegExp(QFileInfo(filename).baseName() + "*.bsa", Qt::CaseInsensitive, QRegExp::Wildcard)) || - candidateName.contains(QRegExp(QFileInfo(filename).baseName() + "*.ba2", Qt::CaseInsensitive, QRegExp::Wildcard))) { + candidateName = ToQString(archiveCandidate->getName()); + if (candidateName.contains(bsaReg) || candidateName.contains(ba2Reg)) { loadedArchives.insert(candidateName); } } -- cgit v1.3.1