From 09fdf72d26faaeb4dfb795270ae8a9183d2d7ad5 Mon Sep 17 00:00:00 2001
From: Martin Rotter <rotter@praktik.cz>
Date: Thu, 9 Jul 2020 11:19:35 +0200
Subject: [PATCH] Work on SQL layer, can edit existing filters, change
 assignments to feeds.

---
 .../miscellaneous/databasequeries.cpp         | 22 +++++++++++++++++++
 .../miscellaneous/databasequeries.h           |  1 +
 src/librssguard/miscellaneous/feedreader.cpp  |  2 +-
 3 files changed, 24 insertions(+), 1 deletion(-)

diff --git a/src/librssguard/miscellaneous/databasequeries.cpp b/src/librssguard/miscellaneous/databasequeries.cpp
index 56532b91c..01baf11b0 100755
--- a/src/librssguard/miscellaneous/databasequeries.cpp
+++ b/src/librssguard/miscellaneous/databasequeries.cpp
@@ -1480,6 +1480,28 @@ void DatabaseQueries::assignMessageFilterToFeed(const QSqlDatabase& db, const QS
   }
 }
 
+void DatabaseQueries::updateMessageFilter(const QSqlDatabase& db, MessageFilter* filter, bool* ok) {
+  QSqlQuery q(db);
+
+  q.prepare("UPDATE MessageFilters SET name = :name, script = :script WHERE id = :id;");
+
+  q.bindValue(QSL(":name"), filter->name());
+  q.bindValue(QSL(":script"), filter->script());
+  q.bindValue(QSL(":id"), filter->id());
+  q.setForwardOnly(true);
+
+  if (q.exec()) {
+    if (ok != nullptr) {
+      *ok = true;
+    }
+  }
+  else {
+    if (ok != nullptr) {
+      *ok = false;
+    }
+  }
+}
+
 void DatabaseQueries::removeMessageFilterFromFeed(const QSqlDatabase& db, const QString& feed_custom_id,
                                                   int filter_id, int account_id, bool* ok) {
   QSqlQuery q(db);
diff --git a/src/librssguard/miscellaneous/databasequeries.h b/src/librssguard/miscellaneous/databasequeries.h
index 1a490c330..6dcc139f7 100644
--- a/src/librssguard/miscellaneous/databasequeries.h
+++ b/src/librssguard/miscellaneous/databasequeries.h
@@ -91,6 +91,7 @@ class DatabaseQueries {
     static QMultiMap<QString, int> messageFiltersInFeeds(const QSqlDatabase& db, int account_id, bool* ok = nullptr);
     static void assignMessageFilterToFeed(const QSqlDatabase& db, const QString& feed_custom_id, int filter_id,
                                           int account_id, bool* ok = nullptr);
+    static void updateMessageFilter(const QSqlDatabase& db, MessageFilter* filter, bool* ok = nullptr);
     static void removeMessageFilterFromFeed(const QSqlDatabase& db, const QString& feed_custom_id, int filter_id,
                                             int account_id, bool* ok = nullptr);
 
diff --git a/src/librssguard/miscellaneous/feedreader.cpp b/src/librssguard/miscellaneous/feedreader.cpp
index bf89b3dc2..cc50de9ed 100644
--- a/src/librssguard/miscellaneous/feedreader.cpp
+++ b/src/librssguard/miscellaneous/feedreader.cpp
@@ -162,7 +162,7 @@ MessageFilter* FeedReader::addMessageFilter(const QString& title, const QString&
 }
 
 void FeedReader::updateMessageFilter(MessageFilter* filter) {
-  // TODO: Filter's name or script is changed, save to database.
+  DatabaseQueries::updateMessageFilter(qApp->database()->connection(metaObject()->className()), filter);
 }
 
 void FeedReader::assignMessageFilterToFeed(Feed* feed, MessageFilter* filter) {