From 8adf3061fecbdee91e9db9f73efd5b456373f367 Mon Sep 17 00:00:00 2001 From: Martin Rotter Date: Fri, 22 Apr 2022 20:34:30 +0200 Subject: [PATCH] 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 }