summaryrefslogtreecommitdiffstats
path: root/archivebrowsermodel.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'archivebrowsermodel.cpp')
-rw-r--r--archivebrowsermodel.cpp29
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);