summaryrefslogtreecommitdiffstats
path: root/archivebrowsermodel.cpp
diff options
context:
space:
mode:
authorArno <arno@disconnect.de>2025-04-29 11:27:51 +0200
committerArno <arno@disconnect.de>2025-04-29 11:27:51 +0200
commita3b79646fe6984b0f2203ed9819ba03b0a4db978 (patch)
tree4776207df9d1ef77cbe6010a4d47bab8f1f6f60d /archivebrowsermodel.cpp
parent48cc96e4b51706796c119eb953706c61b9c60228 (diff)
downloadSheMov-a3b79646fe6984b0f2203ed9819ba03b0a4db978.tar.gz
SheMov-a3b79646fe6984b0f2203ed9819ba03b0a4db978.tar.bz2
SheMov-a3b79646fe6984b0f2203ed9819ba03b0a4db978.zip
Display Genres in ArchiveBrowser
This takes quite a toll on the startup time, because it executes an extra Query for each item in the archive, but I hope it's worth it. The final goal being to filter the archive by genres, so uninteresting moves can be moved easier.
Diffstat (limited to 'archivebrowsermodel.cpp')
-rw-r--r--archivebrowsermodel.cpp18
1 files changed, 15 insertions, 3 deletions
diff --git a/archivebrowsermodel.cpp b/archivebrowsermodel.cpp
index c6e7d08..da8e316 100644
--- a/archivebrowsermodel.cpp
+++ b/archivebrowsermodel.cpp
@@ -13,7 +13,7 @@
#include "smglobals.h"
#include "helper.h"
-ArchiveBrowserModel::ArchiveBrowserModel(const QStringList &headers, QObject *parent) : SmTreeModel(headers, parent), mNumFields(9) {
+ArchiveBrowserModel::ArchiveBrowserModel(const QStringList &headers, QObject *parent) : SmTreeModel(headers, parent), mNumFields(10) {
mDb = QSqlDatabase::database("treedb");
readConfig();
populate();
@@ -52,6 +52,9 @@ QVariant ArchiveBrowserModel::data(const QModelIndex &index, int role) const {
if(role == SelectedRole){
return item->data(Selected);
}
+ if(role == GenreRole){
+ return item->data(Genres);
+ }
if(role == Qt::ForegroundRole){
if(col == TotalSize){
qint64 s = item->data(TotalSize).toLongLong();
@@ -162,6 +165,8 @@ void ArchiveBrowserModel::populate(){
mAvailableQualities.clear();
QSqlQuery localFilesQ(mDb);
localFilesQ.prepare("SELECT tfilename, bisize, sifiletype, siquality, ifiles_id, cmd5sum FROM files WHERE iseriespart_id = :sid ORDER BY sifiletype");
+ QSqlQuery localGenresQ(mDb);
+ localGenresQ.prepare("SELECT seriesparts_genremap.igenres_id, genres.tgenrename FROM seriesparts_genremap, genres WHERE iseriesparts_id = :sid AND seriesparts_genremap.igenres_id = genres.igenres_id ORDER BY genres.tgenrename ASC");
QSqlQuery localQ = QSqlQuery("SELECT DISTINCT(series.iseries_id), tseries_name, seriesparts.iseriespart, seriesparts.tsubtitle, seriesparts.iseriesparts_id FROM series LEFT JOIN seriesparts ON series.iseries_id = seriesparts.iseries_id LEFT JOIN files ON seriesparts.iseriesparts_id = files.iseriespart_id WHERE files.sifiletype = 1 AND files.idvd < 1 AND seriesparts.bfavorite = false ORDER BY tseries_name ASC", mDb);
while(localQ.next()){
QList<QVariant> serPartData;
@@ -171,16 +176,17 @@ void ArchiveBrowserModel::populate(){
}else{
name = QString("%1 - %2").arg(localQ.value(1).toString(), localQ.value(3).toString());
}
- serPartData << QChar(0x26A4) << name << localQ.value(4) << SeriesPartNode << QVariant() << QVariant() << QVariant() << QString() << false;
+ serPartData << QChar(0x26A4) << name << localQ.value(4) << SeriesPartNode << QVariant() << QVariant() << QVariant() << QString() << false << QVariant();
SmTreeItem *seriesItem = new SmTreeItem(serPartData, rootItem);
rootItem->appendChild(seriesItem);
localFilesQ.bindValue(":sid", localQ.value(4));
localFilesQ.exec();
qint64 totalSize = 0;
int quality = -1;
+ QStringList genres;
while(localFilesQ.next()){
QList<QVariant> fileData;
- fileData << QVariant() << localFilesQ.value(0) << localFilesQ.value(4) << FileNode << localFilesQ.value(1) << localFilesQ.value(3) << localFilesQ.value(2) << Helper::createArchivePath(localFilesQ.value(0).toString(), localFilesQ.value(5).toString()) << false;
+ fileData << QVariant() << localFilesQ.value(0) << localFilesQ.value(4) << FileNode << localFilesQ.value(1) << localFilesQ.value(3) << localFilesQ.value(2) << Helper::createArchivePath(localFilesQ.value(0).toString(), localFilesQ.value(5).toString()) << false << QVariant();
totalSize += localFilesQ.value(1).toDouble();
if(localFilesQ.value(2) == FT_MOVIE){
int q = localFilesQ.value(3).toInt();
@@ -192,8 +198,14 @@ void ArchiveBrowserModel::populate(){
SmTreeItem *fileItem = new SmTreeItem(fileData, seriesItem);
seriesItem->appendChild(fileItem);
}
+ localGenresQ.bindValue(":sid", localQ.value(4));
+ localGenresQ.exec();
+ while(localGenresQ.next()){
+ genres << localGenresQ.value(1).toString();
+ }
seriesItem->setData(Quality, quality);
seriesItem->setData(TotalSize, totalSize);
+ seriesItem->setData(Genres, QVariant(genres));
}
setRoot(rootItem);
emit populated();