From 8adf3061fecbdee91e9db9f73efd5b456373f367 Mon Sep 17 00:00:00 2001 From: Martin Rotter Date: Fri, 22 Apr 2022 20:34:30 +0200 Subject: [PATCH 1/3] enhance article list filtering options even more --- src/librssguard/core/messagesmodel.cpp | 5 +-- src/librssguard/core/messagesmodel.h | 15 +++---- src/librssguard/core/messagesproxymodel.cpp | 8 ++++ src/librssguard/core/messagesproxymodel.h | 4 +- .../gui/toolbars/messagestoolbar.cpp | 41 ++++++++++++++----- 5 files changed, 48 insertions(+), 25 deletions(-) diff --git a/src/librssguard/core/messagesmodel.cpp b/src/librssguard/core/messagesmodel.cpp index 8b97a4a1e..cb4eeb37e 100644 --- a/src/librssguard/core/messagesmodel.cpp +++ b/src/librssguard/core/messagesmodel.cpp @@ -86,8 +86,8 @@ MessagesView* MessagesModel::view() const { return m_view; } -void MessagesModel::setView(MessagesView* newView) { - m_view = newView; +void MessagesModel::setView(MessagesView* new_view) { + m_view = new_view; } MessagesModelCache* MessagesModel::cache() const { @@ -773,7 +773,6 @@ QVariant MessagesModel::headerData(int section, Qt::Orientation orientation, int switch (role) { case Qt::DisplayRole: - // Display textual headers for all columns except "read" and // "important" and "has enclosures" columns. if (section != MSG_DB_READ_INDEX && section != MSG_DB_IMPORTANT_INDEX && section != MSG_DB_SCORE_INDEX && diff --git a/src/librssguard/core/messagesmodel.h b/src/librssguard/core/messagesmodel.h index 8524d75a9..8d90c7345 100644 --- a/src/librssguard/core/messagesmodel.h +++ b/src/librssguard/core/messagesmodel.h @@ -17,17 +17,12 @@ class MessagesView; class MessagesModelCache; class MessagesModel : public QSqlQueryModel, public MessagesModelSqlLayer { - Q_OBJECT + Q_OBJECT public: - // Enum which describes basic highlighting schemes // for messages. - enum class MessageHighlighter { - NoHighlighting = 100, - HighlightUnread = 101, - HighlightImportant = 102 - }; + enum class MessageHighlighter { NoHighlighting = 100, HighlightUnread = 101, HighlightImportant = 102 }; // Constructors and destructors. explicit MessagesModel(QObject* parent = nullptr); @@ -76,7 +71,9 @@ class MessagesModel : public QSqlQueryModel, public MessagesModelSqlLayer { void loadMessages(RootItem* item); MessagesView* view() const; - void setView(MessagesView* newView); + void setView(MessagesView* new_view); + + static QIcon generateIconForScore(double score); public slots: @@ -89,8 +86,6 @@ class MessagesModel : public QSqlQueryModel, public MessagesModelSqlLayer { void setupHeaderData(); void setupIcons(); - static QIcon generateIconForScore(double score); - private: MessagesView* m_view; MessagesModelCache* m_cache; diff --git a/src/librssguard/core/messagesproxymodel.cpp b/src/librssguard/core/messagesproxymodel.cpp index 22582ec2d..4156b0495 100644 --- a/src/librssguard/core/messagesproxymodel.cpp +++ b/src/librssguard/core/messagesproxymodel.cpp @@ -155,6 +155,14 @@ bool MessagesProxyModel::filterAcceptsMessage(const Message& current_message) co return currentDate.addDays(-7).year() == current_message.m_created.date().year() && currentDate.addDays(-7).weekNumber() == current_message.m_created.date().weekNumber(); } + + case MessageListFilter::ShowOnlyWithAttachments: { + return current_message.m_enclosures.size() > 0; + } + + case MessageListFilter::ShowOnlyWithScore: { + return current_message.m_score > MSG_SCORE_MIN; + } } return false; diff --git a/src/librssguard/core/messagesproxymodel.h b/src/librssguard/core/messagesproxymodel.h index c17f14bde..02efc1a32 100644 --- a/src/librssguard/core/messagesproxymodel.h +++ b/src/librssguard/core/messagesproxymodel.h @@ -23,7 +23,9 @@ class MessagesProxyModel : public QSortFilterProxyModel { ShowLast24Hours = 105, ShowLast48Hours = 106, ShowThisWeek = 107, - ShowLastWeek = 108 + ShowLastWeek = 108, + ShowOnlyWithAttachments = 109, + ShowOnlyWithScore = 110 }; explicit MessagesProxyModel(MessagesModel* source_model, QObject* parent = nullptr); diff --git a/src/librssguard/gui/toolbars/messagestoolbar.cpp b/src/librssguard/gui/toolbars/messagestoolbar.cpp index 357be0f61..b8ae4873c 100644 --- a/src/librssguard/gui/toolbars/messagestoolbar.cpp +++ b/src/librssguard/gui/toolbars/messagestoolbar.cpp @@ -7,11 +7,11 @@ #include "miscellaneous/iconfactory.h" #include "miscellaneous/settings.h" -#include #include #include #include #include +#include using namespace std::chrono_literals; @@ -124,7 +124,8 @@ void MessagesToolBar::initializeSearchBox() { m_tmrSearchPattern->setSingleShot(true); m_txtSearchMessages = new BaseLineEdit(this); - m_txtSearchMessages->setSizePolicy(QSizePolicy::Policy::Expanding, m_txtSearchMessages->sizePolicy().verticalPolicy()); + m_txtSearchMessages->setSizePolicy(QSizePolicy::Policy::Expanding, + m_txtSearchMessages->sizePolicy().verticalPolicy()); m_txtSearchMessages->setPlaceholderText(tr("Search articles (regex only)")); // Setup wrapping action for search box. @@ -140,7 +141,11 @@ void MessagesToolBar::initializeSearchBox() { }); } -void MessagesToolBar::addActionToMenu(QMenu* menu, const QIcon& icon, const QString& title, const QVariant& value, const QString& name) { +void MessagesToolBar::addActionToMenu(QMenu* menu, + const QIcon& icon, + const QString& title, + const QVariant& value, + const QString& name) { QAction* action = menu->addAction(icon, title); action->setData(value); @@ -211,6 +216,16 @@ void MessagesToolBar::initializeHighlighter() { tr("Show last week's articles"), QVariant::fromValue(MessagesProxyModel::MessageListFilter::ShowLastWeek), "show_last_week"); + addActionToMenu(m_menuMessageFilter, + qApp->icons()->fromTheme(QSL("mail-attachment")), + tr("Show only articles with attachments"), + QVariant::fromValue(MessagesProxyModel::MessageListFilter::ShowOnlyWithAttachments), + "show_with_attachments"); + addActionToMenu(m_menuMessageFilter, + MessagesModel::generateIconForScore(MSG_SCORE_MAX / 2.0), + tr("Show only articles with some score"), + QVariant::fromValue(MessagesProxyModel::MessageListFilter::ShowOnlyWithScore), + "show_with_score"); m_btnMessageHighlighter = new QToolButton(this); m_btnMessageHighlighter->setToolTip(tr("Display all articles")); @@ -244,7 +259,8 @@ void MessagesToolBar::saveToolButtonSelection(const QString& button_name, const for (QString& action_name : action_names) { if (action_name.startsWith(button_name)) { - action_name = button_name + (action->objectName().isEmpty() ? "" : "[" + action->objectName().toStdString() + "]").c_str(); + action_name = + button_name + (action->objectName().isEmpty() ? "" : "[" + action->objectName().toStdString() + "]").c_str(); } } @@ -270,21 +286,24 @@ void MessagesToolBar::activateAction(const QString& action_name, QWidgetAction* } QStringList MessagesToolBar::defaultActions() const { - return QString(GUI::MessagesToolbarDefaultButtonsDef).split(QL1C(','), + return QString(GUI::MessagesToolbarDefaultButtonsDef) + .split(QL1C(','), #if QT_VERSION >= 0x050F00 // Qt >= 5.15.0 - Qt::SplitBehaviorFlags::SkipEmptyParts); + Qt::SplitBehaviorFlags::SkipEmptyParts); #else - QString::SplitBehavior::SkipEmptyParts); + QString::SplitBehavior::SkipEmptyParts); #endif } QStringList MessagesToolBar::savedActions() const { - return qApp->settings()->value(GROUP(GUI), - SETTING(GUI::MessagesToolbarDefaultButtons)).toString().split(QL1C(','), + return qApp->settings() + ->value(GROUP(GUI), SETTING(GUI::MessagesToolbarDefaultButtons)) + .toString() + .split(QL1C(','), #if QT_VERSION >= 0x050F00 // Qt >= 5.15.0 - Qt::SplitBehaviorFlags::SkipEmptyParts); + Qt::SplitBehaviorFlags::SkipEmptyParts); #else - QString::SplitBehavior::SkipEmptyParts); + QString::SplitBehavior::SkipEmptyParts); #endif } From 3360ca8d6ef7349d8b88ddb1985493e3078b05dc Mon Sep 17 00:00:00 2001 From: Martin Rotter Date: Fri, 22 Apr 2022 20:51:13 +0200 Subject: [PATCH 2/3] better placeholder icon --- resources/graphics/misc/image-placeholder.png | Bin 342 -> 10057 bytes .../qtextbrowser/textbrowserviewer.cpp | 8 +++++--- .../qtextbrowser/textbrowserviewer.h | 2 ++ 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/resources/graphics/misc/image-placeholder.png b/resources/graphics/misc/image-placeholder.png index fada9038b7baf221b7db2bf46d0757c292271982..2763f62e4a373b8ae3218d8bdc6074de3f35b4d3 100644 GIT binary patch literal 10057 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 OFnGH9xvXicons()->miscPixmap("image-placeholder")) {} QVariant TextBrowserDocument::loadResource(int type, const QUrl& name) { if (!m_reloadingWithResources) { @@ -451,12 +453,12 @@ QVariant TextBrowserDocument::loadResource(int type, const QUrl& name) { m_neededResourcesForHtml.append(name); } - return {}; + return m_placeholderImage; } else if (m_loadedResources.contains(name)) { return QImage::fromData(m_loadedResources.value(name)); } else { - return {}; + return m_placeholderImage; } } diff --git a/src/librssguard/gui/webviewers/qtextbrowser/textbrowserviewer.h b/src/librssguard/gui/webviewers/qtextbrowser/textbrowserviewer.h index c1dc22c49..3cf175a7d 100644 --- a/src/librssguard/gui/webviewers/qtextbrowser/textbrowserviewer.h +++ b/src/librssguard/gui/webviewers/qtextbrowser/textbrowserviewer.h @@ -9,6 +9,7 @@ #include "network-web/adblock/adblockmanager.h" +#include #include class QContextMenuEvent; @@ -31,6 +32,7 @@ class TextBrowserDocument : public QTextDocument { bool m_reloadingWithResources; QList m_neededResourcesForHtml; QMap m_loadedResources; + QPixmap m_placeholderImage; }; class TextBrowserViewer : public QTextBrowser, public WebViewer { From 92fc20c8241e539d388bf8d2c1b9c1cf8042c9a5 Mon Sep 17 00:00:00 2001 From: martinrotter Date: Tue, 26 Apr 2022 07:59:28 +0200 Subject: [PATCH 3/3] Update Documentation.md --- resources/docs/Documentation.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/docs/Documentation.md b/resources/docs/Documentation.md index e51769298..85e39b60e 100644 --- a/resources/docs/Documentation.md +++ b/resources/docs/Documentation.md @@ -343,7 +343,7 @@ However, if you choose `Script` option, then you cannot provide URL of your feed Any errors in your script must be written to [error output](https://en.wikipedia.org/wiki/Standard_streams#Standard_error_(stderr)). -> **As of RSS Guard 4.2.0, you do not have to separate your arguments with `#`. If your argument contains spaces, then enclose it with DOUBLE quotes, for example `"my argument"`. DO NOT use SINGLE quotes to do that.** +> **As of RSS Guard 4.2.0, you cannot separate your arguments with `#`. If your argument contains spaces, then enclose it with DOUBLE quotes, for example `"my argument"`. DO NOT use SINGLE quotes to do that.** If everything goes well, script must return `0` as the process exit code, or a non-zero exit code if some error happened.