Add basic desktop notifications support
This commit is contained in:
parent
71785911a0
commit
69e414b31c
|
@ -9,6 +9,7 @@ lxml >= 4.5.1, < 5
|
||||||
matrix-nio[e2e] >= 0.15.0, < 0.16
|
matrix-nio[e2e] >= 0.15.0, < 0.16
|
||||||
mistune >= 0.8.4, < 0.9
|
mistune >= 0.8.4, < 0.9
|
||||||
pymediainfo >= 4.2.1, < 5
|
pymediainfo >= 4.2.1, < 5
|
||||||
|
plyer >= 1.4.3, < 2
|
||||||
|
|
||||||
async_generator >= 1.10, < 2; python_version < "3.7"
|
async_generator >= 1.10, < 2; python_version < "3.7"
|
||||||
dataclasses >= 0.6, < 0.7; python_version < "3.7"
|
dataclasses >= 0.6, < 0.7; python_version < "3.7"
|
||||||
|
|
|
@ -9,10 +9,11 @@ import time
|
||||||
import traceback
|
import traceback
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from typing import Any, DefaultDict, Dict, List, Optional, Tuple
|
from typing import Any, DefaultDict, Dict, List, Optional, Tuple, Union
|
||||||
from urllib.parse import urlparse
|
from urllib.parse import urlparse
|
||||||
|
|
||||||
import aiohttp
|
import aiohttp
|
||||||
|
import plyer
|
||||||
from appdirs import AppDirs
|
from appdirs import AppDirs
|
||||||
|
|
||||||
import nio
|
import nio
|
||||||
|
@ -538,3 +539,17 @@ class Backend:
|
||||||
|
|
||||||
await asyncio.gather(*coros)
|
await asyncio.gather(*coros)
|
||||||
await session.close()
|
await session.close()
|
||||||
|
|
||||||
|
|
||||||
|
async def desktop_notify(
|
||||||
|
self, title: str, body: str = "", image: Union[Path, str] = "",
|
||||||
|
) -> None:
|
||||||
|
# XXX: images on windows must be .ICO
|
||||||
|
plyer.notification.notify(
|
||||||
|
title = title,
|
||||||
|
message = body,
|
||||||
|
app_name = __app_name__,
|
||||||
|
app_icon = str(image),
|
||||||
|
timeout = 10,
|
||||||
|
toast = False,
|
||||||
|
)
|
||||||
|
|
|
@ -2101,6 +2101,23 @@ class MatrixClient(nio.AsyncClient):
|
||||||
item.id = f"echo-{tx_id}"
|
item.id = f"echo-{tx_id}"
|
||||||
self.event_to_echo_ids[ev.event_id] = item.id
|
self.event_to_echo_ids[ev.event_id] = item.id
|
||||||
|
|
||||||
|
notif_room = room.display_name
|
||||||
|
notif_sender = item.sender_name or item.sender_id
|
||||||
|
body_start = f"{notif_sender}: "
|
||||||
|
|
||||||
|
if notif_room == notif_sender:
|
||||||
|
body_start = ""
|
||||||
|
elif isinstance(ev, nio.RoomMessageEmote):
|
||||||
|
body_start = f"<i>{notif_sender} </i>"
|
||||||
|
|
||||||
|
await self.backend.desktop_notify(
|
||||||
|
title = notif_room,
|
||||||
|
body = f"{body_start}{item.inline_content}",
|
||||||
|
# await self.backend.media_cache.get_thumbnail(
|
||||||
|
# item.sender_avatar, 32, 32,
|
||||||
|
# ),
|
||||||
|
)
|
||||||
|
|
||||||
model[item.id] = item
|
model[item.id] = item
|
||||||
await self.set_room_last_event(room.room_id, item)
|
await self.set_room_last_event(room.room_id, item)
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user