diff options
Diffstat (limited to 'moviemodel.cpp')
-rw-r--r-- | moviemodel.cpp | 62 |
1 files changed, 56 insertions, 6 deletions
diff --git a/moviemodel.cpp b/moviemodel.cpp index a4f47dc..53849cc 100644 --- a/moviemodel.cpp +++ b/moviemodel.cpp @@ -8,9 +8,15 @@ #include <QSqlQuery> #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("SELECT insert_movie(:title, :filename, :md5, :filesize, :genre, :quality, :dvd"); + mDeleteActorsForMovie = new QSqlQuery("DELETE FROM movieactormap WHERE imovid = :id"); + mInsertActorsForMovie = new QSqlQuery("INSERT INTO movieactormap VALUES(:movid, :actorid"); + mDeleteCovers = new QSqlQuery("DELETE FROM covers WHERE imovid = :id"); + mInsertCovers = new QSqlQuery("INSERT INTO covers VALUES(:filename, :movid, :covertype, :md5sum"); populate(); } @@ -62,10 +68,11 @@ bool MovieModel::insertRows(int row, int count, const QModelIndex &){ if(row > rowCount(QModelIndex())){ return false; } - Q_ASSERT(count == 1); beginInsertRows(QModelIndex(), row, row); - MovieItem *newItem = new MovieItem(-1, 0); - mItems.insert(row, newItem); + for(int i = row; i < (row + count); ++i){ + MovieItem *newItem = new MovieItem(-1, 0); + mItems.insert(row, newItem); + } endInsertRows(); return true; } @@ -84,19 +91,62 @@ bool MovieModel::removeRows(int row, int count, const QModelIndex &){ return true; } -bool MovieModel::setDataAt(const QModelIndex &index, const QList<QVariant> &data, qint32 genre, const QList<QVariant> &actors, const QList<QVariant> &covers){ - if(!index.isValid() || (data.size() > MovieItem::NumRows)){ +bool MovieModel::setDataAt(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*>(index.internalPointer()); + 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; } +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(); + } +} + +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(); + } +} + void MovieModel::populate(){ QSqlQuery movieQuery("SELECT imovid FROM movies"); movieQuery.exec(); |