diff options
Diffstat (limited to 'filestreemodel.cpp')
-rw-r--r-- | filestreemodel.cpp | 83 |
1 files changed, 46 insertions, 37 deletions
diff --git a/filestreemodel.cpp b/filestreemodel.cpp index 27d93df..87c1e8d 100644 --- a/filestreemodel.cpp +++ b/filestreemodel.cpp @@ -15,8 +15,6 @@ 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); @@ -24,7 +22,6 @@ FilesTreeModel::FilesTreeModel(QStringList &headers, QObject *parent) : SmTreeMo } FilesTreeModel::~FilesTreeModel(){ - delete mFilesQuery; delete mUpdateDvdQuery; mDb = QSqlDatabase(); } @@ -38,39 +35,40 @@ void FilesTreeModel::setIds(const QList<int> &seriesPartIds){ covers->setData(FileName, tr("Covers")); root->appendChild(covers); QLocale l; + QStringList ids; 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: - ; - } + ids << QString::number(s); + } + QString query = QString("SELECT iseriespart_id, tfilename, cmd5sum, bisize, idvd, sifiletype, sifileno, siquality, ifiles_id FROM files WHERE iseriespart_id IN (%1) ORDER BY tfilename, sifileno ASC").arg(ids.join(",")); + QSqlQuery filesQuery(query, mDb); + while(filesQuery.next()){ + QList<QVariant> data; + data << filesQuery.value(1); //filename + data << filesQuery.value(6); //partno + data << l.toString(filesQuery.value(3).toLongLong()); //displaysize + data << filesQuery.value(7); //quality + data << filesQuery.value(4); //dvdno + data << Helper::createArchivePath(filesQuery.value(1).toString(), filesQuery.value(2).toString()); //fullpath + data << filesQuery.value(3); //size + data << filesQuery.value(5); //filetype + data << filesQuery.value(2); //md5sum + data << filesQuery.value(0); //seriesparts_id + data << filesQuery.value(8); //files_id + switch(filesQuery.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); @@ -85,10 +83,13 @@ QVariant FilesTreeModel::data(const QModelIndex &index, int role) const{ if(role == Qt::DisplayRole){ if(index.column() == DvdNo){ - if(index.data().toInt() == -1){ + if(index.data(FileTypeRole) == QVariant()){ + return QVariant(); + } + if(item->data(DvdNo).toInt() == -1){ return QString(tr("(local)")); }else{ - QString retval = QString(tr("DVD #%1")).arg(index.data().toInt()); + QString retval = QString(tr("DVD #%1")).arg(item->data(DvdNo).toInt()); return retval; } } @@ -102,6 +103,11 @@ QVariant FilesTreeModel::data(const QModelIndex &index, int role) const{ return QIcon(":/dildo.png"); } } + if(role == Qt::TextAlignmentRole){ + if(index.column() > 0 && index.column() < 4){ + return Qt::AlignRight; + } + } if(role == FileNameRole){ return item->data(FileName); } @@ -168,9 +174,12 @@ bool FilesTreeModel::setData(const QModelIndex &index, const QVariant &value, in } Qt::ItemFlags FilesTreeModel::flags(const QModelIndex &index) const{ - if(!index.isValid() || index.data(FileTypeRole) == QVariant()){ + if(!index.isValid()){ return 0; } + if(index.data(FileTypeRole) == QVariant()){ + return Qt::ItemIsEnabled; + } Qt::ItemFlags retval = Qt::ItemIsEnabled | Qt::ItemIsSelectable; if(index.column() == DvdNo || index.column() == Quality){ return retval | Qt::ItemIsEditable; |