summaryrefslogtreecommitdiffstats
path: root/movieitem.cpp
blob: b2fa545433b3fbab740716bfa3a4a9350bce7c86 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
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(int column, const QVariant &data){
	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(Genre, genreQuery.value(0));
	}
}

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(Size, sizeString.arg(QString::number(value, 'f', 2), "K"));
	}
	if(size > (1024 * 1024)){
		double value = size / (1024.0 * 1024.0);
		setDataAt(Size, sizeString.arg(QString::number(value, 'f', 2), "M"));
	}
	if(size > (1024 * 1024 * 1024)){
		double value = size / (1024.0 * 1024.0 * 1024.0);
		setDataAt(Size, sizeString.arg(QString::number(value, 'f', 2), "G"));
	}
}