diff options
-rw-r--r-- | analstretcher.png | bin | 0 -> 925 bytes | |||
-rw-r--r-- | filestreemodel.cpp | 17 | ||||
-rw-r--r-- | filestreemodel.h | 4 | ||||
-rw-r--r-- | filestreewidget.cpp | 37 | ||||
-rw-r--r-- | filestreewidget.h | 1 | ||||
-rw-r--r-- | shemov.cpp | 5 | ||||
-rw-r--r-- | shemov.h | 1 | ||||
-rw-r--r-- | shemov.qrc | 1 | ||||
-rw-r--r-- | smglobals.cpp | 3 |
9 files changed, 58 insertions, 11 deletions
diff --git a/analstretcher.png b/analstretcher.png Binary files differnew file mode 100644 index 0000000..3e3918f --- /dev/null +++ b/analstretcher.png diff --git a/filestreemodel.cpp b/filestreemodel.cpp index 5e0c8ca..a22ea36 100644 --- a/filestreemodel.cpp +++ b/filestreemodel.cpp @@ -44,8 +44,7 @@ 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"); - mFileSizeLessThanQuery = new QSqlQuery(mDb); - mFileSizeLessThanQuery->prepare("SELECT md5sum FROM files WHERE bisize =< :size AND sifiletype = 1 AND idvd = -1 ORDER BY bisize DESC LIMIT :limit"); + mFileSizeLessThanQueryTemplate = QString("SELECT cmd5sum FROM files WHERE bisize <= :size AND sifiletype = 1 AND idvd = -1 ORDER BY bisize DESC LIMIT %1"); //file types mFileTypes.insert(1, tr("Movie")); @@ -408,12 +407,14 @@ QMap<QString, QString> FilesTreeModel::pictureMetaInfo(const QModelIndex &idx){ QModelIndexList FilesTreeModel::fileSizeLessThan(quint64 size, quint16 limit) const { QModelIndexList retval; - mFileSizeLessThanQuery->bindValue(":size", size); - mFileSizeLessThanQuery->bindValue(":limit", limit); - mFileSizeLessThanQuery->exec(); - while(mFileSizeLessThanQuery->next()){ - QVariant md5sum = mFileSizeLessThanQuery->value(0); - QModelIndex curIdx = findRecursive(md5sum, Md5Sum); + 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; } diff --git a/filestreemodel.h b/filestreemodel.h index 4039077..0ff7043 100644 --- a/filestreemodel.h +++ b/filestreemodel.h @@ -46,7 +46,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 = 3) const; + QModelIndexList fileSizeLessThan(quint64 size, quint16 limit = 1) const; //file manipulation bool addFile(const QString &fullPath, int type, int quality, int filePart, int seriesPartId, int dvd = -1); @@ -74,7 +74,7 @@ class FilesTreeModel : public SmTreeModel { QSqlQuery *mFilesQuery; QSqlQuery *mDeleteFileQuery; QSqlQuery *mFileTypeQuery; - QSqlQuery *mFileSizeLessThanQuery; + QString mFileSizeLessThanQueryTemplate; //misc QHash<int, QString> mFileTypes; diff --git a/filestreewidget.cpp b/filestreewidget.cpp index 2aa32d2..d44e561 100644 --- a/filestreewidget.cpp +++ b/filestreewidget.cpp @@ -250,6 +250,43 @@ void FilesTreeWidget::edit(int column){ } } +void FilesTreeWidget::suggest(){ + QModelIndexList currentSel = mView->selectionModel()->selectedRows(); + if(currentSel.isEmpty()){ + return; + } + qint64 size = 0; + foreach(QModelIndex curIdx, currentSel){ + qint64 curSize = curIdx.data(FilesTreeModel::SizeRole).value<qint64>(); + size += curSize; + } + qint64 dvdSize = SmGlobals::instance()->dvdSize(); + if(size > dvdSize){ + QMessageBox::critical(this, tr("Error"), tr("File too big for a single DVD")); + 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); +} + void FilesTreeWidget::fileSelectionChanged(const QModelIndex ¤t, const QModelIndex &previous){ Q_UNUSED(previous); int seriesPartId = current.data(FilesTreeModel::SeriesPartIdRole).toInt(); diff --git a/filestreewidget.h b/filestreewidget.h index 73e53b3..e5505de 100644 --- a/filestreewidget.h +++ b/filestreewidget.h @@ -39,6 +39,7 @@ class FilesTreeWidget : public QWidget { void moveToDirectory(); void fileProperties(); void edit(int column); + void suggest(); private slots: void fileSelectionChanged(const QModelIndex ¤t, const QModelIndex &previous); @@ -595,6 +595,8 @@ void SheMov::createActions(){ copyMapper->setMapping(mCopyWindowsDirA, ArchiveTreeView::WindowsDir); connect(mCopyWindowsDirA, SIGNAL(triggered()), copyMapper, SLOT(map())); connect(copyMapper, SIGNAL(mapped(int)), mATree, SLOT(copyPath(int))); + mSuggestFileA = new QAction(QIcon(":/analstretcher.png"), tr("Suggest file for burning"), this); + connect(mSuggestFileA, SIGNAL(triggered()), mATree->filesWidget(), SLOT(suggest())); // misc mOpenWithMapperFS = new QSignalMapper(this); @@ -676,6 +678,7 @@ void SheMov::createMenus(){ mTreeViewMenu->addAction(mShowLocalA); mTreeViewMenu->addAction(mShowArchivedA); mTreeViewMenu->addAction(mShowAllFilesA); + mTreeViewMenu->addAction(mSuggestFileA); QAction *sep14 = new QAction(this); sep14->setSeparator(true); mTreeViewMenu->addAction(sep14); @@ -792,6 +795,7 @@ void SheMov::createMenus(){ sep21->setSeparator(true); mATree->filesWidget()->filesTree()->addAction(sep20); mATree->filesWidget()->filesTree()->addAction(mShowAllFilesA); + mATree->filesWidget()->filesTree()->addAction(mSuggestFileA); QAction *sep8 = new QAction(this); sep8->setSeparator(true); mATree->filesWidget()->filesTree()->addAction(sep8); @@ -877,6 +881,7 @@ void SheMov::createToolBar(){ toolBar->addAction(mShowArchivedA); toolBar->addAction(mShowLocalA); toolBar->addAction(mShowAllFilesA); + toolBar->addAction(mSuggestFileA); toolBar->addSeparator(); toolBar->addActions(mFilterGroup->actions()); toolBar->addAction(mFilterFavoritesA); @@ -148,6 +148,7 @@ class SheMov : public QMainWindow { QAction *mCopyUnixDirA; QAction *mCopyWindowsFullPathA; QAction *mCopyWindowsDirA; + QAction *mSuggestFileA; //Filesystem View Actions QActionGroup *mFSHoverGroup; @@ -28,5 +28,6 @@ <file>spreadingpants.png</file> <file>dog_hood.png</file> <file>male_chastity_belt.png</file> + <file>analstretcher.png</file> </qresource> </RCC> diff --git a/smglobals.cpp b/smglobals.cpp index d521e9f..8e49726 100644 --- a/smglobals.cpp +++ b/smglobals.cpp @@ -137,7 +137,8 @@ SmGlobals::SmGlobals() : mPictureViewer(0), mFrameCache(0){ mIcons.insert("Spreading pants", ":/spreadingpants.png"); mIcons.insert("Leather dog hood", ":/dog_hood.png"); mIcons.insert("Male chastity belt", ":/male_chastity_belt.png"); - mDvdSize = Q_INT64_C(4707319808); + mIcons.insert("Anal stretcher", ":/analstretcher.png"); + mDvdSize = Q_INT64_C(4707319808) - 20 * 1024 *1024; } //FrameCache |