summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--archivemodel.cpp28
-rw-r--r--archivemodel.h3
2 files changed, 29 insertions, 2 deletions
diff --git a/archivemodel.cpp b/archivemodel.cpp
index 774265f..940f18f 100644
--- a/archivemodel.cpp
+++ b/archivemodel.cpp
@@ -27,6 +27,7 @@ ArchiveModel::ArchiveModel(const QStringList &headers, QObject *parent) : SmTree
mAvailableOrders.insert("Actor", Actor);
mAvailableOrders.insert("Genre", Genre);
mAvailableOrders.insert("Local files", Local);
+ mAvailableOrders.insert("Favorites", FavoriteOrder);
QSignalMapper *collectorMapper = new QSignalMapper(this);
ArchiveCollector *c1 = new ArchiveCollector(NumFields, SeriesName, this);
connect(c1, SIGNAL(finished()), collectorMapper, SLOT(map()));
@@ -40,8 +41,11 @@ ArchiveModel::ArchiveModel(const QStringList &headers, QObject *parent) : SmTree
ArchiveCollector *c4 = new ArchiveCollector(NumFields, Local, this);
connect(c4, SIGNAL(finished()), collectorMapper, SLOT(map()));
collectorMapper->setMapping(c4, c4);
+ ArchiveCollector *c5 = new ArchiveCollector(NumFields, FavoriteOrder, this);
+ connect(c5, SIGNAL(finished()), collectorMapper, SLOT(map()));
+ collectorMapper->setMapping(c5, c5);
connect(collectorMapper, SIGNAL(mapped(QObject*)), this, SLOT(collectorFinished(QObject*)));
- mCollectors << c1 << c2 << c3 << c4;
+ mCollectors << c1 << c2 << c3 << c4 << c5;
connect(this, SIGNAL(needRefresh()), this, SLOT(refresh()));
readConfig();
refresh();
@@ -689,6 +693,9 @@ const QString ArchiveModel::cacheFile(int o) const{
case Local:
cacheFile.append("localfiles.cache");
break;
+ case FavoriteOrder:
+ cacheFile.append("favorite.cache");
+ break;
default:
return QString();
}
@@ -964,6 +971,9 @@ void ArchiveCollector::run(){
case ArchiveModel::Local:
populateByLocal();
break;
+ case ArchiveModel::FavoriteOrder:
+ populateByFavorite();
+ break;
default:
return;
}
@@ -1021,6 +1031,19 @@ void ArchiveCollector::populateByLocal(){
}
}
+void ArchiveCollector::populateByFavorite(){
+ QSqlQuery favQ = QSqlQuery("SELECT distinct(series.iseries_id), tseries_name FROM series LEFT JOIN seriesparts ON series.iseries_id = seriesparts.iseries_id WHERE seriesparts.bfavorite = true ORDER BY tseries_name ASC", mDb);
+ while(favQ.next()){
+ QList<QVariant> localIdData;
+ localIdData << favQ.value(1) << favQ.value(0) << QVariant() << QVariant() << ArchiveModel::SeriesNode << false << QVariant() << QVariant();
+ SmTreeItem *localIdItem = new SmTreeItem(localIdData, mRootItem);
+ mRootItem->appendChild(localIdItem);
+ }
+ for(int i = 0; i < mRootItem->childCount(); ++i){
+ fetchParts(mRootItem->child(i)->data(ArchiveModel::GenericId), mRootItem->child(i));
+ }
+}
+
void ArchiveCollector::fetchChildren(SmTreeItem *parent){
for(int i = 0; i < parent->childCount(); ++i){
if(checkCancelled()){
@@ -1085,6 +1108,9 @@ void ArchiveCollector::fetchParts(const QVariant &id, SmTreeItem *parent){
}else if(mSortOrder == ArchiveModel::Local){
partsQuery.prepare("SELECT DISTINCT(seriesparts.iseriesparts_id), iseriespart, bfavorite, tsubtitle FROM seriesparts LEFT JOIN files ON files.iseriespart_id = seriesparts.iseriesparts_id WHERE iseries_id = :seriesid AND files.idvd < 1 AND files.sifiletype = 1");
partsQuery.bindValue(":seriesid", id);
+ }else if(mSortOrder == ArchiveModel::FavoriteOrder){
+ partsQuery.prepare("SELECT DISTINCT(iseriesparts_id), iseriespart, bfavorite, tsubtitle FROM seriesparts WHERE iseries_id = :seriesid and bfavorite = true");
+ partsQuery.bindValue(":seriesid", id);
}
partsQuery.exec();
while(partsQuery.next()){
diff --git a/archivemodel.h b/archivemodel.h
index e4ed513..de79af6 100644
--- a/archivemodel.h
+++ b/archivemodel.h
@@ -26,7 +26,7 @@ class ArchiveModel : public SmTreeModel {
enum Fields { Name = 0, GenericId = 1, SeriesPartId = 2, SeriesPart = 3, Type = 4, Favorite = 5, Subtitle = 6, Count = 7 };
enum MetadataFields { ReleaseYear = 0, Source = 1, Subject = 2, ReleaseGroup = 3, EncoderOpts = 4, Comment = 5, Passes = 6, Added = 7 };
enum { MetadataNumFields = 8 };
- enum Order { SeriesName, Actor, Genre, Local, NoOrder };
+ enum Order { SeriesName, Actor, Genre, Local, FavoriteOrder, NoOrder };
enum { NumFields = 8 };
enum NodeType { SeriesNode = 1, SeriesPartNode = 2, GenreNode = 4, ActorNode = 8, AllNodes = 15 };
explicit ArchiveModel(const QStringList &headers, QObject *parent = 0);
@@ -133,6 +133,7 @@ class ArchiveCollector : public QThread {
void populateByGenre();
void populateByActor();
void populateByLocal();
+ void populateByFavorite();
void fetchChildren(SmTreeItem *parent);
void fetchSeries(const QVariant &id, SmTreeItem *parent);
void fetchParts(const QVariant &id, SmTreeItem *parent);