diff options
author | Arno <am@disconnect.de> | 2010-06-20 15:51:42 +0200 |
---|---|---|
committer | Arno <am@disconnect.de> | 2010-06-20 15:51:42 +0200 |
commit | f81a83e91b77d41384667eec02409be05e088a06 (patch) | |
tree | 87b940010c56ba6da83961eb77483ba6853c7c6a | |
parent | bdbc5a75e82f3635449848977cbefa19d51c0c9b (diff) | |
download | SheMov-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.
-rw-r--r-- | filestreemodel.cpp | 179 | ||||
-rw-r--r-- | filestreemodel.h | 40 | ||||
-rw-r--r-- | shemov.pro | 6 |
3 files changed, 223 insertions, 2 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; +} diff --git a/filestreemodel.h b/filestreemodel.h new file mode 100644 index 0000000..0db1f39 --- /dev/null +++ b/filestreemodel.h @@ -0,0 +1,40 @@ +/* + 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. +*/ + +#ifndef FILESTREEMODEL_H +#define FILESTREEMODEL_H + +#include <QSqlDatabase> +#include <QList> + +#include "smtreemodel.h" + +class QSqlQuery; + +class FilesTreeModel : public SmTreeModel { + Q_OBJECT + public: + enum CustomRoles { FileNameRole = Qt::UserRole + 1, FullPathRole = Qt::UserRole + 2, SizeRole = Qt::UserRole + 3, DvdNoRole = Qt::UserRole + 4, SizeDisplayRole = Qt::UserRole + 5, FileTypeRole = Qt::UserRole + 6, Md5SumRole = Qt::UserRole + 7, PartNoRole = Qt::UserRole + 8, SeriesPartIdRole = Qt::UserRole + 9, QualityRole = Qt::UserRole + 10, FilesIdRole = Qt::UserRole + 11 }; + enum FileTypes { Movie = 1, FrontCover = 2, BackCover = 3, GeneralCover = 4 }; + enum Fields { FileName = 0, PartNo = 1, SizeDisplay = 2, Quality = 3, DvdNo = 4, FullPath = 5, Size = 6, FileType = 7, Md5Sum = 8, SeriesPartId = 9, FilesId = 10 }; + explicit FilesTreeModel(QStringList &headers, QObject *parent = 0); + ~FilesTreeModel(); + + //data + flags + void setIds(const QList<int> &seriesPartIds); + QVariant data(const QModelIndex &index, int role) const; + bool setData(const QModelIndex &index, const QVariant &value, int role); + Qt::ItemFlags flags(const QModelIndex &index) const; + + private: + QSqlDatabase mDb; + QSqlQuery *mFilesQuery; + QSqlQuery *mUpdateDvdQuery; + QSqlQuery *mUpdateQualityQuery; +}; + +#endif // FILESTREEMODEL_H @@ -52,7 +52,8 @@ SOURCES = main.cpp \ smubermodelsingleton.cpp \ archivetreeview.cpp \ seriestreewidget.cpp \ - seriestreemodel.cpp + seriestreemodel.cpp \ + filestreemodel.cpp HEADERS = listitem.h \ listmodel.h \ movieitem.h \ @@ -100,6 +101,7 @@ HEADERS = listitem.h \ smubermodelsingleton.h \ archivetreeview.h \ seriestreewidget.h \ - seriestreemodel.h + seriestreemodel.h \ + filestreemodel.h LIBS += -lmagic RESOURCES = shemov.qrc |