summaryrefslogtreecommitdiffstats
path: root/archivebrowsermodel.cpp
diff options
context:
space:
mode:
authorArno <arno@disconnect.de>2025-05-01 20:12:24 +0200
committerArno <arno@disconnect.de>2025-05-01 20:12:24 +0200
commita45737e852c207d02f1dd06227de7916baa290c1 (patch)
treec1b90eeaad70bf0f249ef9a3b842d182d237d63a /archivebrowsermodel.cpp
parenta3b79646fe6984b0f2203ed9819ba03b0a4db978 (diff)
downloadSheMov-a45737e852c207d02f1dd06227de7916baa290c1.tar.gz
SheMov-a45737e852c207d02f1dd06227de7916baa290c1.tar.bz2
SheMov-a45737e852c207d02f1dd06227de7916baa290c1.zip
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.
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);