diff options
Diffstat (limited to 'moviemodel.cpp')
-rw-r--r-- | moviemodel.cpp | 397 |
1 files changed, 0 insertions, 397 deletions
diff --git a/moviemodel.cpp b/moviemodel.cpp deleted file mode 100644 index c77172d..0000000 --- a/moviemodel.cpp +++ /dev/null @@ -1,397 +0,0 @@ -/* - This program is free software; you can redistribute it and/or - modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version - 2 of the License, or (at your option) any later version. -*/ - -#include <QSqlQuery> -#include <QStringList> -#include <QIcon> -#include <QSettings> - -#include "moviemodel.h" -#include "coveritem.h" - -MovieModel::MovieModel(QObject *parent) : QAbstractItemModel(parent) { - mHeaders << tr("Title") << tr("Filename") << tr("MD5Sum") << tr("Size") << tr("Genre") << tr("Quality") << tr("Archived"); - mInsertQuery = new QSqlQuery; - mInsertQuery->prepare("SELECT insert_movie(:title, :filename, :md5, :filesize, :genre, :quality, :dvd, :seriesno, :partno)"); - mDeleteQuery = new QSqlQuery; - mDeleteQuery->prepare("DELETE FROM movies WHERE imovid = :id"); - mDeleteActorsForMovie = new QSqlQuery; - mDeleteActorsForMovie->prepare("DELETE FROM movieactormap WHERE imovid = :id"); - mInsertActorsForMovie = new QSqlQuery; - mInsertActorsForMovie->prepare("INSERT INTO movieactormap VALUES(:movid, :actorid)"); - mDeleteCovers = new QSqlQuery; - mDeleteCovers->prepare("DELETE FROM covers WHERE imovid = :id"); - mInsertCovers = new QSqlQuery; - mInsertCovers->prepare("INSERT INTO covers VALUES(:filename, :movid, :covertype, :md5sum)"); - mOtherPartsQuery = new QSqlQuery; - mOtherPartsQuery->prepare("SELECT imovid FROM movies WHERE ttitle = :title AND iseriesno = :seriesno AND imovid != :id"); - QSqlQuery *c1 = new QSqlQuery; - c1->prepare("UPDATE movies SET ttitle = :value WHERE imovid = :id"); - mColumnQueries << c1; - QSqlQuery *c2 = new QSqlQuery; - c2->prepare("UPDATE movies SET tfilename = :value WHERE imovid = :id"); - mColumnQueries << c2; - QSqlQuery *c3 = new QSqlQuery; - c3->prepare("UPDATE movies SET cmd5sum = :value WHERE imovid = :id"); - mColumnQueries << c3; - QSqlQuery *c4 = new QSqlQuery; - c4->prepare("UPDATE movies SET bisize = :value WHERE imovid = :id"); - mColumnQueries << c4; - QSqlQuery *c5 = new QSqlQuery; - c5->prepare("UPDATE movies SET igenreid = :value WHERE imovid = :id"); - mColumnQueries << c5; - QSqlQuery *c6 = new QSqlQuery; - c6->prepare("UPDATE movies SET iquality = :value WHERE imovid = :id"); - mColumnQueries << c6; - QSqlQuery *c7 = new QSqlQuery; - c7->prepare("UPDATE movies SET idvd = :value WHERE imovid = :id"); - mColumnQueries << c7; - QSqlQuery *c8 = new QSqlQuery; - c8->prepare("UPDATE movies SET iseriesno = :value WHERE imovid = :id"); - mColumnQueries << c8; - QSqlQuery *c9 = new QSqlQuery; - c9->prepare("UPDATE movies set ipartno = :value WHERE imovid = :id"); - mColumnQueries << c9; - //populate(); -} - -MovieModel::~MovieModel(){ - qDeleteAll(mItems); - qDeleteAll(mColumnQueries); - delete mInsertQuery; - delete mDeleteQuery; - delete mDeleteActorsForMovie; - delete mInsertActorsForMovie; - delete mDeleteCovers; - delete mInsertCovers; - delete mOtherPartsQuery; -} - -QModelIndex MovieModel::index(int row, int column, const QModelIndex &parent) const{ - if((parent != QModelIndex()) || (!hasIndex(row, column, parent)) || (row > mItems.size())){ - return QModelIndex(); - } - MovieItem *internal = mItems.at(row); - return createIndex(row, column, internal); -} - -QModelIndex MovieModel::index(int movieId, int column) const{ - QModelIndex retval = QModelIndex(); - for(int i = 0; i < rowCount(QModelIndex()); ++i){ - MovieItem *item = mItems.at(i); - if(item->id() == movieId){ - retval = createIndex(i, column, item); - break; - } - } - return retval; -} - -QModelIndexList MovieModel::columnContains(const QVariant &content, int column) const{ - QModelIndexList retval; - if((column == MovieItem::Title) || (column == MovieItem::Filename) || (column == MovieItem::Md5Sum)){ - QString part = content.toString(); - for(int i = 0; i < mItems.size(); ++i){ - QString current = mItems.at(i)->dataAt(column).toString(); - if(current.contains(part)){ - retval << createIndex(i, column, mItems.at(i)); - } - } - }else{ - qint64 value = content.toLongLong(); - for(int i = 0; i < mItems.size(); ++i){ - qint64 current = mItems.at(i)->dataAt(column).toLongLong(); - if(value == current){ - retval << createIndex(i, column, mItems.at(i)); - } - } - } - return retval; -} - -QVariant MovieModel::data(const QModelIndex &index, int role) const{ - if(!index.isValid()){ - return QVariant(); - } - QSettings s; - MovieItem *item = static_cast<MovieItem*>(index.internalPointer()); - Q_ASSERT(item != 0); - if(role == Qt::DisplayRole){ - if(index.column() == 0){ - QString retval = item->dataAt(MovieItem::Title).toString(); - int seriesno = item->dataAt(MovieItem::SeriesNo).toInt(); - int partno = item->dataAt(MovieItem::PartNo).toInt(); - if(seriesno != -1){ - retval.append(QString(" %1").arg(QString::number(seriesno))); - } - if(partno != -1){ - retval.append(QString(" (part %1)").arg(QString::number(partno))); - } - return retval; - }else{ - return item->dataAt(index.column()); - } - } - if(role == ActorsRole){ - return item->actors(); - } - if(role == ActorsMap){ - return QVariant(item->actorMap()); - } - if(role == CoverRole){ - return item->covers(); - } - if(role == IdRole){ - return item->id(); - } - if(role == TitleBaseRole){ - return item->dataAt(MovieItem::Title); - } - if(role == SeriesNoRole){ - return item->dataAt(MovieItem::SeriesNo); - } - if(role == PartNoRole){ - return item->dataAt(MovieItem::PartNo); - } - if(role == FilenameRole){ - return item->dataAt(MovieItem::Filename); - } - if(role == Md5Role){ - return item->dataAt(MovieItem::Md5Sum); - } - if(role == SizeRole){ - return item->dataAt(MovieItem::Size); - } - if(role == GenreRole){ - return item->dataAt(MovieItem::Genre); - } - if(role == QualityRole){ - return item->dataAt(MovieItem::Quality); - } - if(role == DvdRole){ - return item->dataAt(MovieItem::Dvd); - } - if(role == FullPathRole){ - QString archivePath = s.value("paths/archivedir").toString(); - QString md5 = item->dataAt(MovieItem::Md5Sum).toString(); - QString fileName = item->dataAt(MovieItem::Filename).toString(); - QString retval = QString("%1/%2/%3/%4").arg(archivePath).arg(md5.at(0)).arg(md5.at(1)).arg(fileName); - return retval; - } - if(role == CoverPathRole){ - QList<QVariant> retval; - QList<QVariant> covers = item->covers(); - foreach(QVariant c, covers){ - CoverItem i = c.value<CoverItem>(); - retval << i.fullPath(); - } - return retval; - } - if(role == OtherPartsRole){ - QList<QVariant> retval; - mOtherPartsQuery->bindValue(":title", item->dataAt(MovieItem::Title)); - mOtherPartsQuery->bindValue(":seriesno", item->dataAt(MovieItem::SeriesNo)); - mOtherPartsQuery->bindValue(":id", item->id()); - mOtherPartsQuery->exec(); - while(mOtherPartsQuery->next()){ - retval << mOtherPartsQuery->value(0); - } - return retval; - } - if((role == Qt::DecorationRole) && (index.column() == 0)){ - return QIcon(":/dildo.png"); - } - return QVariant(); -} - -Qt::ItemFlags MovieModel::flags(const QModelIndex &index) const{ - if(!index.isValid()){ - return 0; - } - return Qt::ItemIsEnabled | Qt::ItemIsSelectable; -} - -QVariant MovieModel::headerData(int section, Qt::Orientation o, int role) const{ - if((o == Qt::Horizontal) && (role == Qt::DisplayRole)){ - if(section < mHeaders.size()){ - return mHeaders.at(section); - } - } - return QVariant(); -} - -bool MovieModel::insertRows(int row, int count, const QModelIndex &){ - if(row > rowCount(QModelIndex())){ - return false; - } - beginInsertRows(QModelIndex(), row, row); - for(int i = row; i < (row + count); ++i){ - MovieItem *newItem = new MovieItem(-1, 0); - mItems.insert(row, newItem); - } - endInsertRows(); - return true; -} - -bool MovieModel::removeRows(int row, int count, const QModelIndex &){ - if(row >= rowCount(QModelIndex())){ - return false; - } - beginRemoveRows(QModelIndex(), row, row + count - 1); - for(int i = row; i < (row + count); ++i){ - MovieItem *item = mItems.at(i); - delete item; - mItems.removeAt(i); - } - endRemoveRows(); - return true; -} - -bool MovieModel::setRow(const QModelIndex &idx, const QList<QVariant> &data, const QList<QVariant> &actors, const QList<CoverItem> &covers){ - if(!idx.isValid() || (data.size() > MovieItem::NumRows)){ - return false; - } - MovieItem *item = static_cast<MovieItem*>(idx.internalPointer()); - Q_ASSERT(item != 0); - if(item->id() != -1){ - qWarning("ID not as expected: item->id() == %d", item->id()); - return false; - } - for(int i = 0; i < MovieItem::NumRows; ++i){ - mInsertQuery->bindValue(i, data[i]); - } - mInsertQuery->exec(); - int id(0); - while(mInsertQuery->next()){ - id = mInsertQuery->value(0).toInt(); - } - if(id == -1){ - return false; - } - if(!actors.isEmpty()){ - setActors(id, actors); - } - if(!covers.isEmpty()){ - setCovers(id, covers); - } - item->setId(id); - QModelIndex start = index(idx.row(), 0, QModelIndex()); - QModelIndex end = index(idx.row(), MovieItem::NumRows - 1, QModelIndex()); - emit dataChanged(start, end); - return true; -} - -bool MovieModel::setDataAt(const QModelIndex &idx, const QVariant &data){ - if(!idx.isValid()){ - return false; - } - MovieItem *item = static_cast<MovieItem *>(idx.internalPointer()); - Q_ASSERT(item != 0); - int id = item->id(); - int column = idx.column(); - QSqlQuery *query = mColumnQueries.at(column); - query->bindValue(":value", data); - query->bindValue(":id", id); - if(!query->exec()){ - return false; - } - item->setDataAt(column, data); - emit dataChanged(idx, idx); - return true; -} - -void MovieModel::setActors(int id, const QList<QVariant> &actors){ - mDeleteActorsForMovie->bindValue(":id", id); - mDeleteActorsForMovie->exec(); - foreach(QVariant a, actors){ - mInsertActorsForMovie->bindValue(":movid", id); - mInsertActorsForMovie->bindValue(":actorid", a); - mInsertActorsForMovie->exec(); - } - foreach(MovieItem *m, mItems){ - if(m->id() == id){ - m->setActors(); - } - } -} - -void MovieModel::setCovers(int id, const QList<CoverItem> &covers){ - mDeleteCovers->bindValue(":id", id); - mDeleteCovers->exec(); - foreach(CoverItem c, covers){ - mInsertCovers->bindValue(":filename", c.fileName()); - mInsertCovers->bindValue(":movid", id); - mInsertCovers->bindValue(":covertype", c.type()); - mInsertCovers->bindValue(":md5", c.md5()); - mInsertCovers->exec(); - } - foreach(MovieItem *m, mItems){ - if(m->id() == id){ - m->setCovers(); - } - } -} - -void MovieModel::addMovie(const QList<QVariant> &data, const QList<QVariant> &actors, const QList<CoverItem> &covers){ - int row = rowCount(QModelIndex()); - insertRows(row, 1, QModelIndex()); - QModelIndex i = index(row, 0, QModelIndex()); - setRow(i, data, actors, covers); - emit moviesChanged(); -} - -void MovieModel::removeMovie(const QModelIndex &idx){ - if(!idx.isValid()){ - return; - } - MovieItem *item = static_cast<MovieItem*>(idx.internalPointer()); - Q_ASSERT(item != 0); - int id = item->id(); - mDeleteQuery->bindValue(":id", id); - if(!mDeleteQuery->exec()){ - return; - } - removeRows(idx.row(), 1, QModelIndex()); -} - -const QVariant MovieModel::maxValue(int column) const{ - if(mItems.isEmpty()){ - return QVariant(); - } - QVariant sample = mItems.at(0)->dataAt(column); - if(sample.canConvert(QVariant::LongLong)){ - qint64 retval(-1); - foreach(MovieItem* i, mItems){ - qint64 value = i->dataAt(column).toLongLong(); - if(value > retval){ - retval = value; - } - } - return retval; - } - if(sample.canConvert(QVariant::String)){ - QString retval; - foreach(MovieItem *i, mItems){ - QString value = i->dataAt(column).toString(); - if(value > retval){ - retval = value; - } - } - return retval; - } - return QVariant(); -} - -void MovieModel::populate(){ - QSqlQuery movieQuery("SELECT imovid FROM movies"); - while(movieQuery.next()){ - int id = movieQuery.value(0).toInt(); - MovieItem *item = new MovieItem(id); - mItems << item; - } -} - |