From d4c925819b9d85a00520e413a90cfbcd61a1c667 Mon Sep 17 00:00:00 2001
From: Andrew Dolgov <noreply@fakecake.org>
Date: Sat, 13 Feb 2021 23:12:49 +0300
Subject: [PATCH] pref-feeds: load error button via xhr

---
 classes/pref/feeds.php   | 21 +++++----------------
 js/PrefFeedTree.js       |  7 +++++++
 themes/compact.css       |  2 +-
 themes/compact_night.css |  2 +-
 themes/light.css         |  2 +-
 themes/light/prefs.less  |  2 +-
 themes/night.css         |  2 +-
 themes/night_blue.css    |  2 +-
 8 files changed, 18 insertions(+), 22 deletions(-)

diff --git a/classes/pref/feeds.php b/classes/pref/feeds.php
index b9967e77f..72a8344ad 100755
--- a/classes/pref/feeds.php
+++ b/classes/pref/feeds.php
@@ -1198,22 +1198,10 @@ class Pref_Feeds extends Handler_Protected {
 	}
 
 	private function index_feeds() {
-		$sth = $this->pdo->prepare("SELECT COUNT(id) AS num_errors
-			FROM ttrss_feeds WHERE last_error != '' AND owner_uid = ?");
-		$sth->execute([$_SESSION['uid']]);
-
-		if ($row = $sth->fetch()) {
-			$num_errors = $row["num_errors"];
-		} else {
-			$num_errors = 0;
-		}
-
-		if ($num_errors > 0) {
-			$error_button = "<button dojoType='dijit.form.Button' onclick='CommonDialogs.showFeedsWithErrors()' id='errorButton'>".
-				__("Feeds with errors")."</button>";
-		} else {
-			$error_button = "";
-		}
+		$error_button = "<button dojoType='dijit.form.Button'
+				id='pref_feeds_errors_btn' style='display : none'
+				onclick='CommonDialogs.showFeedsWithErrors()'>".
+			__("Feeds with errors")."</button>";
 
 		$inactive_button = "<button dojoType='dijit.form.Button'
 				id='pref_feeds_inactive_btn'
@@ -1311,6 +1299,7 @@ class Pref_Feeds extends Handler_Protected {
 					</script>
 					<script type="dojo/method" event="onLoad" args="item">
 						dijit.byId('feedTree').checkInactiveFeeds();
+						dijit.byId('feedTree').checkErrorFeeds();
 					</script>
 				</div>
 			</div>
diff --git a/js/PrefFeedTree.js b/js/PrefFeedTree.js
index e17b8744d..e0a2dd932 100644
--- a/js/PrefFeedTree.js
+++ b/js/PrefFeedTree.js
@@ -209,6 +209,13 @@ define(["dojo/_base/declare", "dojo/dom-construct", "lib/CheckBoxTree", "dojo/_b
 
 			return false;
 		},
+		checkErrorFeeds: function() {
+			xhrJson("backend.php", {op: "pref-feeds", method: "feedsWithErrors"}, (reply) => {
+				if (reply.length > 0) {
+					Element.show(dijit.byId("pref_feeds_errors_btn").domNode);
+				}
+			});
+		},
 		checkInactiveFeeds: function() {
 			xhrJson("backend.php", {op: "pref-feeds", method: "inactivefeeds"}, (reply) => {
 				if (reply.length > 0) {
diff --git a/themes/compact.css b/themes/compact.css
index f923b2ee1..36c5aec9f 100644
--- a/themes/compact.css
+++ b/themes/compact.css
@@ -1456,7 +1456,7 @@ body.ttrss_prefs #feedsTab {
 body.ttrss_prefs .dijitDialog #pref-profiles-list .dijitInlineEditBoxDisplayMode {
   padding: 0px;
 }
-body.ttrss_prefs #errorButton {
+body.ttrss_prefs #pref_feeds_errors_btn {
   color: red;
 }
 body.ttrss_prefs .user-css-editor {
diff --git a/themes/compact_night.css b/themes/compact_night.css
index e512e8176..e39b7020a 100644
--- a/themes/compact_night.css
+++ b/themes/compact_night.css
@@ -1456,7 +1456,7 @@ body.ttrss_prefs #feedsTab {
 body.ttrss_prefs .dijitDialog #pref-profiles-list .dijitInlineEditBoxDisplayMode {
   padding: 0px;
 }
-body.ttrss_prefs #errorButton {
+body.ttrss_prefs #pref_feeds_errors_btn {
   color: red;
 }
 body.ttrss_prefs .user-css-editor {
diff --git a/themes/light.css b/themes/light.css
index a19467c41..b6c487b66 100644
--- a/themes/light.css
+++ b/themes/light.css
@@ -1456,7 +1456,7 @@ body.ttrss_prefs #feedsTab {
 body.ttrss_prefs .dijitDialog #pref-profiles-list .dijitInlineEditBoxDisplayMode {
   padding: 0px;
 }
-body.ttrss_prefs #errorButton {
+body.ttrss_prefs #pref_feeds_errors_btn {
   color: red;
 }
 body.ttrss_prefs .user-css-editor {
diff --git a/themes/light/prefs.less b/themes/light/prefs.less
index 0206916ae..ec3006ce5 100644
--- a/themes/light/prefs.less
+++ b/themes/light/prefs.less
@@ -65,7 +65,7 @@ body.ttrss_prefs {
 		padding : 0px;
 	}
 
-	#errorButton {
+	#pref_feeds_errors_btn {
 		color : red;
 	}
 
diff --git a/themes/night.css b/themes/night.css
index e2bd50142..5941fd8e1 100644
--- a/themes/night.css
+++ b/themes/night.css
@@ -1457,7 +1457,7 @@ body.ttrss_prefs #feedsTab {
 body.ttrss_prefs .dijitDialog #pref-profiles-list .dijitInlineEditBoxDisplayMode {
   padding: 0px;
 }
-body.ttrss_prefs #errorButton {
+body.ttrss_prefs #pref_feeds_errors_btn {
   color: red;
 }
 body.ttrss_prefs .user-css-editor {
diff --git a/themes/night_blue.css b/themes/night_blue.css
index 93027e8be..99bb191a2 100644
--- a/themes/night_blue.css
+++ b/themes/night_blue.css
@@ -1457,7 +1457,7 @@ body.ttrss_prefs #feedsTab {
 body.ttrss_prefs .dijitDialog #pref-profiles-list .dijitInlineEditBoxDisplayMode {
   padding: 0px;
 }
-body.ttrss_prefs #errorButton {
+body.ttrss_prefs #pref_feeds_errors_btn {
   color: red;
 }
 body.ttrss_prefs .user-css-editor {
-- 
GitLab