summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--filestreemodel.cpp33
-rw-r--r--filestreemodel.h3
-rw-r--r--filestreewidget.cpp27
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(){