summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAl <gabriel.cortesi@outlook.com>2019-01-05 18:44:15 +0100
committerAl <gabriel.cortesi@outlook.com>2019-01-05 18:44:15 +0100
commit299a769a83a883e68ecf47ee928113ed45b533b3 (patch)
tree67ab72951d55837aebf17b64b1ccf1ace13c492e /src
parent14782a374c727c8fb2c6733ba0556fca9dc9eda6 (diff)
Improve performance of refresh (regex and code distribution)
Diffstat (limited to 'src')
-rw-r--r--src/mainwindow.cpp8
-rw-r--r--src/pluginlist.cpp30
2 files changed, 30 insertions, 8 deletions
diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp
index 633ceb5f..52cb894f 100644
--- a/src/mainwindow.cpp
+++ b/src/mainwindow.cpp
@@ -463,8 +463,8 @@ MainWindow::MainWindow(QSettings &initSettings
actionWidget->style()->polish(actionWidget);
}
- emit updatePluginCount();
- emit updateModCount();
+ updatePluginCount();
+ updateModCount();
}
@@ -2223,7 +2223,7 @@ void MainWindow::directory_refreshed()
void MainWindow::esplist_changed()
{
- emit updatePluginCount();
+ updatePluginCount();
}
void MainWindow::modorder_changed()
@@ -2483,7 +2483,7 @@ void MainWindow::restoreBackup_clicked()
void MainWindow::modlistChanged(const QModelIndex&, int)
{
m_OrganizerCore.currentProfile()->writeModlist();
- emit updateModCount();
+ updateModCount();
}
void MainWindow::modlistSelectionChanged(const QModelIndex &current, const QModelIndex&)
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 <http://www.gnu.org/licenses/>.
#include <QTextCodec>
#include <QFileInfo>
#include <QListWidgetItem>
+#include <QRegularExpression>
#include <QString>
#include <QApplication>
#include <QKeyEvent>
@@ -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<FileEntry::Ptr> 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<QString> 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);
}
}