diff options
author | Arno <am@disconnect.de> | 2011-05-14 10:32:19 +0200 |
---|---|---|
committer | Arno <am@disconnect.de> | 2011-05-14 10:32:19 +0200 |
commit | a6a1c319ee5a77cc8341eaeccc72da35cbcf17c5 (patch) | |
tree | 83c6cf2403b0eda9c60959d273eaf31599e7099f | |
parent | 189dbc38b5a4495553303a705e54eb1c95bc8e52 (diff) | |
download | SheMov-a6a1c319ee5a77cc8341eaeccc72da35cbcf17c5.tar.gz SheMov-a6a1c319ee5a77cc8341eaeccc72da35cbcf17c5.tar.bz2 SheMov-a6a1c319ee5a77cc8341eaeccc72da35cbcf17c5.zip |
Add field isLocal to SeriesTreeModel
Indicate if SeriesPart has local files in SeriesTreeModel. The
cost for this is an additional Query when populating the model,
but fortunately the performance impact isn't noticeable.
Also introduced a new enum NumFields to SeriesTreeModel. It
represents the number of fields for a SmTreeItem so extending
the model isn't that cumbersome any more.
-rw-r--r-- | seriestreemodel.cpp | 30 | ||||
-rw-r--r-- | seriestreemodel.h | 7 | ||||
-rw-r--r-- | seriestreewidget.cpp | 2 | ||||
-rw-r--r-- | smglobals.cpp | 2 |
4 files changed, 30 insertions, 11 deletions
diff --git a/seriestreemodel.cpp b/seriestreemodel.cpp index c091576..ca8e10d 100644 --- a/seriestreemodel.cpp +++ b/seriestreemodel.cpp @@ -48,6 +48,8 @@ SeriesTreeModel::SeriesTreeModel(QStringList &headers, QObject *parent) : SmTree mFavoriteSeriesPartsQuery = new QSqlQuery(mDb); mFavoriteSeriesPartsQuery->prepare("SELECT iseriesparts_id, iseriespart, tsubtitle FROM seriesparts WHERE iseries_id = :id AND bfavorite = true"); mUpdateGenericTemplate = QString("UPDATE seriesparts SET %1 = :value WHERE iseriesparts_id = :id"); + mIsLocalQuery = new QSqlQuery(mDb); + mIsLocalQuery->prepare("SELECT COUNT(*) FROM files WHERE iseriespart_id = :id AND sifiletype = 1 AND idvd = -1"); mUpdateGenericMap.insert(Favorite, "bfavorite"); mUpdateGenericMap.insert(Subtitle, "tsubtitle"); mUpdateGenericMap.insert(SeriesPart, "iseriespart"); @@ -276,6 +278,16 @@ QFileInfoList SeriesTreeModel::findSortedMovies(const QModelIndex &from) const{ return retval; } +bool SeriesTreeModel::hasLocals(int sPartId) const { + bool retval = false; + mIsLocalQuery->bindValue(":id", sPartId); + mIsLocalQuery->exec(); + while(mIsLocalQuery->next()){ + retval = mIsLocalQuery->value(0).toBool(); + } + return retval; +} + int SeriesTreeModel::seriesIdByPartId(int partId){ if(mSeriesPartSeriesMap.contains(partId)){ return mSeriesPartSeriesMap.value(partId); @@ -327,7 +339,7 @@ bool SeriesTreeModel::addSeries(const QVariant &seriesName, const QModelIndex &p if(lastId.next()){ int id = lastId.value(0).toInt(); QList<QVariant> seriesData; - seriesData << name << id << QVariant() << QVariant() << Series << false << QVariant(); + seriesData << name << id << QVariant() << QVariant() << Series << false << QVariant() << QVariant(); if(addRow(seriesData, parent)){ mDb.commit(); return true; @@ -360,7 +372,7 @@ bool SeriesTreeModel::addSeriesPart(int seriesPart, const QModelIndex &parent, c if(lastId.next()){ int id = lastId.value(0).toInt(); QList<QVariant> partData; - partData << parent.data(NameRole) << seriesId << id << seriesPart << Part << false << subTitle; + partData << parent.data(NameRole) << seriesId << id << seriesPart << Part << false << subTitle << true; if(addRow(partData, parent)){ mDb.commit(); mSeriesPartSeriesMap.insert(id, seriesId); @@ -385,7 +397,7 @@ void SeriesTreeModel::setMappingFilter(const QString &filter, const QString &tab if(tableIdQuery.exec()){ mSeriesPartSeriesMap.clear(); QStringList ids; - SmTreeItem *rootItem = new SmTreeItem(7); + SmTreeItem *rootItem = new SmTreeItem(NumFields); while(tableIdQuery.next()){ ids << QString::number(tableIdQuery.value(0).toInt()); } @@ -408,6 +420,7 @@ void SeriesTreeModel::setMappingFilter(const QString &filter, const QString &tab while(partsQuery.next()){ QList<QVariant> partData; partData << seriesData.at(Name) << seriesData.at(SeriesId) << partsQuery.value(0) << partsQuery.value(1) << Part << partsQuery.value(2) << partsQuery.value(3); + partData << hasLocals(partsQuery.value(0).toInt()); SmTreeItem *partItem = new SmTreeItem(partData, seriesItem); seriesItem->appendChild(partItem); mSeriesPartSeriesMap.insert(partsQuery.value(0).toInt(), seriesData.at(1).toInt()); @@ -443,7 +456,7 @@ void SeriesTreeModel::setFileFilter(const QString &filter, const QString &column } if(seriesIdQuery.exec()){ mSeriesPartSeriesMap.clear(); - SmTreeItem *rootItem = new SmTreeItem(7); + SmTreeItem *rootItem = new SmTreeItem(NumFields); while(seriesIdQuery.next()){ QList<QVariant> seriesData; seriesData << seriesIdQuery.value(1) << seriesIdQuery.value(0) << QVariant() << QVariant() << Series << false << QVariant(); @@ -464,6 +477,7 @@ void SeriesTreeModel::setFileFilter(const QString &filter, const QString &column while(partsQuery.next()){ QList<QVariant> partData; partData << seriesData.at(Name) << seriesData.at(SeriesId) << partsQuery.value(0) << partsQuery.value(1) << Part << partsQuery.value(2) << partsQuery.value(3); + partData << hasLocals(partsQuery.value(0).toInt()); SmTreeItem *partItem = new SmTreeItem(partData, seriesItem); seriesItem->appendChild(partItem); mSeriesPartSeriesMap.insert(partsQuery.value(0).toInt(), seriesData.at(1).toInt()); @@ -477,7 +491,7 @@ void SeriesTreeModel::setFileFilter(const QString &filter, const QString &column void SeriesTreeModel::setFavoriteFilter(){ if(mFavoriteSeriesIdQuery->exec()){ mSeriesPartSeriesMap.clear(); - SmTreeItem *rootItem = new SmTreeItem(7); + SmTreeItem *rootItem = new SmTreeItem(NumFields); while(mFavoriteSeriesIdQuery->next()){ QList<QVariant> seriesData; seriesData << mFavoriteSeriesIdQuery->value(1) << mFavoriteSeriesIdQuery->value(0) << QVariant() << QVariant() << Series << false << QVariant(); @@ -488,6 +502,7 @@ void SeriesTreeModel::setFavoriteFilter(){ while(mFavoriteSeriesPartsQuery->next()){ QList<QVariant> partData; partData << seriesData.at(Name) << seriesData.at(SeriesId) << mFavoriteSeriesPartsQuery->value(0) << mFavoriteSeriesPartsQuery->value(1) << Part << true << mFavoriteSeriesPartsQuery->value(2); + partData << hasLocals(mFavoriteSeriesPartsQuery->value(0).toInt()); SmTreeItem *partItem = new SmTreeItem(partData, seriesItem); seriesItem->appendChild(partItem); mSeriesPartSeriesMap.insert(mFavoriteSeriesPartsQuery->value(0).toInt(), seriesData.at(1).toInt()); @@ -527,10 +542,10 @@ void SeriesTreeModel::conditionalUpdate(const QModelIndex &parent, int field, co void SeriesTreeModel::populate(){ QSqlQuery seriesQuery = QSqlQuery("SELECT iseries_id, tseries_name FROM series ORDER BY tseries_name", mDb); mSeriesPartSeriesMap.clear(); - SmTreeItem *rootItem = new SmTreeItem(7); + SmTreeItem *rootItem = new SmTreeItem(NumFields); while(seriesQuery.next()){ QList<QVariant> seriesData; - seriesData << seriesQuery.value(1) << seriesQuery.value(0) << QVariant() << QVariant() << Series << false << QVariant(); + seriesData << seriesQuery.value(1) << seriesQuery.value(0) << QVariant() << QVariant() << Series << false << QVariant() << QVariant(); SmTreeItem *seriesItem = new SmTreeItem(seriesData, rootItem); rootItem->appendChild(seriesItem); mSeriesPartsQuery->bindValue(":id", seriesData.at(1)); @@ -538,6 +553,7 @@ void SeriesTreeModel::populate(){ while(mSeriesPartsQuery->next()){ QList<QVariant> partData; partData << seriesData.at(Name) << seriesData.at(SeriesId) << mSeriesPartsQuery->value(0) << mSeriesPartsQuery->value(1) << Part << mSeriesPartsQuery->value(2) << mSeriesPartsQuery->value(3); + partData << hasLocals(seriesData.at(1).toInt()); SmTreeItem *partItem = new SmTreeItem(partData, seriesItem); seriesItem->appendChild(partItem); mSeriesPartSeriesMap.insert(mSeriesPartsQuery->value(0).toInt(), seriesData.at(1).toInt()); diff --git a/seriestreemodel.h b/seriestreemodel.h index 8488cd7..348ff2c 100644 --- a/seriestreemodel.h +++ b/seriestreemodel.h @@ -20,10 +20,11 @@ class QSqlQuery; class SeriesTreeModel : public SmTreeModel { Q_OBJECT public: - enum CustomRoles { NameRole = Qt::UserRole + 1, SeriesIdRole = Qt::UserRole + 2, SeriesPartIdRole = Qt::UserRole + 3, SeriesPartRole = Qt::UserRole + 4, TypeRole = Qt::UserRole + 5, FavoriteRole = Qt::UserRole + 6, SubtitleRole = Qt::UserRole + 7 }; - enum Fields { Name = 0, SeriesId = 1, SeriesPartId = 2, SeriesPart = 3, Type = 4, Favorite = 5, Subtitle = 6 }; + enum CustomRoles { NameRole = Qt::UserRole + 1, SeriesIdRole = Qt::UserRole + 2, SeriesPartIdRole = Qt::UserRole + 3, SeriesPartRole = Qt::UserRole + 4, TypeRole = Qt::UserRole + 5, FavoriteRole = Qt::UserRole + 6, SubtitleRole = Qt::UserRole + 7, IsLocalRole = Qt::UserRole + 8 }; + enum Fields { Name = 0, SeriesId = 1, SeriesPartId = 2, SeriesPart = 3, Type = 4, Favorite = 5, Subtitle = 6, IsLocal = 7 }; enum Types { Series, Part, NewSeries }; enum QueryType { NumericQuery, TextQuery }; + enum { NumFields = 8 }; explicit SeriesTreeModel(QStringList &headers, QObject *parent = 0); ~SeriesTreeModel(); @@ -38,6 +39,7 @@ class SeriesTreeModel : public SmTreeModel { QFileInfoList findFiles(const QModelIndex &where) const; QFileInfoList findMovies(const QModelIndexList &from) const; QFileInfoList findSortedMovies(const QModelIndex &from) const; + bool hasLocals(int sPartId) const; int seriesIdByPartId(int partId); int findNextDvdNo() const; @@ -86,6 +88,7 @@ class SeriesTreeModel : public SmTreeModel { QSqlQuery *mGenreFilterQuery; QSqlQuery *mFavoriteSeriesIdQuery; QSqlQuery *mFavoriteSeriesPartsQuery; + QSqlQuery *mIsLocalQuery; QHash<int, int> mSeriesPartSeriesMap; QHash<int, QString> mUpdateGenericMap; QColor mFavoriteColor; diff --git a/seriestreewidget.cpp b/seriestreewidget.cpp index e57905f..dd986b3 100644 --- a/seriestreewidget.cpp +++ b/seriestreewidget.cpp @@ -70,7 +70,7 @@ SeriesTreeWidget::SeriesTreeWidget(QWidget *parent) : QWidget(parent){ mProxy->setSourceModel(mModel); mView->setModel(mProxy); mView->setSortingEnabled(true); - for(int i = 1; i < 7; ++i){ + for(int i = 1; i < SeriesTreeModel::NumFields; ++i){ mView->setColumnHidden(i, true); } mView->resizeColumnToContents(0); diff --git a/smglobals.cpp b/smglobals.cpp index 0ee07c5..15147da 100644 --- a/smglobals.cpp +++ b/smglobals.cpp @@ -58,7 +58,7 @@ SmGlobals *SmGlobals::instance(){ QAbstractItemModel *SmGlobals::model(const QString &which){ if(which == "SeriesModel"){ if(!mModels.contains(which)){ - QStringList headers = QStringList() << tr("Series") << tr("Series ID") << tr("Series part ID") << tr("Part") << tr("Type") << tr("Favorite") << tr("Subtitle"); + QStringList headers = QStringList() << tr("Series") << tr("Series ID") << tr("Series part ID") << tr("Part") << tr("Type") << tr("Favorite") << tr("Subtitle") << tr("Is Local"); SeriesTreeModel *model = new SeriesTreeModel(headers); mModels.insert(which, model); } |