diff options
author | Arno <arno@disconnect.de> | 2018-01-27 18:10:04 +0100 |
---|---|---|
committer | Arno <arno@disconnect.de> | 2018-01-27 18:10:04 +0100 |
commit | 1c318d543c7a49fa57ac2acb3de999b8718a7621 (patch) | |
tree | 5b36ea8f4e3898fcde7ba7c3967692ff76cf716d | |
parent | e8e06044c3fcc1cd36deb52a42538ebec3a1e602 (diff) | |
download | ShemovCleaner-1c318d543c7a49fa57ac2acb3de999b8718a7621.tar.gz ShemovCleaner-1c318d543c7a49fa57ac2acb3de999b8718a7621.tar.bz2 ShemovCleaner-1c318d543c7a49fa57ac2acb3de999b8718a7621.zip |
New feature: Guess subject
If a descript.ion file exists in the current directory of fileWidget,
read the subjects into a QStringList to determine the usenet subject
from within ShemovCleaner.
No more tedious task switching to the usenet client, just trigger "Guess
subject..." :)
-rw-r--r-- | filewidget.cpp | 50 | ||||
-rw-r--r-- | filewidget.h | 4 |
2 files changed, 53 insertions, 1 deletions
diff --git a/filewidget.cpp b/filewidget.cpp index decedd9..9996ae3 100644 --- a/filewidget.cpp +++ b/filewidget.cpp @@ -32,6 +32,9 @@ #include <QContextMenuEvent> #include <QDirIterator> #include <QComboBox> +#include <QTextStream> +#include <QApplication> +#include <QClipboard> #include "filewidget.h" #include "filesorter.h" @@ -183,6 +186,8 @@ void FileWidget::createActions(){ connect(mRemoveFromCacheA, &QAction::triggered, this, &FileWidget::removeFromCache); mClearCacheA = new QAction(QIcon(":/male_chastity_belt.png"), tr("Clear..."), this); connect(mClearCacheA, &QAction::triggered, this, &FileWidget::clearCache); + mGuessSubjectA = new QAction(QIcon(":/bizarre_amputee.png"), tr("Guess subject..."), this); + connect(mGuessSubjectA, &QAction::triggered, this, &FileWidget::guessSubject); QMenu *fileMenu = new QMenu(tr("&File")); fileMenu->addAction(mSelDirA); @@ -199,6 +204,8 @@ void FileWidget::createActions(){ editMenu->addAction(mDirUpA); editMenu->addAction(mDirBackA); editMenu->addSeparator(); + editMenu->addAction(mGuessSubjectA); + editMenu->addSeparator(); editMenu->addAction(mCopyA); editMenu->addAction(mCutA); editMenu->addAction(mPasteA); @@ -228,10 +235,11 @@ void FileWidget::createActions(){ mToolBar->addAction(mPreviewA); mToolBar->addAction(createSeparator()); mToolBar->addAction(mAddAsOriginA); + mToolBar->addAction(mGuessSubjectA); mToolBar->addAction(createSeparator()); mToolBar->addAction(Globals::instance()->action(Globals::ConfigAction)); - addActions(QList<QAction*>() << mDirBackA << mDirUpA << createSeparator() << mRefreshA << mSelDirA << createSeparator() << mCopyA << mCutA << mPasteA << mDeleteA << createSeparator() << mAddAsOriginA << createSeparator() << mPreviewA << createSeparator() << mPropertiesA); + addActions(QList<QAction*>() << mGuessSubjectA << createSeparator() << mRefreshA << mSelDirA << createSeparator() << mCopyA << mCutA << mPasteA << mDeleteA << createSeparator() << mAddAsOriginA << createSeparator() << mPreviewA << createSeparator() << mPropertiesA); } void FileWidget::fileData(const QString &fullPath, const QString &md5){ @@ -343,6 +351,7 @@ void FileWidget::gatherData(){ } mFileView->setSortingEnabled(true); readHeaderData(); + readDescriptION(); qApp->restoreOverrideCursor(); selectFirst(); double totalSizeGB = totalSize / 1024 / 1024 / 1024.0; @@ -350,6 +359,45 @@ void FileWidget::gatherData(){ emit freeSpaceChanged(mDir->text()); } +void FileWidget::readDescriptION(){ + mDescript.clear(); + QString fileName = QString("%1/descript.ion").arg(mDir->text()); + QFile descFile(fileName); + if(descFile.open(QFile::ReadOnly)){ + QTextStream in(&descFile); + QString line; + while(in.readLineInto(&line)){ + QStringList parts = line.split(','); + if(!parts.isEmpty()){ + mDescript << parts.at(0); + } + } + } + std::sort(mDescript.begin(), mDescript.end()); +} + +void FileWidget::guessSubject(){ + QModelIndexList sel = mFileView->selectionModel()->selectedRows(NameColumn); + if(!sel.isEmpty()){ + QString fn = QString(".*\\Q%1\\E.*").arg(sel.first().data().toString()); + const QRegularExpression fnRe(fn); + int index = mDescript.indexOf(fnRe); + if(index > -1){ + QString subject(mDescript.at(index)); + if(subject.startsWith('"')){ + int nextQuot = subject.indexOf('"', 1); + if(nextQuot > -1){ + subject = subject.remove(0, nextQuot + 1).trimmed(); + } + } + qApp->clipboard()->setText(subject); + emit statusMessage(subject); + }else{ + emit statusMessage(tr("No subject found!")); + } + } +} + int FileWidget::md5Count(const QString &md5) { mQOrigin.bindValue(":md5", md5); mQOrigin.exec(); diff --git a/filewidget.h b/filewidget.h index eed1692..3c75c6f 100644 --- a/filewidget.h +++ b/filewidget.h @@ -58,6 +58,8 @@ class FileWidget : public QWidget { void cdLast(); void deleteFiles(); void gatherData(); + void readDescriptION(); + void guessSubject(); void selectDir(); void properties(); void properties(const QModelIndex &idx); @@ -123,6 +125,7 @@ class FileWidget : public QWidget { QAction *mAddAsOriginA; QAction *mRemoveFromCacheA; QAction *mClearCacheA; + QAction *mGuessSubjectA; ProgressDialog *mCopyProgress; FileDisplay *mFileDisplay; VideoSorter *mProxy; @@ -132,6 +135,7 @@ class FileWidget : public QWidget { QComboBox *mFavDirs; QComboBox *mMimeFilters; int mFileAction; + QStringList mDescript; }; #endif // FILEWIDGET_H |