summaryrefslogtreecommitdiffstats
path: root/filewidget.cpp
diff options
context:
space:
mode:
authorArno <arno@disconnect.de>2016-11-10 05:02:44 +0100
committerArno <arno@disconnect.de>2016-11-10 05:02:44 +0100
commit5cde173217fd8cb1dbc21f3ac54f18e8234e709b (patch)
tree309980ee31734db8ca154694137c54a831f3e01a /filewidget.cpp
parent1d05ace3bdd9cd07012116b48f847b4a118e1af9 (diff)
downloadShemovCleaner-5cde173217fd8cb1dbc21f3ac54f18e8234e709b.tar.gz
ShemovCleaner-5cde173217fd8cb1dbc21f3ac54f18e8234e709b.tar.bz2
ShemovCleaner-5cde173217fd8cb1dbc21f3ac54f18e8234e709b.zip
New feature: Add Origin
Since SheMov now displays origin files (i.e. source files for a reencode), add an option here to add origin files for already archived movies. We guess the archived movie from the filename by cutting off the extension and look it up in the files table. If we find an archived movie with that filename, mark the source blue. Deactive "Add" if we don't find one or if we already have an origin.
Diffstat (limited to 'filewidget.cpp')
-rw-r--r--filewidget.cpp45
1 files changed, 41 insertions, 4 deletions
diff --git a/filewidget.cpp b/filewidget.cpp
index 216cce7..4b22b77 100644
--- a/filewidget.cpp
+++ b/filewidget.cpp
@@ -35,6 +35,7 @@
#include "filewidget.h"
#include "filesorter.h"
#include "filedisplay.h"
+#include "origindialog.h"
#include "helper.h"
#include "globals.h"
@@ -91,8 +92,13 @@ void FileWidget::setupGui(){
mQOrigin.prepare("SELECT COUNT(*) FROM files_origin WHERE cmd5sum = :md5");
mQFiles = QSqlQuery(mDb);
mQFiles.prepare("SELECT COUNT(*) FROM files WHERE cmd5sum = :md5");
+ mQSimilar = QSqlQuery(mDb);
+ mQSimilar.prepare("SELECT ifiles_id, tfilename FROM files WHERE tfilename ~ :fn AND files.ifiles_id NOT IN (SELECT ifiles_id FROM files_origin WHERE ifiles_id = files.ifiles_id)");
mFileDisplay = new FileDisplay(this);
+ mOrignDlg = new OriginDialog(this);
+ connect(mOrignDlg, SIGNAL(statusMessage(QString)), this, SIGNAL(statusMessage(QString)));
+ connect(mOrignDlg, SIGNAL(refreshNeeded()), this, SLOT(gatherData()));
mMenuBar = new QMenuBar;
mToolBar = new QToolBar;
mToolBar->setIconSize(QSize(16, 16));
@@ -139,6 +145,8 @@ void FileWidget::createActions(){
mPropertiesA = new QAction(QIcon(":/diaper.png"), tr("Properties..."), this);
mPropertiesA->setShortcut(Qt::CTRL + Qt::Key_Return);
connect(mPropertiesA, SIGNAL(triggered()), this, SLOT(properties()));
+ mAddAsOriginA = new QAction(QIcon(":/butt_plug.png"), tr("Add as Origin..."), this);
+ connect(mAddAsOriginA, SIGNAL(triggered()), this, SLOT(addAsOrigin()));
QMenu *fileMenu = new QMenu(tr("&File"));
fileMenu->addAction(mSelDirA);
@@ -156,6 +164,7 @@ void FileWidget::createActions(){
editMenu->addAction(mDeleteA);
editMenu->addSeparator();
editMenu->addAction(mPropertiesA);
+ editMenu->addAction(mAddAsOriginA);
editMenu->addSeparator();
editMenu->addAction(Globals::instance()->action(Globals::ConfigAction));
@@ -174,10 +183,11 @@ void FileWidget::createActions(){
mToolBar->addAction(mDeleteA);
mToolBar->addAction(createSeparator());
mToolBar->addAction(mPropertiesA);
+ mToolBar->addAction(mAddAsOriginA);
mToolBar->addAction(createSeparator());
mToolBar->addAction(Globals::instance()->action(Globals::ConfigAction));
- addActions(QList<QAction*>() << mDirBackA << mDirUpA << createSeparator() << mRefreshA << mSelDirA << createSeparator() << mCopyA << mCutA << mPasteA << mDeleteA << createSeparator() << mPropertiesA);
+ addActions(QList<QAction*>() << mDirBackA << mDirUpA << createSeparator() << mRefreshA << mSelDirA << createSeparator() << mCopyA << mCutA << mPasteA << mDeleteA << createSeparator() << mAddAsOriginA << mPropertiesA);
}
void FileWidget::fileData(const QString &fullPath, const QString &md5){
@@ -201,6 +211,7 @@ void FileWidget::gatherData(){
mModel->setHorizontalHeaderLabels(QStringList() << QChar(0x26A7) << tr("Name") << tr("MIME") << tr("Duration") << tr("MD5"));
QBrush redBrush(Qt::red);
QBrush greenBrush(Qt::darkGreen);
+ QBrush blueBrush(Qt::darkBlue);
QMimeDatabase db;
qApp->setOverrideCursor(Qt::BusyCursor);
@@ -238,9 +249,17 @@ void FileWidget::gatherData(){
fData[NameColumn]->setForeground(greenBrush);
attr = Present;
}else{
- fData[IconColumn]->setIcon(QIcon(":/chastity_belt.png"));
- fData[NameColumn]->setForeground(redBrush);
- attr = NotPresent;
+ QString complFn = fi.completeBaseName();
+ bool hasOrig = haveOrigin(complFn);
+ if(hasOrig){
+ fData[IconColumn]->setIcon(QIcon(":/butt_plug.png"));
+ fData[NameColumn]->setForeground(blueBrush);
+ attr = Origin;
+ }else{
+ fData[IconColumn]->setIcon(QIcon(":/chastity_belt.png"));
+ fData[NameColumn]->setForeground(redBrush);
+ attr = NotPresent;
+ }
}
QJsonDocument jDoc = Helper::ffpmegData(fi.absoluteFilePath());
QJsonObject jObj = jDoc.object();
@@ -299,6 +318,16 @@ int FileWidget::md5Count(const QString &md5) {
return retval;
}
+bool FileWidget::haveOrigin(const QString filename){
+ bool retval = false;
+ mQSimilar.bindValue(":fn", filename);
+ mQSimilar.exec();
+ while(mQSimilar.next()){
+ retval = true;
+ }
+ return retval;
+}
+
void FileWidget::readHeaderData(){
QSettings s;
QByteArray headers = s.value("video/fileheaders").toByteArray();
@@ -425,6 +454,14 @@ void FileWidget::selectFirst(){
}
}
+void FileWidget::addAsOrigin(){
+ mOrignDlg->clear();
+ QModelIndex idx = mFileView->selectionModel()->selectedRows().first();
+ QString fp = idx.data(FullPathRole).toString();
+ mOrignDlg->setSrctData(fp);
+ mOrignDlg->setDstData(fp);
+ mOrignDlg->show();
+}
void FileWidget::fileSelectionChanged(const QItemSelection &selected, const QItemSelection &deselected){
Q_UNUSED(selected);