summaryrefslogtreecommitdiffstats
path: root/filestreemodel.cpp
diff options
context:
space:
mode:
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;
+}