aboutsummaryrefslogtreecommitdiffstats
path: root/recipes/nextcloud-talk/webview.js
diff options
context:
space:
mode:
authorLibravatar Edgars <eandersons@users.noreply.github.com>2023-11-28 17:18:13 +0200
committerLibravatar GitHub <noreply@github.com>2023-11-28 08:18:13 -0700
commit79ddd4bee344db29e69420c1b6514dbed2a9fa63 (patch)
tree3bc531d21161082067baa4576d24063481dcc77a /recipes/nextcloud-talk/webview.js
parentChange name of Tutanota to Tuta Mail (#463) (diff)
downloadferdium-recipes-79ddd4bee344db29e69420c1b6514dbed2a9fa63.tar.gz
ferdium-recipes-79ddd4bee344db29e69420c1b6514dbed2a9fa63.tar.zst
ferdium-recipes-79ddd4bee344db29e69420c1b6514dbed2a9fa63.zip
Fix selectors for Nextcloud Talk (#473)
Script and CSS was updated to add selectors for the latest Nextcloud (27). Previous selectors were left as is for backwards compatibility. Additionally direct notifications count now is detected by unread conversations count in the left sidebar, using Talk specific notifications as a fallback.
Diffstat (limited to 'recipes/nextcloud-talk/webview.js')
-rw-r--r--recipes/nextcloud-talk/webview.js50
1 files changed, 29 insertions, 21 deletions
diff --git a/recipes/nextcloud-talk/webview.js b/recipes/nextcloud-talk/webview.js
index 0c7f5c2..15f4dfb 100644
--- a/recipes/nextcloud-talk/webview.js
+++ b/recipes/nextcloud-talk/webview.js
@@ -6,38 +6,46 @@ const _path = _interopRequireDefault(require('path'));
6 6
7module.exports = Ferdium => { 7module.exports = Ferdium => {
8 const getMessages = () => { 8 const getMessages = () => {
9 let direct = 0; 9 // With `// Legacy ` are marked those selectors that were working for some
10 10 // Nextcloud version before 27 (24 or 25).
11 const notificationWrapper = document.querySelector( 11 const counterBubble = '.counter-bubble__counter';
12 '.notifications .notification-wrapper', 12 const directFromLeftSideBar = document.querySelectorAll(
13 ); 13 `${counterBubble}--highlighted`, // Nextcloud 27
14 14 ).length;
15 if (notificationWrapper) {
16 const directSelector = notificationWrapper.querySelectorAll(
17 '.notification[object_type="chat"], .notification[object_type="room"]',
18 );
19 direct = directSelector ? Ferdium.safeParseInt(directSelector.length) : 0;
20 }
21
22 let indirect = 0; 15 let indirect = 0;
23
24 for (const counter of document.querySelectorAll( 16 for (const counter of document.querySelectorAll(
25 '.app-navigation-entry__counter', 17 '.app-navigation-entry__counter, ' + // Legacy
18 `${counterBubble}:not(${counterBubble}--highlighted)`, // Nextcloud 27
26 )) { 19 )) {
27 const entryCounter = counter 20 indirect += Ferdium.safeParseInt(counter?.textContent.trim());
28 ? Ferdium.safeParseInt(counter.textContent)
29 : 0;
30 indirect += entryCounter;
31 } 21 }
32 22
33 if (document.title.startsWith('*')) { 23 if (document.title.startsWith('*')) {
34 indirect += 1; 24 indirect += 1;
35 } 25 }
36 26
37 Ferdium.setBadge(direct, indirect); 27 Ferdium.setBadge(
28 // Try to use the unread conversations count retrieved from the left
29 // sidebar, otherwise check Talk specific notifications
30 directFromLeftSideBar > 0
31 ? directFromLeftSideBar
32 : Ferdium.safeParseInt(
33 document
34 .querySelector(
35 '.notifications .notification-wrapper, ' + // Legacy
36 '.notification-container .notification-wrapper', // Nextcloud 27
37 )
38 ?.querySelectorAll(
39 '.notification[object_type="chat"], ' + // Legacy
40 '.notification[object_type="room"], ' + // Legacy
41 '.notification[data-object-type="chat"], ' + // Nextcloud 27
42 '.notification[data-object-type="room"]', // Nextcloud 27
43 ).length,
44 ),
45 indirect,
46 );
38 }; 47 };
39 48
40 Ferdium.loop(getMessages); 49 Ferdium.loop(getMessages);
41
42 Ferdium.injectCSS(_path.default.join(__dirname, 'service.css')); 50 Ferdium.injectCSS(_path.default.join(__dirname, 'service.css'));
43}; 51};