summaryrefslogtreecommitdiffstats
path: root/moviemodel.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'moviemodel.cpp')
-rw-r--r--moviemodel.cpp62
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();