From bf2d6003641ef29162ab3e6961a49ff3d046f4e2 Mon Sep 17 00:00:00 2001 From: Martin Rotter Date: Wed, 25 Sep 2024 09:15:37 +0200 Subject: [PATCH] fix #1503 --- src/librssguard/database/databasequeries.cpp | 30 +++++++++++++++----- src/librssguard/services/abstract/feed.cpp | 7 ++--- 2 files changed, 25 insertions(+), 12 deletions(-) diff --git a/src/librssguard/database/databasequeries.cpp b/src/librssguard/database/databasequeries.cpp index 4a1d73719..c37ade358 100644 --- a/src/librssguard/database/databasequeries.cpp +++ b/src/librssguard/database/databasequeries.cpp @@ -41,9 +41,8 @@ QMap DatabaseQueries::messageTableAttributes(bool only_msg_table, "END AS has_enclosures"); if (is_sqlite) { - field_names[MSG_DB_LABELS] = - QSL("(SELECT GROUP_CONCAT(Labels.name) FROM Labels WHERE Messages.labels LIKE '%.' || " - "Labels.custom_id || '.%') as msg_labels"); + field_names[MSG_DB_LABELS] = QSL("(SELECT GROUP_CONCAT(Labels.name) FROM Labels WHERE Messages.labels LIKE '%.' || " + "Labels.custom_id || '.%') as msg_labels"); } else { field_names[MSG_DB_LABELS] = @@ -3036,13 +3035,30 @@ void DatabaseQueries::assignMessageFilterToFeed(const QSqlDatabase& db, bool* ok) { QSqlQuery q(db); - q.prepare(QSL("INSERT INTO MessageFiltersInFeeds (filter, feed_custom_id, account_id) " - "VALUES(:filter, :feed_custom_id, :account_id);")); - + q.prepare(QSL("SELECT COUNT(*) FROM MessageFiltersInFeeds " + "WHERE filter = :filter AND feed_custom_id = :feed_custom_id AND account_id = :account_id;")); + q.setForwardOnly(true); + q.bindValue(QSL(":filter"), filter_id); + q.bindValue(QSL(":feed_custom_id"), feed_custom_id); + q.bindValue(QSL(":account_id"), account_id); + + if (q.exec() && q.next()) { + auto already_included_count = q.value(0).toInt(); + + if (already_included_count > 0) { + if (ok != nullptr) { + *ok = true; + } + + return; + } + } + + q.prepare(QSL("INSERT INTO MessageFiltersInFeeds (filter, feed_custom_id, account_id) " + "VALUES(:filter, :feed_custom_id, :account_id);")); q.bindValue(QSL(":filter"), filter_id); q.bindValue(QSL(":feed_custom_id"), feed_custom_id); q.bindValue(QSL(":account_id"), account_id); - q.setForwardOnly(true); if (q.exec()) { if (ok != nullptr) { diff --git a/src/librssguard/services/abstract/feed.cpp b/src/librssguard/services/abstract/feed.cpp index 21c76cfab..9d3e971bf 100644 --- a/src/librssguard/services/abstract/feed.cpp +++ b/src/librssguard/services/abstract/feed.cpp @@ -209,6 +209,7 @@ bool Feed::removeUnwantedArticles(QSqlDatabase& db) { } void Feed::appendMessageFilter(MessageFilter* filter) { + removeMessageFilter(filter); m_messageFilters.append(QPointer(filter)); } @@ -351,11 +352,7 @@ void Feed::setMessageFilters(const QList>& filters) { } void Feed::removeMessageFilter(MessageFilter* filter) { - int idx = m_messageFilters.indexOf(filter); - - if (idx >= 0) { - m_messageFilters.removeAll(filter); - } + m_messageFilters.removeAll(filter); } QString Feed::additionalTooltip() const {