From c5bd83e6afa2393382d358076eddb660aeec687f Mon Sep 17 00:00:00 2001 From: Martin Rotter Date: Fri, 28 Aug 2020 07:37:49 +0200 Subject: [PATCH] Fixed #84 + properly display parent categories icon in "edit feed" dialog. --- resources/text/CHANGELOG | 2 +- src/librssguard/gui/discoverfeedsbutton.cpp | 2 +- src/librssguard/gui/feedsview.cpp | 4 +-- .../services/abstract/gui/formfeeddetails.cpp | 4 +-- .../services/abstract/rootitem.cpp | 28 +++++++++++-------- src/librssguard/services/abstract/rootitem.h | 4 +++ .../services/abstract/serviceroot.cpp | 3 +- .../services/abstract/serviceroot.h | 2 +- .../inoreader/inoreaderserviceroot.cpp | 6 ---- .../services/inoreader/inoreaderserviceroot.h | 2 -- .../services/owncloud/owncloudfeed.cpp | 2 +- .../services/owncloud/owncloudserviceroot.cpp | 8 +++--- .../services/owncloud/owncloudserviceroot.h | 3 +- .../services/standard/standardfeed.cpp | 5 ++-- .../services/standard/standardserviceroot.cpp | 9 +++--- .../services/standard/standardserviceroot.h | 2 +- src/librssguard/services/tt-rss/ttrssfeed.cpp | 2 +- .../services/tt-rss/ttrssserviceroot.cpp | 10 +++---- .../services/tt-rss/ttrssserviceroot.h | 3 +- 19 files changed, 50 insertions(+), 51 deletions(-) diff --git a/resources/text/CHANGELOG b/resources/text/CHANGELOG index c8d62be8c..bc0157820 100644 --- a/resources/text/CHANGELOG +++ b/resources/text/CHANGELOG @@ -4,7 +4,7 @@ Added: ▪ Gmail plugin is now able to send e-mail messages and also reply to them. ▪ Branch arrows in feeds list can now be displayed. -▪ Changes if read/important field in a message from a message filter are now synced +▪ Changes of read/important field in a message from a message filter are now synced back to online services. (#258) ▪ Filterin mechanism now accepts constants named "MSG_ACCEPT" and "MSG_IGNORE" which can be used instead of hardcoded values "1" and "2". diff --git a/src/librssguard/gui/discoverfeedsbutton.cpp b/src/librssguard/gui/discoverfeedsbutton.cpp index ce6fa6d0f..e81c451eb 100644 --- a/src/librssguard/gui/discoverfeedsbutton.cpp +++ b/src/librssguard/gui/discoverfeedsbutton.cpp @@ -48,7 +48,7 @@ void DiscoverFeedsButton::linkTriggered(QAction* action) { ServiceRoot* root = static_cast(action->property("root").value()); if (root->supportsFeedAdding()) { - root->addNewFeed(url); + root->addNewFeed(qApp->mainForm()->tabWidget()->feedMessageViewer()->feedsView()->selectedItem(), url); } else { qApp->showGuiMessage(tr("Not supported"), diff --git a/src/librssguard/gui/feedsview.cpp b/src/librssguard/gui/feedsview.cpp index e01b2f014..17a4d3e3c 100755 --- a/src/librssguard/gui/feedsview.cpp +++ b/src/librssguard/gui/feedsview.cpp @@ -155,13 +155,13 @@ void FeedsView::sortByColumn(int column, Qt::SortOrder order) { } void FeedsView::addFeedIntoSelectedAccount() { - const RootItem* selected = selectedItem(); + RootItem* selected = selectedItem(); if (selected != nullptr) { ServiceRoot* root = selected->getParentServiceRoot(); if (root->supportsFeedAdding()) { - root->addNewFeed(); + root->addNewFeed(selected); } else { qApp->showGuiMessage(tr("Not supported"), diff --git a/src/librssguard/services/abstract/gui/formfeeddetails.cpp b/src/librssguard/services/abstract/gui/formfeeddetails.cpp index 8f43f8a55..fff5fc7ba 100644 --- a/src/librssguard/services/abstract/gui/formfeeddetails.cpp +++ b/src/librssguard/services/abstract/gui/formfeeddetails.cpp @@ -378,12 +378,12 @@ void FormFeedDetails::initialize() { } void FormFeedDetails::loadCategories(const QList& categories, RootItem* root_item) { - m_ui->m_cmbParentCategory->addItem(root_item->icon(), + m_ui->m_cmbParentCategory->addItem(root_item->fullIcon(), root_item->title(), QVariant::fromValue((void*) root_item)); for (Category* category : categories) { - m_ui->m_cmbParentCategory->addItem(category->icon(), + m_ui->m_cmbParentCategory->addItem(category->fullIcon(), category->title(), QVariant::fromValue((void*) category)); } diff --git a/src/librssguard/services/abstract/rootitem.cpp b/src/librssguard/services/abstract/rootitem.cpp index 74e05e6a4..6c6212414 100644 --- a/src/librssguard/services/abstract/rootitem.cpp +++ b/src/librssguard/services/abstract/rootitem.cpp @@ -171,18 +171,7 @@ QVariant RootItem::data(int column, int role) const { case Qt::DecorationRole: if (column == FDS_MODEL_TITLE_INDEX) { - QIcon ico = icon(); - - if (ico.isNull()) { - if (kind() == RootItem::Kind::Feed) { - return qApp->icons()->fromTheme(QSL("application-rss+xml")); - } - else if (kind() == RootItem::Kind::Category) { - return qApp->icons()->fromTheme(QSL("folder")); - } - } - - return ico; + return fullIcon(); } else { return QVariant(); @@ -398,6 +387,21 @@ void RootItem::setIcon(const QIcon& icon) { m_icon = icon; } +QIcon RootItem::fullIcon() const { + QIcon ico = icon(); + + if (ico.isNull()) { + if (kind() == RootItem::Kind::Feed) { + return qApp->icons()->fromTheme(QSL("application-rss+xml")); + } + else if (kind() == RootItem::Kind::Category) { + return qApp->icons()->fromTheme(QSL("folder")); + } + } + + return ico; +} + int RootItem::id() const { return m_id; } diff --git a/src/librssguard/services/abstract/rootitem.h b/src/librssguard/services/abstract/rootitem.h index f3392161a..4c022c02d 100644 --- a/src/librssguard/services/abstract/rootitem.h +++ b/src/librssguard/services/abstract/rootitem.h @@ -172,6 +172,10 @@ class RSSGUARD_DLLSPEC RootItem : public QObject { QIcon icon() const; void setIcon(const QIcon& icon); + // Returns icon, even if item has "default" icon set, then + // this icon is extra loaded and returned. + QIcon fullIcon() const; + // This ALWAYS represents primary column number/ID under which // the item is stored in DB. int id() const; diff --git a/src/librssguard/services/abstract/serviceroot.cpp b/src/librssguard/services/abstract/serviceroot.cpp index 6fd3d5db4..25fcbebc1 100644 --- a/src/librssguard/services/abstract/serviceroot.cpp +++ b/src/librssguard/services/abstract/serviceroot.cpp @@ -266,7 +266,8 @@ void ServiceRoot::requestItemRemoval(RootItem* item) { emit itemRemovalRequested(item); } -void ServiceRoot::addNewFeed(const QString& url) { +void ServiceRoot::addNewFeed(RootItem* selected_item, const QString& url) { + Q_UNUSED(selected_item) Q_UNUSED(url) } diff --git a/src/librssguard/services/abstract/serviceroot.h b/src/librssguard/services/abstract/serviceroot.h index 37328ce4c..e2192c563 100644 --- a/src/librssguard/services/abstract/serviceroot.h +++ b/src/librssguard/services/abstract/serviceroot.h @@ -158,7 +158,7 @@ class ServiceRoot : public RootItem { virtual bool onAfterMessagesRestoredFromBin(RootItem* selected_item, const QList& messages); public slots: - virtual void addNewFeed(const QString& url = QString()); + virtual void addNewFeed(RootItem* selected_item, const QString& url = QString()); virtual void addNewCategory(); virtual void syncIn(); diff --git a/src/librssguard/services/inoreader/inoreaderserviceroot.cpp b/src/librssguard/services/inoreader/inoreaderserviceroot.cpp index 7931487ea..dd0ad38c8 100644 --- a/src/librssguard/services/inoreader/inoreaderserviceroot.cpp +++ b/src/librssguard/services/inoreader/inoreaderserviceroot.cpp @@ -138,12 +138,6 @@ RootItem* InoreaderServiceRoot::obtainNewTreeForSyncIn() const { return m_network->feedsCategories(true); } -void InoreaderServiceRoot::addNewFeed(const QString& url) { - Q_UNUSED(url) -} - -void InoreaderServiceRoot::addNewCategory() {} - void InoreaderServiceRoot::saveAllCachedData(bool async) { QPair, QMap>> msgCache = takeMessageCache(); QMapIterator i(msgCache.first); diff --git a/src/librssguard/services/inoreader/inoreaderserviceroot.h b/src/librssguard/services/inoreader/inoreaderserviceroot.h index d580ff070..4b89c25fb 100644 --- a/src/librssguard/services/inoreader/inoreaderserviceroot.h +++ b/src/librssguard/services/inoreader/inoreaderserviceroot.h @@ -38,8 +38,6 @@ class InoreaderServiceRoot : public ServiceRoot, public CacheForServiceRoot { void saveAllCachedData(bool async = true); public slots: - void addNewFeed(const QString& url); - void addNewCategory(); void updateTitle(); private: diff --git a/src/librssguard/services/owncloud/owncloudfeed.cpp b/src/librssguard/services/owncloud/owncloudfeed.cpp index 7de657def..eee429bb0 100644 --- a/src/librssguard/services/owncloud/owncloudfeed.cpp +++ b/src/librssguard/services/owncloud/owncloudfeed.cpp @@ -24,7 +24,7 @@ bool OwnCloudFeed::editViaGui() { QScopedPointer form_pointer(new FormOwnCloudFeedDetails(serviceRoot(), qApp->mainFormWidget())); - form_pointer->addEditFeed(this, nullptr); + form_pointer->addEditFeed(this, this); return false; } diff --git a/src/librssguard/services/owncloud/owncloudserviceroot.cpp b/src/librssguard/services/owncloud/owncloudserviceroot.cpp index a271e5003..e930b0299 100644 --- a/src/librssguard/services/owncloud/owncloudserviceroot.cpp +++ b/src/librssguard/services/owncloud/owncloudserviceroot.cpp @@ -155,7 +155,9 @@ void OwnCloudServiceRoot::saveAccountDataToDatabase() { } } -void OwnCloudServiceRoot::addNewFeed(const QString& url) { +void OwnCloudServiceRoot::addNewFeed(RootItem* selected_item, const QString& url) { + Q_UNUSED(selected_item) + if (!qApp->feedUpdateLock()->tryLock()) { // Lock was not obtained because // it is used probably by feed updater or application @@ -170,12 +172,10 @@ void OwnCloudServiceRoot::addNewFeed(const QString& url) { QScopedPointer form_pointer(new FormOwnCloudFeedDetails(this, qApp->mainFormWidget())); - form_pointer->addEditFeed(nullptr, this, url); + form_pointer->addEditFeed(nullptr, selected_item, url); qApp->feedUpdateLock()->unlock(); } -void OwnCloudServiceRoot::addNewCategory() {} - RootItem* OwnCloudServiceRoot::obtainNewTreeForSyncIn() const { OwnCloudGetFeedsCategoriesResponse feed_cats_response = m_network->feedsCategories(); diff --git a/src/librssguard/services/owncloud/owncloudserviceroot.h b/src/librssguard/services/owncloud/owncloudserviceroot.h index f1c4c1733..f02dd0f95 100644 --- a/src/librssguard/services/owncloud/owncloudserviceroot.h +++ b/src/librssguard/services/owncloud/owncloudserviceroot.h @@ -37,8 +37,7 @@ class OwnCloudServiceRoot : public ServiceRoot, public CacheForServiceRoot { void saveAllCachedData(bool async = true); public slots: - void addNewFeed(const QString& url); - void addNewCategory(); + void addNewFeed(RootItem* selected_item, const QString& url); private: RootItem* obtainNewTreeForSyncIn() const; diff --git a/src/librssguard/services/standard/standardfeed.cpp b/src/librssguard/services/standard/standardfeed.cpp index 8b2e1e415..897702107 100644 --- a/src/librssguard/services/standard/standardfeed.cpp +++ b/src/librssguard/services/standard/standardfeed.cpp @@ -76,9 +76,10 @@ StandardServiceRoot* StandardFeed::serviceRoot() const { } bool StandardFeed::editViaGui() { - QScopedPointer form_pointer(new FormStandardFeedDetails(serviceRoot(), qApp->mainFormWidget())); + QScopedPointer form_pointer(new FormStandardFeedDetails(serviceRoot(), + qApp->mainFormWidget())); - form_pointer.data()->addEditFeed(this, nullptr); + form_pointer->addEditFeed(this, this); return false; } diff --git a/src/librssguard/services/standard/standardserviceroot.cpp b/src/librssguard/services/standard/standardserviceroot.cpp index 185f16cb9..2076aa315 100644 --- a/src/librssguard/services/standard/standardserviceroot.cpp +++ b/src/librssguard/services/standard/standardserviceroot.cpp @@ -105,7 +105,7 @@ bool StandardServiceRoot::supportsCategoryAdding() const { return true; } -void StandardServiceRoot::addNewFeed(const QString& url) { +void StandardServiceRoot::addNewFeed(RootItem* selected_item, const QString& url) { if (!qApp->feedUpdateLock()->tryLock()) { // Lock was not obtained because // it is used probably by feed updater or application @@ -118,9 +118,10 @@ void StandardServiceRoot::addNewFeed(const QString& url) { return; } - QScopedPointer form_pointer(new FormStandardFeedDetails(this, qApp->mainFormWidget())); + QScopedPointer form_pointer(new FormStandardFeedDetails(this, + qApp->mainFormWidget())); - form_pointer.data()->addEditFeed(nullptr, nullptr, url); + form_pointer->addEditFeed(nullptr, selected_item, url); qApp->feedUpdateLock()->unlock(); } @@ -167,7 +168,7 @@ QString StandardServiceRoot::processFeedUrl(const QString& feed_url) { void StandardServiceRoot::checkArgumentForFeedAdding(const QString& argument) { if (argument.startsWith(QL1S(URI_SCHEME_FEED_SHORT))) { - addNewFeed(processFeedUrl(argument)); + addNewFeed(nullptr, processFeedUrl(argument)); } } diff --git a/src/librssguard/services/standard/standardserviceroot.h b/src/librssguard/services/standard/standardserviceroot.h index 38b66a399..5eadc15d7 100644 --- a/src/librssguard/services/standard/standardserviceroot.h +++ b/src/librssguard/services/standard/standardserviceroot.h @@ -50,7 +50,7 @@ class StandardServiceRoot : public ServiceRoot { void checkArgumentForFeedAdding(const QString& argument); public slots: - void addNewFeed(const QString& url = QString()); + void addNewFeed(RootItem* selected_item, const QString& url = QString()); void addNewCategory(); void importFeeds(); void exportFeeds(); diff --git a/src/librssguard/services/tt-rss/ttrssfeed.cpp b/src/librssguard/services/tt-rss/ttrssfeed.cpp index 59c5f1eca..5d0e029ae 100644 --- a/src/librssguard/services/tt-rss/ttrssfeed.cpp +++ b/src/librssguard/services/tt-rss/ttrssfeed.cpp @@ -31,7 +31,7 @@ bool TtRssFeed::canBeEdited() const { bool TtRssFeed::editViaGui() { QPointer form_pointer = new FormTtRssFeedDetails(serviceRoot(), qApp->mainFormWidget()); - form_pointer.data()->addEditFeed(this, nullptr); + form_pointer.data()->addEditFeed(this, this); delete form_pointer.data(); return false; } diff --git a/src/librssguard/services/tt-rss/ttrssserviceroot.cpp b/src/librssguard/services/tt-rss/ttrssserviceroot.cpp index 7bc78f7b6..335e65f36 100644 --- a/src/librssguard/services/tt-rss/ttrssserviceroot.cpp +++ b/src/librssguard/services/tt-rss/ttrssserviceroot.cpp @@ -86,7 +86,9 @@ bool TtRssServiceRoot::supportsCategoryAdding() const { return false; } -void TtRssServiceRoot::addNewFeed(const QString& url) { +void TtRssServiceRoot::addNewFeed(RootItem* selected_item, const QString& url) { + Q_UNUSED(selected_item) + if (!qApp->feedUpdateLock()->tryLock()) { // Lock was not obtained because // it is used probably by feed updater or application @@ -101,14 +103,10 @@ void TtRssServiceRoot::addNewFeed(const QString& url) { QScopedPointer form_pointer(new FormTtRssFeedDetails(this, qApp->mainFormWidget())); - form_pointer->addEditFeed(nullptr, this, url); + form_pointer->addEditFeed(nullptr, selected_item, url); qApp->feedUpdateLock()->unlock(); } -void TtRssServiceRoot::addNewCategory() { - // NOTE: Do nothing. -} - bool TtRssServiceRoot::canBeEdited() const { return true; } diff --git a/src/librssguard/services/tt-rss/ttrssserviceroot.h b/src/librssguard/services/tt-rss/ttrssserviceroot.h index fb862d7f2..661bdf9cd 100644 --- a/src/librssguard/services/tt-rss/ttrssserviceroot.h +++ b/src/librssguard/services/tt-rss/ttrssserviceroot.h @@ -42,8 +42,7 @@ class TtRssServiceRoot : public ServiceRoot, public CacheForServiceRoot { void updateTitle(); public slots: - void addNewFeed(const QString& url = QString()); - void addNewCategory(); + void addNewFeed(RootItem* selected_item, const QString& url = QString()); private: RootItem* obtainNewTreeForSyncIn() const;