diff options
Diffstat (limited to 'archivemodel.cpp')
-rw-r--r-- | archivemodel.cpp | 60 |
1 files changed, 39 insertions, 21 deletions
diff --git a/archivemodel.cpp b/archivemodel.cpp index 3379d67..5c3cb49 100644 --- a/archivemodel.cpp +++ b/archivemodel.cpp @@ -12,14 +12,14 @@ ArchiveModel::ArchiveModel(const QStringList &headers, QObject *parent) : SmTreeModel(headers, parent), mOrder(SeriesName){ mDb = QSqlDatabase::database("treedb"); - mAvailableOrders.insert(SeriesName, "Series Name"); - mAvailableOrders.insert(Actor, "Actor"); - mAvailableOrders.insert(Genre, "Genre"); + mAvailableOrders.insert("Series Name", SeriesName); + mAvailableOrders.insert("Actor", Actor); + mAvailableOrders.insert("Genre", Genre); setOrder(mOrder); } const QStringList ArchiveModel::availableOrders() const { - QStringList retval = mAvailableOrders.values(); + QStringList retval = mAvailableOrders.keys(); qSort(retval); return retval; } @@ -31,7 +31,7 @@ QVariant ArchiveModel::data(const QModelIndex &index, int role) const{ int part = item->data(SeriesPart).toInt(); int childCount = item->data(Count).toInt(); int nodeType = item->data(Type).toInt(); - if(nodeType == SeriesNode){ + if(nodeType == SeriesNode || nodeType == GenreNode || nodeType == ActorNode){ retval = QString("%1 (%2)").arg(item->data(Name).toString()).arg(QString::number(childCount)); }else if(nodeType == SeriesPartNode){ if(part > 0){ @@ -42,6 +42,8 @@ QVariant ArchiveModel::data(const QModelIndex &index, int role) const{ retval = QString("%1 - %2").arg(item->data(Name).toString()).arg(item->data(Subtitle).toString()); } } + }else{ + retval = item->data(Name).toString(); } return retval; } @@ -55,6 +57,7 @@ QVariant ArchiveModel::data(const QModelIndex &index, int role) const{ } void ArchiveModel::setOrder(int order) { + mOrder = order; switch (order) { case SeriesName: populateBySeriesName(); @@ -70,10 +73,18 @@ void ArchiveModel::setOrder(int order) { } } +void ArchiveModel::setOrder(const QString &order){ + int orderNum = mAvailableOrders.value(order); + setOrder(orderNum); +} + void ArchiveModel::populateBySeriesName() { SmTreeItem *rootItem = new SmTreeItem(NumFields); + fetchChildren(rootItem); fetchSeries(QVariant(), rootItem); - fetchParts(rootItem); + for(int i = 0; i < rootItem->childCount(); ++i){ + fetchParts(QVariant(), rootItem->child(i)); + } setRoot(rootItem); } @@ -105,10 +116,10 @@ void ArchiveModel::populateByActor(){ void ArchiveModel::fetchChildren(SmTreeItem *parent){ for(int i = 0; i < parent->childCount(); ++i){ - fetchSeries(parent->child(i)->data(SeriesId), parent->child(i)); + fetchSeries(parent->child(i)->data(GenericId), parent->child(i)); for(int j = 0; j < parent->child(i)->childCount(); ++j){ SmTreeItem *seriesItem = parent->child(i)->child(j); - fetchParts(seriesItem); + fetchParts(parent->child(i)->data(GenericId), seriesItem); } } } @@ -145,19 +156,26 @@ void ArchiveModel::fetchSeries(const QVariant &id, SmTreeItem *parent){ } -void ArchiveModel::fetchParts(SmTreeItem *parent){ +void ArchiveModel::fetchParts(const QVariant &id, SmTreeItem *parent){ QSqlQuery partsQuery(mDb); - partsQuery.prepare("SELECT iseriesparts_id, iseriespart, bfavorite, tsubtitle FROM seriesparts WHERE iseries_id = :id ORDER BY iseriespart"); - for(int i = 0; i < parent->childCount(); ++i){ - QVariant id = parent->child(i)->data(SeriesId); - partsQuery.bindValue(":id", id); - partsQuery.exec(); - while(partsQuery.next()){ - QList<QVariant> partData; - partData << parent->child(i)->data(Name) << parent->child(i)->data(SeriesId) << partsQuery.value(0) << partsQuery.value(1) << SeriesPartNode << partsQuery.value(2) << partsQuery.value(3) << QVariant(); - SmTreeItem *partItem = new SmTreeItem(partData, parent->child(i)); - parent->child(i)->appendChild(partItem); - } - parent->child(i)->setData(Count, parent->child(i)->childCount()); + if(mOrder == SeriesName){ + partsQuery.prepare("SELECT iseriesparts_id, iseriespart, bfavorite, tsubtitle FROM seriesparts WHERE iseries_id = :id ORDER BY iseriespart"); + partsQuery.bindValue(":id", parent->data(GenericId)); + }else if(mOrder == Genre){ + partsQuery.prepare("SELECT seriesparts.iseriesparts_id, iseriespart, bfavorite, tsubtitle FROM seriesparts, seriesparts_genremap WHERE iseries_id = :id AND seriesparts.iseriesparts_id = seriesparts_genremap.iseriesparts_id AND seriesparts_genremap.igenres_id = :genreid ORDER BY iseriespart"); + partsQuery.bindValue(":id", parent->data(GenericId)); + partsQuery.bindValue(":genreid", id); + }else if(mOrder == Actor){ + partsQuery.prepare("SELECT 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(GenericId)); + partsQuery.bindValue(":actorid", id); } + partsQuery.exec(); + while(partsQuery.next()){ + QList<QVariant> partData; + partData << parent->data(Name) << parent->data(GenericId) << partsQuery.value(0) << partsQuery.value(1) << SeriesPartNode << partsQuery.value(2) << partsQuery.value(3) << QVariant(); + SmTreeItem *partItem = new SmTreeItem(partData, parent); + parent->appendChild(partItem); + } + parent->setData(Count, parent->childCount()); } |