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
from datetime import datetime
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
import aiohttp
@ -133,7 +133,6 @@ class Backend:
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}

View File

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

View File

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

View File

@ -11,12 +11,17 @@ QtObject {
Qt.exit(exitCode)
}
function onNotificationRequested(title, body, image, highImportance) {
function onNotificationRequested(id, title, body, image, highImportance) {
const level = window.notificationLevel
if (Qt.application.state === Qt.ApplicationActive) return
if (level === Window.NotificationLevel.None) 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])

View File

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