mirror of
https://github.com/OpenMW/openmw.git
synced 2025-12-13 04:43:06 +00:00
Check selected files existence in the reload cells thread
This reduces UI reponse time.
This commit is contained in:
parent
b7a48e1d78
commit
0fc22b2b2d
1 changed files with 22 additions and 7 deletions
|
|
@ -1001,7 +1001,11 @@ bool Launcher::DataFilesPage::showDeleteMessageBox(const QString& text)
|
||||||
|
|
||||||
void Launcher::DataFilesPage::slotAddonDataChanged()
|
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)
|
if (mSelectedFiles != selectedFiles)
|
||||||
{
|
{
|
||||||
const std::lock_guard lock(mReloadCellsMutex);
|
const std::lock_guard lock(mReloadCellsMutex);
|
||||||
|
|
@ -1013,6 +1017,7 @@ void Launcher::DataFilesPage::slotAddonDataChanged()
|
||||||
|
|
||||||
void Launcher::DataFilesPage::reloadCells()
|
void Launcher::DataFilesPage::reloadCells()
|
||||||
{
|
{
|
||||||
|
QStringList selectedFiles;
|
||||||
std::unique_lock lock(mReloadCellsMutex);
|
std::unique_lock lock(mReloadCellsMutex);
|
||||||
|
|
||||||
while (true)
|
while (true)
|
||||||
|
|
@ -1025,16 +1030,26 @@ void Launcher::DataFilesPage::reloadCells()
|
||||||
if (!std::exchange(mReloadCells, false))
|
if (!std::exchange(mReloadCells, false))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
QStringList selectedFiles = mSelectedFiles;
|
const QStringList newSelectedFiles = mSelectedFiles;
|
||||||
|
|
||||||
lock.unlock();
|
lock.unlock();
|
||||||
|
|
||||||
CellNameLoader cellNameLoader;
|
QStringList filteredFiles;
|
||||||
QSet<QString> set = cellNameLoader.getCellNames(selectedFiles);
|
for (const QString& v : newSelectedFiles)
|
||||||
QStringList cellNamesList(set.begin(), set.end());
|
if (QFile::exists(v))
|
||||||
std::sort(cellNamesList.begin(), cellNamesList.end());
|
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();
|
lock.lock();
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue