summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorArno <arno@disconnect.de>2021-05-28 07:57:05 +0200
committerArno <arno@disconnect.de>2021-05-28 07:57:05 +0200
commit62d3ca1482b202d2883eeb5e17e72300e8612477 (patch)
tree56df6cb9936f3621cd279427e95fb7e15065df57
parent058ba694d3796673fdf044d6e4e0642ff8866dbc (diff)
downloadSheMov-62d3ca1482b202d2883eeb5e17e72300e8612477.tar.gz
SheMov-62d3ca1482b202d2883eeb5e17e72300e8612477.tar.bz2
SheMov-62d3ca1482b202d2883eeb5e17e72300e8612477.zip
Make Origin MD5sums searchable
First, add a QAction to copy the MD5sum from FSWidget to Clipboard. Then enhance the SearchDialog to support MD5sums from files_origin *only*.
-rw-r--r--fswidget.cpp17
-rw-r--r--fswidget.h3
-rw-r--r--searchdialog.cpp17
3 files changed, 35 insertions, 2 deletions
diff --git a/fswidget.cpp b/fswidget.cpp
index 5bb4142..7bae773 100644
--- a/fswidget.cpp
+++ b/fswidget.cpp
@@ -22,6 +22,7 @@
#include <QMediaPlayer>
#include <QMediaPlaylist>
#include <QStringList>
+#include <QClipboard>
#include "fswidget.h"
#include "helper.h"
@@ -93,6 +94,9 @@ void FSWidget::setupWidget(){
connect(archivePicsA, &QAction::triggered, this, &FSWidget::archivePics);
connect(mNewPicsDlg, &NewPicsDialog::accepted, this, &FSWidget::refresh);
toolbar->addAction(archivePicsA);
+ QAction *copyMd5A = new QAction(QIcon(":/bizarre_amputee.png"), tr("Copy MD5"), this);
+ connect(copyMd5A, &QAction::triggered, this, &FSWidget::copyMD5);
+ toolbar->addAction(copyMd5A);
toolbar->addSeparator();
QAction *unpackA = new QAction(QIcon(":/dog_hood_light.png"), tr("Unpack"), this);
connect(unpackA, &QAction::triggered, this, &FSWidget::unpack);
@@ -204,7 +208,7 @@ void FSWidget::setupWidget(){
mFileView->sortByColumn(0, Qt::AscendingOrder);
connect(mFileView->selectionModel(), &QItemSelectionModel::selectionChanged, this, &FSWidget::calculateSelectionChanged);
- mFileView->addActions(QList<QAction*>() << playSelectedA << playRepeatMA << mPlayWithA << Helper::createSeparator(this) << backA << forwardA << Helper::createSeparator(this) << refreshA << deleteFilesA << Helper::createSeparator(this) << archiveMovieA << archivePicsA << Helper::createSeparator(this) << unpackA << previewA << compareA << selectFilterA << unselectAllA);
+ mFileView->addActions(QList<QAction*>() << playSelectedA << playRepeatMA << mPlayWithA << Helper::createSeparator(this) << backA << forwardA << Helper::createSeparator(this) << refreshA << deleteFilesA << Helper::createSeparator(this) << archiveMovieA << archivePicsA << copyMd5A << Helper::createSeparator(this) << unpackA << previewA << compareA << selectFilterA << unselectAllA);
QVBoxLayout *mainLayout = new QVBoxLayout;
mainLayout->addLayout(topWL);
@@ -452,6 +456,7 @@ void FSWidget::gatherData(const QString &curDir){
item->setData(seconds, DurationRole);
item->setData(mimeType.name(), MimeRole);
item->setData(dups, DupDataRole);
+ item->setData(md5, MD5SumRole);
items << item;
}
items[0]->setText(fi.fileName());
@@ -556,6 +561,16 @@ void FSWidget::archivePics(){
qApp->setActiveWindow(mNewPicsDlg);
}
+void FSWidget::copyMD5(){
+ QModelIndexList selected = mFileView->selectionModel()->selectedRows();
+ if(selected.isEmpty()){
+ return;
+ }
+ QString md5 = selected.first().data(MD5SumRole).toString();
+ QClipboard *clip = QGuiApplication::clipboard();
+ clip->setText(md5);
+}
+
void FSWidget::advanceDir(int by){
int dirCount = mDirCB->count();
int nextIdx = mDirCB->currentIndex() + by;
diff --git a/fswidget.h b/fswidget.h
index 0e1f9f7..aaf6f17 100644
--- a/fswidget.h
+++ b/fswidget.h
@@ -23,7 +23,7 @@ class VideoViewer;
class FSWidget : public QWidget {
Q_OBJECT
public:
- enum CustomRoles { FullPathRole = Qt::UserRole + 1, DurationRole = Qt::UserRole + 2, SizeRole = Qt::UserRole + 3, MimeRole = Qt::UserRole + 4, DupDataRole = Qt::UserRole + 5 };
+ enum CustomRoles { FullPathRole = Qt::UserRole + 1, DurationRole = Qt::UserRole + 2, SizeRole = Qt::UserRole + 3, MimeRole = Qt::UserRole + 4, DupDataRole = Qt::UserRole + 5, MD5SumRole = Qt::UserRole + 6 };
explicit FSWidget(QWidget *parent = nullptr);
QString wTitle;
~FSWidget();
@@ -40,6 +40,7 @@ class FSWidget : public QWidget {
void deleteFiles();
void archiveMovie();
void archivePics();
+ void copyMD5();
void advanceDir(int by);
int queryCount(QSqlQuery &q, const QString &arg);
void filterMime(const QString &mime);
diff --git a/searchdialog.cpp b/searchdialog.cpp
index 5c155b9..788c468 100644
--- a/searchdialog.cpp
+++ b/searchdialog.cpp
@@ -122,6 +122,23 @@ void FilenamesAndMetadata::search(){
if(ctr == 0){
appendEmpty(filenameItem);
}
+
+ //search md5sums
+ QSqlQuery md5sumQ(db);
+ md5sumQ.prepare("SELECT tfilename, iseriespart_id, series.tseries_name, seriesparts.tsubtitle FROM files, files_origin, seriesparts, series WHERE files_origin.cmd5sum = :md5 AND files_origin.ifiles_id = files.ifiles_id AND files.iseriespart_id = seriesparts.iseriesparts_id AND seriesparts.iseries_id = series.iseries_id");
+ md5sumQ.bindValue(":md5", mSearch->text());
+ SmTreeItem *md5Item = new SmTreeItem(QVariantList() << tr("MD5 Sums") << QVariant() << QVariant(), root);
+ root->appendChild(md5Item);
+ ctr = 0;
+ md5sumQ.exec();
+ while(md5sumQ.next()){
+ ++ctr;
+ appendChild(md5sumQ.value(1), md5sumQ.value(0), md5sumQ.value(2), md5sumQ.value(3), md5Item);
+ }
+ if(ctr == 0){
+ appendEmpty(md5Item);
+ }
+
mModel->setRoot(root);
mResult->expandAll();
}