Fix "Mentions & keywords" notification level

Make it work in cases where multiple accounts are present in the room
and one of them is highlighted.
This commit is contained in:
miruka 2020-09-19 15:42:25 -04:00
parent e8d8f7fe0b
commit 54234399f5
5 changed files with 12 additions and 9 deletions

View File

@ -8,7 +8,7 @@ import sys
import time import time
from datetime import datetime from datetime import datetime
from pathlib import Path from pathlib import Path
from typing import Any, DefaultDict, Dict, List, Optional, Set, Tuple, Union from typing import Any, DefaultDict, Dict, List, Optional, Tuple, Union
from urllib.parse import urlparse from urllib.parse import urlparse
import aiohttp import aiohttp
@ -133,7 +133,6 @@ class Backend:
self.mxc_events: DefaultDict[str, List[Event]] = DefaultDict(list) self.mxc_events: DefaultDict[str, List[Event]] = DefaultDict(list)
self.notified_events: Set[str] = set() # {event_id}
self.notification_avatar_cache: Dict[str, Path] = {} # {mxc: path} self.notification_avatar_cache: Dict[str, Path] = {} # {mxc: path}

View File

@ -2181,16 +2181,12 @@ class MatrixClient(nio.AsyncClient):
if from_us: if from_us:
return item return item
already_notified = item.event_id in self.backend.notified_events if await self.event_is_past(ev):
if already_notified or await self.event_is_past(ev):
await self.update_account_unread_counts() await self.update_account_unread_counts()
return item return item
# Alerts & notifications # Alerts & notifications
self.backend.notified_events.add(item.event_id)
room_item = self.models[self.user_id, "rooms"][room.room_id] room_item = self.models[self.user_id, "rooms"][room.room_id]
unread = \ unread = \
@ -2230,6 +2226,7 @@ class MatrixClient(nio.AsyncClient):
body = f"{sender}: {item.inline_content}" body = f"{sender}: {item.inline_content}"
NotificationRequested( NotificationRequested(
id = item.id,
high_importance = highlight, high_importance = highlight,
title = room_name, title = room_name,

View File

@ -42,6 +42,7 @@ class NotificationRequested(PyOtherSideEvent):
flash the program's taskbar icon on Windows. flash the program's taskbar icon on Windows.
""" """
id: str = field()
title: str = field() title: str = field()
body: str = "" body: str = ""
image: Union[Path, str] = "" image: Union[Path, str] = ""

View File

@ -11,12 +11,17 @@ QtObject {
Qt.exit(exitCode) Qt.exit(exitCode)
} }
function onNotificationRequested(title, body, image, highImportance) { function onNotificationRequested(id, title, body, image, highImportance) {
const level = window.notificationLevel const level = window.notificationLevel
if (Qt.application.state === Qt.ApplicationActive) return
if (level === Window.NotificationLevel.None) return if (level === Window.NotificationLevel.None) return
if (level === Window.MentionsKeywords && ! highImportance) return if (level === Window.MentionsKeywords && ! highImportance) return
if (window.notifiedIds.has(id)) return
window.notifiedIds.add(id)
window.notifiedIdsChanged()
if (Qt.application.state === Qt.ApplicationActive) return
py.callCoro("desktop_notify", [title, body, image]) py.callCoro("desktop_notify", [title, body, image])

View File

@ -20,6 +20,7 @@ ApplicationWindow {
window.visibility === window.Hidden window.visibility === window.Hidden
property int notificationLevel: Window.NotificationLevel.All property int notificationLevel: Window.NotificationLevel.All
property var notifiedIds: new Set()
property var mainUI: null property var mainUI: null
property var settings: ({}) property var settings: ({})