diff options
author | Arno <am@disconnect.de> | 2011-05-07 09:38:40 +0200 |
---|---|---|
committer | Arno <am@disconnect.de> | 2011-05-07 09:38:40 +0200 |
commit | 25bd284eec824853e211c84861de4246ffbf6d3a (patch) | |
tree | e83c892a36a24d943006231201623b0b6d767060 /seriestreemodel.cpp | |
parent | 3cd7ca9ef0f2191ed0fe609c192c627430a07883 (diff) | |
download | SheMov-25bd284eec824853e211c84861de4246ffbf6d3a.tar.gz SheMov-25bd284eec824853e211c84861de4246ffbf6d3a.tar.bz2 SheMov-25bd284eec824853e211c84861de4246ffbf6d3a.zip |
Implement additional title element for seriesparts
Series parts can now have an additional title elemet, the so
called subtitle. Obviously that's not really a good name but it's
the best I could come up with :)
Diffstat (limited to 'seriestreemodel.cpp')
-rw-r--r-- | seriestreemodel.cpp | 52 |
1 files changed, 30 insertions, 22 deletions
diff --git a/seriestreemodel.cpp b/seriestreemodel.cpp index 3a3379b..b3c9a34 100644 --- a/seriestreemodel.cpp +++ b/seriestreemodel.cpp @@ -20,7 +20,7 @@ SeriesTreeModel::SeriesTreeModel(QStringList &headers, QObject *parent) : SmTreeModel(headers, parent){ mDb = QSqlDatabase::database("treedb"); mSeriesPartsQuery = new QSqlQuery(mDb); - mSeriesPartsQuery->prepare("SELECT iseriesparts_id, iseriespart, bfavorite FROM seriesparts WHERE iseries_id = :id ORDER BY iseriespart"); + mSeriesPartsQuery->prepare("SELECT iseriesparts_id, iseriespart, bfavorite, tsubtitle FROM seriesparts WHERE iseries_id = :id ORDER BY iseriespart"); mUpdateSeriesIdQuery = new QSqlQuery(mDb); mUpdateSeriesIdQuery->prepare("UPDATE seriesparts SET iseries_id = :newid WHERE iseries_id = :oldid"); mUpdateSeriesNameQuery = new QSqlQuery(mDb); @@ -38,7 +38,7 @@ SeriesTreeModel::SeriesTreeModel(QStringList &headers, QObject *parent) : SmTree mSeriesPartFilesQuery = new QSqlQuery(mDb); mSeriesPartFilesQuery->prepare("SELECT files.tfilename, files.cmd5sum FROM seriesparts, files WHERE seriesparts.iseriesparts_id = :id AND seriesparts.iseriesparts_id = files.iseriespart_id"); mSeriesPartInsertQuery = new QSqlQuery(mDb); - mSeriesPartInsertQuery->prepare("INSERT INTO seriesparts(iseriespart, iseries_id) VALUES(:part, :id)"); + mSeriesPartInsertQuery->prepare("INSERT INTO seriesparts(iseriespart, iseries_id, tsubtitle) VALUES(:part, :id, :subtitle)"); mSortedMovieListQuery = new QSqlQuery(mDb); mSortedMovieListQuery->prepare("SELECT files.tfilename, files.cmd5sum FROM series, seriesparts, files WHERE series.iseries_id = :id AND seriesparts.iseries_id = series.iseries_id AND seriesparts.iseriesparts_id = files.iseriespart_id AND files.sifiletype = 1 ORDER BY seriesparts.iseriespart, files.sifileno"); mNextDvdNoQuery = new QSqlQuery(mDb); @@ -48,7 +48,7 @@ SeriesTreeModel::SeriesTreeModel(QStringList &headers, QObject *parent) : SmTree mFavoriteSeriesIdQuery = new QSqlQuery(mDb); mFavoriteSeriesIdQuery->prepare("SELECT DISTINCT(series.iseries_id), series.tseries_name FROM series, seriesparts WHERE seriesparts.bfavorite = true and seriesparts.iseries_id = series.iseries_id"); mFavoriteSeriesPartsQuery = new QSqlQuery(mDb); - mFavoriteSeriesPartsQuery->prepare("SELECT iseriesparts_id, iseriespart FROM seriesparts WHERE iseries_id = :id AND bfavorite = true"); + mFavoriteSeriesPartsQuery->prepare("SELECT iseriesparts_id, iseriespart, tsubtitle FROM seriesparts WHERE iseries_id = :id AND bfavorite = true"); populate(); } @@ -95,7 +95,14 @@ QVariant SeriesTreeModel::data(const QModelIndex &index, int role) const{ if(type == Series || type == NewSeries){ return item->data(Name); }else if(type == Part){ - QString retval = QString("%1 %2").arg(item->data(Name).toString()).arg(item->data(SeriesPart).toInt()); + QString retval = item->data(Name).toString(); + if(item->data(SeriesPart).toInt() > 0){ + retval = QString("%1 %2").arg(retval).arg(item->data(SeriesPart).toInt()); + } + QString subtitle = item->data(Subtitle).toString(); + if(!subtitle.isEmpty()){ + retval = QString("%1 - %2").arg(retval).arg(subtitle); + } return retval; }else{ return QVariant(); @@ -316,7 +323,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; + seriesData << name << id << QVariant() << QVariant() << Series << false << QVariant(); if(addRow(seriesData, parent)){ mDb.commit(); return true; @@ -327,7 +334,7 @@ bool SeriesTreeModel::addSeries(const QVariant &seriesName, const QModelIndex &p return false; } -bool SeriesTreeModel::addSeriesPart(int seriesPart, const QModelIndex &parent){ +bool SeriesTreeModel::addSeriesPart(int seriesPart, const QModelIndex &parent, const QString &subTitle){ if(!parent.isValid() || parent.data(TypeRole) != Series){ return false; } @@ -335,12 +342,13 @@ bool SeriesTreeModel::addSeriesPart(int seriesPart, const QModelIndex &parent){ mDb.transaction(); mSeriesPartInsertQuery->bindValue(":part", seriesPart); mSeriesPartInsertQuery->bindValue(":id", seriesId); + mSeriesPartInsertQuery->bindValue(":subtitle", subTitle.toLower()); if(mSeriesPartInsertQuery->exec()){ QSqlQuery lastId("SELECT currval('seriesparts_seriesparts_id__seq')", mDb); if(lastId.next()){ int id = lastId.value(0).toInt(); QList<QVariant> partData; - partData << parent.data(NameRole) << seriesId << id << seriesPart << Part << false; + partData << parent.data(NameRole) << seriesId << id << seriesPart << Part << false << subTitle; if(addRow(partData, parent)){ mDb.commit(); mSeriesPartSeriesMap.insert(id, seriesId); @@ -365,19 +373,19 @@ void SeriesTreeModel::setMappingFilter(const QString &filter, const QString &tab if(tableIdQuery.exec()){ mSeriesPartSeriesMap.clear(); QStringList ids; - SmTreeItem *rootItem = new SmTreeItem(6); + SmTreeItem *rootItem = new SmTreeItem(7); while(tableIdQuery.next()){ ids << QString::number(tableIdQuery.value(0).toInt()); } if(ids.isEmpty()){ return; } - QString seriesPartsTemplate("SELECT DISTINCT(seriesparts.iseriesparts_id), seriesparts.iseriespart, seriesparts.bfavorite FROM seriesparts, seriesparts_%1map WHERE seriesparts.iseries_id = :id AND seriesparts_%1map.iseriesparts_id = seriesparts.iseriesparts_id AND seriesparts_%1map.i%1s_id IN (%2) ORDER BY iseriespart"); + QString seriesPartsTemplate("SELECT DISTINCT(seriesparts.iseriesparts_id), seriesparts.iseriespart, seriesparts.bfavorite, seriesparts.tsubtitle FROM seriesparts, seriesparts_%1map WHERE seriesparts.iseries_id = :id AND seriesparts_%1map.iseriesparts_id = seriesparts.iseriesparts_id AND seriesparts_%1map.i%1s_id IN (%2) ORDER BY iseriespart"); QString seriesIdTemplate = QString("SELECT DISTINCT(series.iseries_id), series.tseries_name FROM series, seriesparts, seriesparts_%1map, %1s WHERE %1s.i%1s_id IN (%2) AND %1s.i%1s_id = seriesparts_%1map.i%1s_id AND seriesparts_%1map.iseriesparts_id = seriesparts.iseriesparts_id AND seriesparts.iseries_id = series.iseries_id ORDER BY series.tseries_name").arg(table).arg(ids.join(",")); QSqlQuery seriesIdQuery(seriesIdTemplate, mDb); while(seriesIdQuery.next()){ QList<QVariant> seriesData; - seriesData << seriesIdQuery.value(1) << seriesIdQuery.value(0) << QVariant() << QVariant() << Series << false; + seriesData << seriesIdQuery.value(1) << seriesIdQuery.value(0) << QVariant() << QVariant() << Series << false << QVariant(); SmTreeItem *seriesItem = new SmTreeItem(seriesData, rootItem); rootItem->appendChild(seriesItem); QString partsQueryString = seriesPartsTemplate.arg(table).arg(ids.join(",")); @@ -387,7 +395,7 @@ void SeriesTreeModel::setMappingFilter(const QString &filter, const QString &tab partsQuery.exec(); while(partsQuery.next()){ QList<QVariant> partData; - partData << seriesData.at(Name) << seriesData.at(SeriesId) << partsQuery.value(0) << partsQuery.value(1) << Part << partsQuery.value(2); + partData << seriesData.at(Name) << seriesData.at(SeriesId) << partsQuery.value(0) << partsQuery.value(1) << Part << partsQuery.value(2) << partsQuery.value(3); SmTreeItem *partItem = new SmTreeItem(partData, seriesItem); seriesItem->appendChild(partItem); mSeriesPartSeriesMap.insert(partsQuery.value(0).toInt(), seriesData.at(1).toInt()); @@ -407,7 +415,7 @@ void SeriesTreeModel::setFileFilter(const QString &filter, const QString &column seriesIdQuery.prepare(idQueryTemplate); value = QString("%%1%").arg(filter); seriesIdQuery.bindValue(":value", value); - partsQueryTemplate = QString("SELECT DISTINCT(seriesparts.iseriesparts_id), seriesparts.iseriespart, seriesparts.bfavorite FROM seriesparts, series, files WHERE series.iseries_id = :id AND series.iseries_id = seriesparts.iseries_id AND seriesparts.iseriesparts_id = files.iseriespart_id AND files.%1 LIKE :value"); + partsQueryTemplate = QString("SELECT DISTINCT(seriesparts.iseriesparts_id), seriesparts.iseriespart, seriesparts.bfavorite, seriesparts.tsubtitle FROM seriesparts, series, files WHERE series.iseries_id = :id AND series.iseries_id = seriesparts.iseries_id AND seriesparts.iseriesparts_id = files.iseriespart_id AND files.%1 LIKE :value"); }else if(queryType == NumericQuery){ QRegExp valRe("([<>=]?)\\s*(\\d+)\\s*(\\w*)"); (void)valRe.indexIn(value.toString()); @@ -417,16 +425,16 @@ void SeriesTreeModel::setFileFilter(const QString &filter, const QString &column QString idQueryTemplate = QString("SELECT DISTINCT(series.iseries_id), series.tseries_name FROM series, seriesparts, files WHERE files.%1 %2 :value AND files.iseriespart_id = seriesparts.iseriesparts_id AND seriesparts.iseries_id = series.iseries_id ORDER BY series.tseries_name").arg(column).arg(op); seriesIdQuery.prepare(idQueryTemplate); seriesIdQuery.bindValue(":value", value); - partsQueryTemplate = QString("SELECT DISTINCT(seriesparts.iseriesparts_id), seriesparts.iseriespart, seriesparts.bfavorite FROM seriesparts, series, files WHERE series.iseries_id = :id AND series.iseries_id = seriesparts.iseries_id AND seriesparts.iseriesparts_id = files.iseriespart_id AND files.%1 %2 :value"); + partsQueryTemplate = QString("SELECT DISTINCT(seriesparts.iseriesparts_id), seriesparts.iseriespart, seriesparts.bfavorite, seriesparts.tsubtitle FROM seriesparts, series, files WHERE series.iseries_id = :id AND series.iseries_id = seriesparts.iseries_id AND seriesparts.iseriesparts_id = files.iseriespart_id AND files.%1 %2 :value"); }else{ return; } if(seriesIdQuery.exec()){ mSeriesPartSeriesMap.clear(); - SmTreeItem *rootItem = new SmTreeItem(6); + SmTreeItem *rootItem = new SmTreeItem(7); while(seriesIdQuery.next()){ QList<QVariant> seriesData; - seriesData << seriesIdQuery.value(1) << seriesIdQuery.value(0) << QVariant() << QVariant() << Series << false; + seriesData << seriesIdQuery.value(1) << seriesIdQuery.value(0) << QVariant() << QVariant() << Series << false << QVariant(); SmTreeItem *seriesItem = new SmTreeItem(seriesData, rootItem); rootItem->appendChild(seriesItem); QString partsQueryString; @@ -443,7 +451,7 @@ void SeriesTreeModel::setFileFilter(const QString &filter, const QString &column if(partsQuery.exec()){ while(partsQuery.next()){ QList<QVariant> partData; - partData << seriesData.at(Name) << seriesData.at(SeriesId) << partsQuery.value(0) << partsQuery.value(1) << Part << partsQuery.value(2); + partData << seriesData.at(Name) << seriesData.at(SeriesId) << partsQuery.value(0) << partsQuery.value(1) << Part << partsQuery.value(2) << partsQuery.value(3); SmTreeItem *partItem = new SmTreeItem(partData, seriesItem); seriesItem->appendChild(partItem); mSeriesPartSeriesMap.insert(partsQuery.value(0).toInt(), seriesData.at(1).toInt()); @@ -457,17 +465,17 @@ void SeriesTreeModel::setFileFilter(const QString &filter, const QString &column void SeriesTreeModel::setFavoriteFilter(){ if(mFavoriteSeriesIdQuery->exec()){ mSeriesPartSeriesMap.clear(); - SmTreeItem *rootItem = new SmTreeItem(6); + SmTreeItem *rootItem = new SmTreeItem(7); while(mFavoriteSeriesIdQuery->next()){ QList<QVariant> seriesData; - seriesData << mFavoriteSeriesIdQuery->value(1) << mFavoriteSeriesIdQuery->value(0) << QVariant() << QVariant() << Series << false; + seriesData << mFavoriteSeriesIdQuery->value(1) << mFavoriteSeriesIdQuery->value(0) << QVariant() << QVariant() << Series << false << QVariant(); SmTreeItem *seriesItem = new SmTreeItem(seriesData, rootItem); rootItem->appendChild(seriesItem); mFavoriteSeriesPartsQuery->bindValue(":id", seriesData.at(1)); if(mFavoriteSeriesPartsQuery->exec()){ while(mFavoriteSeriesPartsQuery->next()){ QList<QVariant> partData; - partData << seriesData.at(Name) << seriesData.at(SeriesId) << mFavoriteSeriesPartsQuery->value(0) << mFavoriteSeriesPartsQuery->value(1) << Part << true; + partData << seriesData.at(Name) << seriesData.at(SeriesId) << mFavoriteSeriesPartsQuery->value(0) << mFavoriteSeriesPartsQuery->value(1) << Part << true << mFavoriteSeriesPartsQuery->value(2); SmTreeItem *partItem = new SmTreeItem(partData, seriesItem); seriesItem->appendChild(partItem); mSeriesPartSeriesMap.insert(mFavoriteSeriesPartsQuery->value(0).toInt(), seriesData.at(1).toInt()); @@ -507,17 +515,17 @@ 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(6); + SmTreeItem *rootItem = new SmTreeItem(7); while(seriesQuery.next()){ QList<QVariant> seriesData; - seriesData << seriesQuery.value(1) << seriesQuery.value(0) << QVariant() << QVariant() << Series << false; + seriesData << seriesQuery.value(1) << seriesQuery.value(0) << QVariant() << QVariant() << Series << false << QVariant(); SmTreeItem *seriesItem = new SmTreeItem(seriesData, rootItem); rootItem->appendChild(seriesItem); mSeriesPartsQuery->bindValue(":id", seriesData.at(1)); mSeriesPartsQuery->exec(); while(mSeriesPartsQuery->next()){ QList<QVariant> partData; - partData << seriesData.at(Name) << seriesData.at(SeriesId) << mSeriesPartsQuery->value(0) << mSeriesPartsQuery->value(1) << Part << mSeriesPartsQuery->value(2); + partData << seriesData.at(Name) << seriesData.at(SeriesId) << mSeriesPartsQuery->value(0) << mSeriesPartsQuery->value(1) << Part << mSeriesPartsQuery->value(2) << mSeriesPartsQuery->value(3); SmTreeItem *partItem = new SmTreeItem(partData, seriesItem); seriesItem->appendChild(partItem); mSeriesPartSeriesMap.insert(mSeriesPartsQuery->value(0).toInt(), seriesData.at(1).toInt()); |