summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--analstretcher.pngbin0 -> 925 bytes
-rw-r--r--filestreemodel.cpp17
-rw-r--r--filestreemodel.h4
-rw-r--r--filestreewidget.cpp37
-rw-r--r--filestreewidget.h1
-rw-r--r--shemov.cpp5
-rw-r--r--shemov.h1
-rw-r--r--shemov.qrc1
-rw-r--r--smglobals.cpp3
9 files changed, 58 insertions, 11 deletions
diff --git a/analstretcher.png b/analstretcher.png
new file mode 100644
index 0000000..3e3918f
--- /dev/null
+++ b/analstretcher.png
Binary files differ
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 &current, 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 &current, const QModelIndex &previous);
diff --git a/shemov.cpp b/shemov.cpp
index cf49b57..b1b8fbe 100644
--- a/shemov.cpp
+++ b/shemov.cpp
@@ -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);
diff --git a/shemov.h b/shemov.h
index bf4cc93..94a3587 100644
--- a/shemov.h
+++ b/shemov.h
@@ -148,6 +148,7 @@ class SheMov : public QMainWindow {
QAction *mCopyUnixDirA;
QAction *mCopyWindowsFullPathA;
QAction *mCopyWindowsDirA;
+ QAction *mSuggestFileA;
//Filesystem View Actions
QActionGroup *mFSHoverGroup;
diff --git a/shemov.qrc b/shemov.qrc
index 37b4f6d..2c4028e 100644
--- a/shemov.qrc
+++ b/shemov.qrc
@@ -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