From 0fc22b2b2de8d643577095b11717de12036974d7 Mon Sep 17 00:00:00 2001 From: elsid Date: Sun, 4 May 2025 17:19:50 +0200 Subject: [PATCH] Check selected files existence in the reload cells thread This reduces UI reponse time. --- apps/launcher/datafilespage.cpp | 29 ++++++++++++++++++++++------- 1 file changed, 22 insertions(+), 7 deletions(-) diff --git a/apps/launcher/datafilespage.cpp b/apps/launcher/datafilespage.cpp index f5c0694a3b..9f92e8ed0f 100644 --- a/apps/launcher/datafilespage.cpp +++ b/apps/launcher/datafilespage.cpp @@ -1001,7 +1001,11 @@ bool Launcher::DataFilesPage::showDeleteMessageBox(const QString& text) void Launcher::DataFilesPage::slotAddonDataChanged() { - QStringList selectedFiles = selectedFilePaths(); + const ContentSelectorModel::ContentFileList items = mSelector->selectedFiles(); + QStringList selectedFiles; + for (const ContentSelectorModel::EsmFile* item : items) + selectedFiles.append(item->filePath()); + if (mSelectedFiles != selectedFiles) { const std::lock_guard lock(mReloadCellsMutex); @@ -1013,6 +1017,7 @@ void Launcher::DataFilesPage::slotAddonDataChanged() void Launcher::DataFilesPage::reloadCells() { + QStringList selectedFiles; std::unique_lock lock(mReloadCellsMutex); while (true) @@ -1025,16 +1030,26 @@ void Launcher::DataFilesPage::reloadCells() if (!std::exchange(mReloadCells, false)) continue; - QStringList selectedFiles = mSelectedFiles; + const QStringList newSelectedFiles = mSelectedFiles; lock.unlock(); - CellNameLoader cellNameLoader; - QSet set = cellNameLoader.getCellNames(selectedFiles); - QStringList cellNamesList(set.begin(), set.end()); - std::sort(cellNamesList.begin(), cellNamesList.end()); + QStringList filteredFiles; + for (const QString& v : newSelectedFiles) + if (QFile::exists(v)) + filteredFiles.append(v); - emit signalLoadedCellsChanged(std::move(cellNamesList)); + if (selectedFiles != filteredFiles) + { + selectedFiles = std::move(filteredFiles); + + CellNameLoader cellNameLoader; + QSet set = cellNameLoader.getCellNames(selectedFiles); + QStringList cellNamesList(set.begin(), set.end()); + std::sort(cellNamesList.begin(), cellNamesList.end()); + + emit signalLoadedCellsChanged(std::move(cellNamesList)); + } lock.lock();