diff options
Diffstat (limited to 'movieitem.cpp')
-rw-r--r-- | movieitem.cpp | 101 |
1 files changed, 101 insertions, 0 deletions
diff --git a/movieitem.cpp b/movieitem.cpp new file mode 100644 index 0000000..defca5c --- /dev/null +++ b/movieitem.cpp @@ -0,0 +1,101 @@ +/* + 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 "movieitem.h" + +MovieItem::MovieItem(int id, QObject *parent) : QObject(parent), mNumRows(7), mId(id), mGenreId(-1) { + for(int i = 0; i < mNumRows; ++i){ + mRows << QVariant(); + } + if(mId != -1){ + populate(); + setGenreName(); + setActors(); + setSize(); + } +} + +void MovieItem::setId(int id){ + mId = id; + populate(); + setGenreName(); + setActors(); + setSize(); +} + +bool MovieItem::setData(const QList<QVariant> &data){ + if(!data.size() == mNumRows){ + return false; + } + mRows = data; + return true; +} + +void MovieItem::setDataAt(const QVariant &data, Columns column){ + mRows[column] = data; +} + +const QList<QVariant> MovieItem::data() const { + return mRows; +} + +const QVariant MovieItem::dataAt(int column) const { + if(column >= NumRows){ + return QVariant(); + } + return mRows[column]; +} + +void MovieItem::populate(){ + QSqlQuery movieData("SELECT ttitle, tfilename, cmd5sum, bisize, igenreid, iquality, idvd FROM movies WHERE imovid = :id"); + movieData.bindValue(":id", mId); + movieData.exec(); + for(int i = 0; i < mNumRows; ++i){ + if(movieData.next()){ + mRows[i] = movieData.value(i); + } + } +} + +void MovieItem::setGenreName(){ + qint32 genreId = dataAt(Genre).toInt(); + QSqlQuery genreQuery("SELECT tgenrename FROM genre WHERE igenreid = :id"); + genreQuery.bindValue(":id", genreId); + genreQuery.exec(); + while(genreQuery.next()){ + setDataAt(genreQuery.value(0), Genre); + } +} + +void MovieItem::setActors(){ + QSqlQuery actorQuery("SELECT actor.tactorname FROM actors, actormoviemap WHERE actormoviemap.iactorid = actor.iactorid AND actormoviemap.imovid = :id"); + actorQuery.bindValue(":id", mId); + actorQuery.exec(); + while(actorQuery.next()){ + mActors << actorQuery.value(0); + } +} + +void MovieItem::setSize(){ + qint64 size = dataAt(Size).toInt(); + QString sizeString(tr("%1 %2iB")); + if(size > 1024){ + double value = size / 1024.0; + setDataAt(sizeString.arg(QString::number(value, 'f', 2), "K"), Size); + } + if(size > (1024 * 1024)){ + double value = size / (1024.0 * 1024.0); + setDataAt(sizeString.arg(QString::number(value, 'f', 2), "M"), Size); + } + if(size > (1024 * 1024 * 1024)){ + double value = size / (1024.0 * 1024.0 * 1024.0); + setDataAt(sizeString.arg(QString::number(value, 'f', 2), "G"), Size); + } +} + |