diff options
Diffstat (limited to 'archivemodel.cpp')
-rw-r--r-- | archivemodel.cpp | 30 |
1 files changed, 29 insertions, 1 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()){ |