diff options
Diffstat (limited to 'uncompressed/hangoutschat/webview.js')
-rw-r--r-- | uncompressed/hangoutschat/webview.js | 38 |
1 files changed, 23 insertions, 15 deletions
diff --git a/uncompressed/hangoutschat/webview.js b/uncompressed/hangoutschat/webview.js index 27a2016..ea8a1b2 100644 --- a/uncompressed/hangoutschat/webview.js +++ b/uncompressed/hangoutschat/webview.js | |||
@@ -1,30 +1,36 @@ | |||
1 | "use strict"; | 1 | module.exports = (Franz) => { |
2 | |||
3 | const muteSelector = '.DQy0Rb'; | ||
4 | const directMessageSelector = '.eM5l9e.FVKzAb'; | ||
5 | const indirectMessageSelector = '.PL5Wwe.H7du2 .t5F5nf'; | ||
6 | |||
7 | const isMuted = node => !!node.closest('[role="listitem"]').querySelector(muteSelector); | ||
2 | 8 | ||
3 | module.exports = Franz => { | ||
4 | const getMessages = function getMessages() { | 9 | const getMessages = function getMessages() { |
5 | const muteSelector = '.DQy0Rb'; | 10 | |
11 | // get unread messages | ||
6 | let directCount = 0; | 12 | let directCount = 0; |
7 | document.querySelectorAll('.eM5l9e.FVKzAb').forEach(node => { | 13 | document.querySelectorAll(directMessageSelector).forEach((node) => { |
8 | if (!node.closest('content[role="listitem"]').querySelector(muteSelector)) { | 14 | // Hangouts Chat overrides the muted indicator when there is a direct mention |
15 | if (!isMuted(node)) { | ||
9 | directCount += 1; | 16 | directCount += 1; |
10 | } | 17 | } |
11 | }); | 18 | }); |
19 | |||
12 | let indirectCount = 0; | 20 | let indirectCount = 0; |
13 | document.querySelectorAll('.PL5Wwe.H7du2 .t5F5nf').forEach(node => { | 21 | document.querySelectorAll(indirectMessageSelector).forEach((node) => { |
14 | if (!node.closest('content[role="listitem"]').querySelector(muteSelector)) { | 22 | if (!isMuted(node)) { |
15 | indirectCount = +1; | 23 | indirectCount += 1; |
16 | } | 24 | } |
17 | }); | 25 | }); |
18 | indirectCount -= directCount; | 26 | indirectCount -= directCount; |
27 | |||
28 | // set Franz badge | ||
19 | Franz.setBadge(directCount, indirectCount); | 29 | Franz.setBadge(directCount, indirectCount); |
20 | }; | 30 | }; |
21 | 31 | ||
22 | document.addEventListener('click', e => { | 32 | document.addEventListener('click', (e) => { |
23 | const { | 33 | const { tagName, target, href } = e.target; |
24 | tagName, | ||
25 | target, | ||
26 | href | ||
27 | } = e.target; | ||
28 | 34 | ||
29 | if (tagName === 'A' && target === '_blank') { | 35 | if (tagName === 'A' && target === '_blank') { |
30 | e.preventDefault(); | 36 | e.preventDefault(); |
@@ -32,5 +38,7 @@ module.exports = Franz => { | |||
32 | window.open(href); | 38 | window.open(href); |
33 | } | 39 | } |
34 | }); | 40 | }); |
41 | |||
42 | // check for new messages every second and update Franz badge | ||
35 | Franz.loop(getMessages); | 43 | Franz.loop(getMessages); |
36 | }; \ No newline at end of file | 44 | }; |