diff options
| author | Al <gabriel.cortesi@outlook.com> | 2019-01-05 18:44:15 +0100 |
|---|---|---|
| committer | Al <gabriel.cortesi@outlook.com> | 2019-01-05 18:44:15 +0100 |
| commit | 299a769a83a883e68ecf47ee928113ed45b533b3 (patch) | |
| tree | 67ab72951d55837aebf17b64b1ccf1ace13c492e | |
| parent | 14782a374c727c8fb2c6733ba0556fca9dc9eda6 (diff) | |
Improve performance of refresh (regex and code distribution)
| -rw-r--r-- | src/mainwindow.cpp | 8 | ||||
| -rw-r--r-- | src/pluginlist.cpp | 30 |
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 ¤t, 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);
}
}
|
