1
0
Fork 0
mirror of https://github.com/OpenMW/openmw.git synced 2025-06-30 16:11:36 +00:00

Check selected files existence in the reload cells thread

This reduces UI reponse time.
This commit is contained in:
elsid 2025-05-04 17:19:50 +02:00
parent b7a48e1d78
commit 0fc22b2b2d
No known key found for this signature in database
GPG key ID: B845CB9FEE18AB40

View file

@ -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<QString> 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<QString> set = cellNameLoader.getCellNames(selectedFiles);
QStringList cellNamesList(set.begin(), set.end());
std::sort(cellNamesList.begin(), cellNamesList.end());
emit signalLoadedCellsChanged(std::move(cellNamesList));
}
lock.lock();