From a45737e852c207d02f1dd06227de7916baa290c1 Mon Sep 17 00:00:00 2001 From: Arno Date: Thu, 1 May 2025 20:12:24 +0200 Subject: Make the genre filter work It works basically, but it could use a few improvements, like filtering out genres which we don't want to archive, and maybe make the size filter work in addition to it. --- archivebrowsermodel.cpp | 29 +++++++++++++++++++++++++++-- 1 file changed, 27 insertions(+), 2 deletions(-) (limited to 'archivebrowsermodel.cpp') diff --git a/archivebrowsermodel.cpp b/archivebrowsermodel.cpp index da8e316..9181d3f 100644 --- a/archivebrowsermodel.cpp +++ b/archivebrowsermodel.cpp @@ -7,6 +7,7 @@ #include #include +#include #include "archivebrowsermodel.h" #include "smtreeitem.h" @@ -201,7 +202,11 @@ void ArchiveBrowserModel::populate(){ localGenresQ.bindValue(":sid", localQ.value(4)); localGenresQ.exec(); while(localGenresQ.next()){ - genres << localGenresQ.value(1).toString(); + QString genre = localGenresQ.value(1).toString(); + genres << genre; + if(!mAvailableGenres.contains(genre)){ + mAvailableGenres << genre; + } } seriesItem->setData(Quality, quality); seriesItem->setData(TotalSize, totalSize); @@ -228,6 +233,16 @@ void ArchiveBrowserModelProxy::setQualityFilter(QString quality){ invalidateFilter(); } +void ArchiveBrowserModelProxy::toggleGenre(QAction *a){ + QString text = a->text(); + if(a->isChecked()){ + mGenreFilters << text; + }else{ + mGenreFilters.removeAll(text); + } + invalidateFilter(); +} + void ArchiveBrowserModelProxy::setSizeFilter(int activate){ mSizeFilter = activate; invalidateFilter(); @@ -240,7 +255,7 @@ void ArchiveBrowserModelProxy::setBytesRemaining(qint64 bytes){ bool ArchiveBrowserModelProxy::filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const { - if(mQuality == -1 && !mSizeFilter){ + if(mQuality == -1 && !mSizeFilter && mGenreFilters.isEmpty()){ return true; } QModelIndex selIdx = sourceModel()->index(sourceRow, ArchiveBrowserModel::Selected, sourceParent); @@ -252,6 +267,16 @@ bool ArchiveBrowserModelProxy::filterAcceptsRow(int sourceRow, const QModelIndex if(nodeType == ArchiveBrowserModel::FileNode){ return true; } + if(!mGenreFilters.isEmpty()){ + QModelIndex genreIdx = sourceModel()->index(sourceRow, ArchiveBrowserModel::Genres, sourceParent); + QStringList genres = genreIdx.data().toStringList(); + for(const QString &fg : std::as_const(mGenreFilters)){ + if(genres.contains(fg)){ + return true; + } + } + return false; + } QModelIndex qualIdx = sourceModel()->index(sourceRow, ArchiveBrowserModel::Quality, sourceParent); int quality = qualIdx.data().toInt(); QModelIndex sizeIdx = sourceModel()->index(sourceRow, ArchiveBrowserModel::TotalSize, sourceParent); -- cgit v1.2.3-70-g09d2