summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--archivemodel.cpp30
-rw-r--r--archivemodel.h3
2 files changed, 31 insertions, 2 deletions
diff --git a/archivemodel.cpp b/archivemodel.cpp
index 3a72ab6..692629d 100644
--- a/archivemodel.cpp
+++ b/archivemodel.cpp
@@ -26,6 +26,7 @@ ArchiveModel::ArchiveModel(const QStringList &headers, QObject *parent) : SmTree
mAvailableOrders.insert("Series Name", SeriesName);
mAvailableOrders.insert("Actor", Actor);
mAvailableOrders.insert("Genre", Genre);
+ mAvailableOrders.insert("Local files", Local);
QSignalMapper *collectorMapper = new QSignalMapper(this);
ArchiveCollector *c1 = new ArchiveCollector(NumFields, SeriesName, this);
connect(c1, SIGNAL(finished()), collectorMapper, SLOT(map()));
@@ -36,8 +37,11 @@ ArchiveModel::ArchiveModel(const QStringList &headers, QObject *parent) : SmTree
ArchiveCollector *c3 = new ArchiveCollector(NumFields, Genre, this);
connect(c3, SIGNAL(finished()), collectorMapper, SLOT(map()));
collectorMapper->setMapping(c3, c3);
+ ArchiveCollector *c4 = new ArchiveCollector(NumFields, Local, this);
+ connect(c4, SIGNAL(finished()), collectorMapper, SLOT(map()));
+ collectorMapper->setMapping(c4, c4);
connect(collectorMapper, SIGNAL(mapped(QObject*)), this, SLOT(collectorFinished(QObject*)));
- mCollectors << c1 << c2 << c3;
+ mCollectors << c1 << c2 << c3 << c4;
connect(this, SIGNAL(needRefresh()), this, SLOT(refresh()));
readConfig();
refresh();
@@ -499,6 +503,8 @@ void ArchiveModel::setOrder(int order) {
SmTreeItem *rootItem = readCache(mOrder);
if(rootItem){
setRoot(rootItem);
+ }else{
+ refresh();
}
setWindowTitle();
}
@@ -644,6 +650,9 @@ const QString ArchiveModel::cacheFile(int o) const{
case SeriesName:
cacheFile.append("seriesname.cache");
break;
+ case Local:
+ cacheFile.append("localfiles.cache");
+ break;
default:
return QString();
}
@@ -904,6 +913,9 @@ void ArchiveCollector::run(){
case ArchiveModel::Actor:
populateByActor();
break;
+ case ArchiveModel::Local:
+ populateByLocal();
+ break;
default:
return;
}
@@ -948,6 +960,19 @@ void ArchiveCollector::populateByActor(){
fetchChildren(mRootItem);
}
+void ArchiveCollector::populateByLocal(){
+ QSqlQuery localQ = QSqlQuery("SELECT DISTINCT(series.iseries_id), tseries_name 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 ORDER BY tseries_name ASC", mDb);
+ while(localQ.next()){
+ QList<QVariant> localIdData;
+ localIdData << localQ.value(1) << localQ.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()){
@@ -1010,6 +1035,9 @@ void ArchiveCollector::fetchParts(const QVariant &id, SmTreeItem *parent){
partsQuery.prepare("SELECT DISTINCT(seriesparts.iseriesparts_id), iseriespart, bfavorite, tsubtitle FROM seriesparts, seriesparts_actormap WHERE iseries_id = :id AND seriesparts.iseriesparts_id = seriesparts_actormap.iseriesparts_id AND seriesparts_actormap.iactors_id = :actorid ORDER BY iseriespart");
partsQuery.bindValue(":id", parent->data(ArchiveModel::GenericId));
partsQuery.bindValue(":actorid", id);
+ }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);
}
partsQuery.exec();
while(partsQuery.next()){
diff --git a/archivemodel.h b/archivemodel.h
index f14dd30..74a2715 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, NoOrder };
+ enum Order { SeriesName, Actor, Genre, Local, NoOrder };
enum { NumFields = 8 };
enum NodeType { SeriesNode = 1, SeriesPartNode = 2, GenreNode = 4, ActorNode = 8, AllNodes = 15 };
explicit ArchiveModel(const QStringList &headers, QObject *parent = 0);
@@ -128,6 +128,7 @@ class ArchiveCollector : public QThread {
void populateBySeriesName();
void populateByGenre();
void populateByActor();
+ void populateByLocal();
void fetchChildren(SmTreeItem *parent);
void fetchSeries(const QVariant &id, SmTreeItem *parent);
void fetchParts(const QVariant &id, SmTreeItem *parent);