Run folder search filtering in the background

It uses the same approach used by the comics search filter
This commit is contained in:
Luis Ángel San Martín
2021-01-14 11:37:17 +01:00
parent 047fd24609
commit 5343d24f26
7 changed files with 238 additions and 309 deletions

View File

@ -400,6 +400,7 @@ void LibraryWindow::doModels()
//folders
foldersModel = new FolderModel();
foldersModelProxy = new FolderModelProxy();
folderQueryResultProcessor = new FolderQueryResultProcessor(foldersModel);
//foldersModelProxy->setSourceModel(foldersModel);
//comics
comicsModel = new ComicModel(this);
@ -1056,6 +1057,7 @@ void LibraryWindow::createConnections()
//Search filter
connect(searchEdit, SIGNAL(filterChanged(YACReader::SearchModifiers, QString)), this, SLOT(setSearchFilter(YACReader::SearchModifiers, QString)));
connect(&comicQueryResultProcesor, &ComicQueryResultProcesor::newData, this, &LibraryWindow::setComicSearchFilterData);
connect(folderQueryResultProcessor, &FolderQueryResultProcessor::newData, this, &LibraryWindow::setFolderSearchFilterData);
//ContextMenus
connect(openContainingFolderComicAction, SIGNAL(triggered()), this, SLOT(openContainingFolderComic()));
@ -2069,8 +2071,7 @@ void LibraryWindow::toNormal()
void LibraryWindow::setSearchFilter(const YACReader::SearchModifiers modifier, QString filter)
{
if (!filter.isEmpty()) {
//TODO move search query for folders to its own async processor
foldersModelProxy->setFilter(modifier, filter, true); //includeComicsCheckBox->isChecked());
folderQueryResultProcessor->createModelData(modifier, filter, true);
comicQueryResultProcesor.createModelData(modifier, filter, foldersModel->getDatabase());
} else if (status == LibraryWindow::Searching) { //if no searching, then ignore this
clearSearchFilter();
@ -2085,7 +2086,6 @@ void LibraryWindow::setComicSearchFilterData(QList<ComicItem *> *data, const QSt
comicsModel->setModelData(data, databasePath);
comicsViewsManager->comicsView->enableFilterMode(true);
comicsViewsManager->comicsView->setModel(comicsModel); //TODO, columns are messed up after ResetModel some times, this shouldn't be necesary
foldersView->expandAll();
if (comicsModel->rowCount() == 0)
comicsViewsManager->showNoSearchResultsView();
@ -2093,6 +2093,12 @@ void LibraryWindow::setComicSearchFilterData(QList<ComicItem *> *data, const QSt
comicsViewsManager->showComicsView();
}
void LibraryWindow::setFolderSearchFilterData(QMap<unsigned long long, FolderItem *> *filteredItems, FolderItem *root)
{
foldersModelProxy->setFilterData(filteredItems, root);
foldersView->expandAll();
}
void LibraryWindow::clearSearchFilter()
{
foldersModelProxy->clear();