summaryrefslogtreecommitdiffstats
path: root/filestreemodel.cpp
diff options
context:
space:
mode:
authorArno <am@disconnect.de>2010-06-20 15:51:42 +0200
committerArno <am@disconnect.de>2010-06-20 15:51:42 +0200
commitf81a83e91b77d41384667eec02409be05e088a06 (patch)
tree87b940010c56ba6da83961eb77483ba6853c7c6a /filestreemodel.cpp
parentbdbc5a75e82f3635449848977cbefa19d51c0c9b (diff)
downloadSheMov-f81a83e91b77d41384667eec02409be05e088a06.tar.gz
SheMov-f81a83e91b77d41384667eec02409be05e088a06.tar.bz2
SheMov-f81a83e91b77d41384667eec02409be05e088a06.zip
Started implementation of FilesTreeModel
No visible representation yet. Implemented setData for quality and dvdno, but not tested yet. Dunno yet if anything else has to be editable.
Diffstat (limited to 'filestreemodel.cpp')
-rw-r--r--filestreemodel.cpp179
1 files changed, 179 insertions, 0 deletions
diff --git a/filestreemodel.cpp b/filestreemodel.cpp
new file mode 100644
index 0000000..27d93df
--- /dev/null
+++ b/filestreemodel.cpp
@@ -0,0 +1,179 @@
+/*
+ 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 <QLocale>
+#include <QIcon>
+
+#include "filestreemodel.h"
+#include "smtreeitem.h"
+#include "helper.h"
+
+FilesTreeModel::FilesTreeModel(QStringList &headers, QObject *parent) : SmTreeModel(headers, parent){
+ mDb = QSqlDatabase::database("treedb");
+ mFilesQuery = new QSqlQuery(mDb);
+ mFilesQuery->prepare("SELECT iseriespart_id, tfilename, cmd5sum, bisize, idvd, sifiletype, sifileno, siquality, ifiles_id FROM files where iseriesparts_id = :id ORDER BY tfilename, sifileno");
+ mUpdateDvdQuery = new QSqlQuery(mDb);
+ mUpdateDvdQuery->prepare("UPDATE files SET idvd = :dvd WHERE ifiles_id = :id");
+ mUpdateQualityQuery = new QSqlQuery(mDb);
+ mUpdateQualityQuery->prepare("UPDATE files SET iquality = :quality WHERE ifiles_id = :id");
+}
+
+FilesTreeModel::~FilesTreeModel(){
+ delete mFilesQuery;
+ delete mUpdateDvdQuery;
+ mDb = QSqlDatabase();
+}
+
+void FilesTreeModel::setIds(const QList<int> &seriesPartIds){
+ SmTreeItem *root = new SmTreeItem(11);
+ SmTreeItem *files = new SmTreeItem(11, root);
+ files->setData(FileName, tr("Files"));
+ root->appendChild(files);
+ SmTreeItem *covers = new SmTreeItem(11, root);
+ covers->setData(FileName, tr("Covers"));
+ root->appendChild(covers);
+ QLocale l;
+ foreach(int s, seriesPartIds){
+ mFilesQuery->bindValue(":id", s);
+ if(mFilesQuery->exec()){
+ while(mFilesQuery->next()){
+ QList<QVariant> data;
+ data << mFilesQuery->value(1); //filename
+ data << mFilesQuery->value(6); //partno
+ data << l.toString(mFilesQuery->value(3).toLongLong()); //displaysize
+ data << mFilesQuery->value(7); //quality
+ data << mFilesQuery->value(4); //dvdno
+ data << Helper::createArchivePath(mFilesQuery->value(1).toString(), mFilesQuery->value(2).toString()); //fullpath
+ data << mFilesQuery->value(3); //size
+ data << mFilesQuery->value(5); //filetype
+ data << mFilesQuery->value(2); //md5sum
+ data << mFilesQuery->value(0); //seriesparts_id
+ data << mFilesQuery->value(8); //files_id
+ switch(mFilesQuery->value(5).toInt()){
+ case Movie:{
+ SmTreeItem *item = new SmTreeItem(data, files);
+ files->appendChild(item);
+ break;
+ }
+ case FrontCover:
+ case BackCover:
+ case GeneralCover:{
+ SmTreeItem *item = new SmTreeItem(data, covers);
+ covers->appendChild(item);
+ break;
+ }
+ default:
+ ;
+ }
+ }
+ }
+ }
+ setRoot(root);
+}
+
+QVariant FilesTreeModel::data(const QModelIndex &index, int role) const{
+ if(!index.isValid()){
+ return QVariant();
+ }
+
+ SmTreeItem *item = static_cast<SmTreeItem*>(index.internalPointer());
+
+ if(role == Qt::DisplayRole){
+ if(index.column() == DvdNo){
+ if(index.data().toInt() == -1){
+ return QString(tr("(local)"));
+ }else{
+ QString retval = QString(tr("DVD #%1")).arg(index.data().toInt());
+ return retval;
+ }
+ }
+ return item->data(index.column());
+ }
+ if(role == Qt::EditRole){
+ return item->data(index.column());
+ }
+ if(role == Qt::DecorationRole){
+ if(index.column() == 0){
+ return QIcon(":/dildo.png");
+ }
+ }
+ if(role == FileNameRole){
+ return item->data(FileName);
+ }
+ if(role == FullPathRole){
+ return item->data(FullPath);
+ }
+ if(role == SizeRole){
+ return item->data(Size);
+ }
+ if(role == DvdNoRole){
+ return item->data(DvdNo);
+ }
+ if(role == SizeDisplay){
+ return item->data(SizeDisplay);
+ }
+ if(role == FileTypeRole){
+ return item->data(FileType);
+ }
+ if(role == Md5SumRole){
+ return item->data(Md5Sum);
+ }
+ if(role == PartNoRole){
+ return item->data(PartNo);
+ }
+ if(role == SeriesPartIdRole){
+ return item->data(SeriesPartId);
+ }
+ if(role == QualityRole){
+ return item->data(Quality);
+ }
+ if(role == FilesIdRole){
+ return item->data(FilesId);
+ }
+ return QVariant();
+}
+
+bool FilesTreeModel::setData(const QModelIndex &index, const QVariant &value, int role){
+ if(!index.isValid()){
+ return false;
+ }
+ if(role == Qt::EditRole){
+ SmTreeItem *item = static_cast<SmTreeItem*>(index.internalPointer());
+ if(index.column() == DvdNo){
+ mUpdateDvdQuery->bindValue(":id", index.data(FilesIdRole));
+ mUpdateDvdQuery->bindValue(":dvd", value);
+ if(mUpdateDvdQuery->exec()){
+ item->setData(DvdNo, value);
+ return true;
+ }
+ }
+ if(index.column() == Quality){
+ if(value.toInt() > 10 || value.toInt() < 0){
+ return false;
+ }
+ mUpdateQualityQuery->bindValue(":id", index.data(FilesIdRole));
+ mUpdateQualityQuery->bindValue(":quality", value);
+ if(mUpdateQualityQuery->exec()){
+ item->setData(Quality, value);
+ return true;
+ }
+ }
+ }
+ return false;
+}
+
+Qt::ItemFlags FilesTreeModel::flags(const QModelIndex &index) const{
+ if(!index.isValid() || index.data(FileTypeRole) == QVariant()){
+ return 0;
+ }
+ Qt::ItemFlags retval = Qt::ItemIsEnabled | Qt::ItemIsSelectable;
+ if(index.column() == DvdNo || index.column() == Quality){
+ return retval | Qt::ItemIsEditable;
+ }
+ return retval;
+}