summaryrefslogtreecommitdiffstats
path: root/archivemodel.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'archivemodel.cpp')
-rw-r--r--archivemodel.cpp60
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());
}