diff options
-rw-r--r-- | filestreemodel.cpp | 33 | ||||
-rw-r--r-- | filestreemodel.h | 3 | ||||
-rw-r--r-- | filestreewidget.cpp | 27 |
3 files changed, 26 insertions, 37 deletions
diff --git a/filestreemodel.cpp b/filestreemodel.cpp index a762c1f..d290d5c 100644 --- a/filestreemodel.cpp +++ b/filestreemodel.cpp @@ -44,7 +44,6 @@ FilesTreeModel::FilesTreeModel(QStringList &headers, QObject *parent) : SmTreeMo mDeleteFileQuery->prepare("DELETE FROM files WHERE ifiles_id = :id"); mFileTypeQuery = new QSqlQuery(mDb); mFileTypeQuery->prepare("SELECT sifiletype FROM files WHERE cmd5sum = :md5"); - mFileSizeLessThanQueryTemplate = QString("SELECT cmd5sum FROM files WHERE bisize <= :size AND sifiletype = 1 AND idvd = -1 ORDER BY bisize DESC LIMIT %1"); mUpdateSeriesPartQuery = new QSqlQuery(mDb); mUpdateSeriesPartQuery->prepare("UPDATE files SET iseriespart_id = :partid WHERE ifiles_id = :fileid"); @@ -417,21 +416,23 @@ QMap<QString, QString> FilesTreeModel::pictureMetaInfo(const QModelIndex &idx){ return retval; } -QModelIndexList FilesTreeModel::fileSizeLessThan(quint64 size, quint16 limit) const { - QModelIndexList retval; - QString queryString = mFileSizeLessThanQueryTemplate.arg(QString::number(limit)); - QSqlQuery query(mDb); - query.prepare(queryString); - query.bindValue(":size", size); - query.exec(); - while(query.next()){ - QVariant md5sum = query.value(0); - QModelIndex curIdx = findRecursive(md5sum, Md5Sum, index(0, Md5Sum, QModelIndex())); - if(curIdx.isValid()){ - retval << curIdx; - } - } - return retval; +QModelIndex FilesTreeModel::fileSizeLessThan(quint64 size) const { + QModelIndex retval; + //bodly assume that movies is the first child... + QModelIndex movies = index(0, 0, QModelIndex()); + QModelIndex cur = index(0, 0, movies); + quint64 best = 0; + while(cur.isValid()){ + quint64 curSize = cur.data(FilesTreeModel::SizeRole).toLongLong(); + if(curSize < size){ + if(curSize > best){ + best = curSize; + retval = cur; + } + } + cur = index(cur.row() + 1, 0, movies); + } + return retval; } int FilesTreeModel::fileType(const QString &md5sum) const{ diff --git a/filestreemodel.h b/filestreemodel.h index 88dc81f..e7d1b32 100644 --- a/filestreemodel.h +++ b/filestreemodel.h @@ -49,7 +49,7 @@ class FilesTreeModel : public SmTreeModel { QMap<QString, QString> pictureInfo(const QModelIndex &idx) const; QMap<QString, QString> pictureMetaInfo(const QModelIndex &idx); int fileType(const QString &md5sum) const; - QModelIndexList fileSizeLessThan(quint64 size, quint16 limit = 1) const; + QModelIndex fileSizeLessThan(quint64 size) const; //file manipulation bool addFile(const QString &fullPath, int type, int quality, int filePart, int seriesPartId, int dvd = -1); @@ -80,7 +80,6 @@ class FilesTreeModel : public SmTreeModel { QSqlQuery *mDeleteFileQuery; QSqlQuery *mFileTypeQuery; QSqlQuery *mUpdateSeriesPartQuery; - QString mFileSizeLessThanQueryTemplate; //misc QHash<int, QString> mFileTypes; diff --git a/filestreewidget.cpp b/filestreewidget.cpp index cc92a67..ffe1343 100644 --- a/filestreewidget.cpp +++ b/filestreewidget.cpp @@ -269,25 +269,14 @@ void FilesTreeWidget::suggest(){ return; } qint64 neededSize = dvdSize - size; - QModelIndexList possibleFiles = mModel->fileSizeLessThan(neededSize); - if(possibleFiles.isEmpty()){ - QLocale l; - float mb = size / 1024 / 1024; - QString message = QString(tr("No file smaller than %1 MiB found")).arg(l.toString(mb, 'f', 2)); - QMessageBox::critical(this, tr("Error"), message); - return; - } - QModelIndex last; - QStringList selectedFiles; - foreach(QModelIndex sIdx, possibleFiles){ - QModelIndex vIdx = mProxy->mapFromSource(sIdx); - last = vIdx; - mView->selectionModel()->select(vIdx, QItemSelectionModel::Select | QItemSelectionModel::Rows); - selectedFiles << sIdx.data(FilesTreeModel::FileNameRole).toString(); - } - QString message = QString(tr("Selected %1 items: %2")).arg(QString::number(selectedFiles.count())).arg(selectedFiles.join(", ")); - emit statusMessage(message); - mView->scrollTo(last, QAbstractItemView::PositionAtCenter); + QModelIndex candidate = mModel->fileSizeLessThan(neededSize); + QModelIndex real = mProxy->mapFromSource(candidate); + if(!real.isValid() || mView->selectionModel()->isSelected(real)){ + QMessageBox::critical(this, tr("Error"), tr("Out of suggestions!")); + return; + } + mView->selectionModel()->select(real, QItemSelectionModel::Select | QItemSelectionModel::Rows); + mView->scrollTo(real, QAbstractItemView::PositionAtCenter); } void FilesTreeWidget::playSelected(){ |