diff options
author | Arno <arno@disconnect.de> | 2021-05-28 07:57:05 +0200 |
---|---|---|
committer | Arno <arno@disconnect.de> | 2021-05-28 07:57:05 +0200 |
commit | 62d3ca1482b202d2883eeb5e17e72300e8612477 (patch) | |
tree | 56df6cb9936f3621cd279427e95fb7e15065df57 | |
parent | 058ba694d3796673fdf044d6e4e0642ff8866dbc (diff) | |
download | SheMov-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.cpp | 17 | ||||
-rw-r--r-- | fswidget.h | 3 | ||||
-rw-r--r-- | searchdialog.cpp | 17 |
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; @@ -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(); } |