summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorArno <am@disconnect.de>2011-05-14 10:32:19 +0200
committerArno <am@disconnect.de>2011-05-14 10:32:19 +0200
commita6a1c319ee5a77cc8341eaeccc72da35cbcf17c5 (patch)
tree83c6cf2403b0eda9c60959d273eaf31599e7099f
parent189dbc38b5a4495553303a705e54eb1c95bc8e52 (diff)
downloadSheMov-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.cpp30
-rw-r--r--seriestreemodel.h7
-rw-r--r--seriestreewidget.cpp2
-rw-r--r--smglobals.cpp2
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);
}