diff options
Diffstat (limited to 'archivebrowsermodel.cpp')
-rw-r--r-- | archivebrowsermodel.cpp | 29 |
1 files changed, 27 insertions, 2 deletions
diff --git a/archivebrowsermodel.cpp b/archivebrowsermodel.cpp index da8e316..9181d3f 100644 --- a/archivebrowsermodel.cpp +++ b/archivebrowsermodel.cpp @@ -7,6 +7,7 @@ #include <QSqlDatabase> #include <QSqlQuery> +#include <QAction> #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); |