Added limited local read/unread tracking
This commit is contained in:
@@ -116,6 +116,7 @@ class MatrixClient(nio.AsyncClient):
|
||||
|
||||
self.backend: "Backend" = backend
|
||||
self.models: ModelStore = self.backend.models
|
||||
self.open_room: str = None
|
||||
|
||||
self.profile_task: Optional[asyncio.Future] = None
|
||||
self.server_config_task: Optional[asyncio.Future] = None
|
||||
@@ -831,6 +832,18 @@ class MatrixClient(nio.AsyncClient):
|
||||
|
||||
await super().room_forget(room_id)
|
||||
|
||||
async def room_read(self, room_id: str) -> None:
|
||||
"""Mark all messages in a room as read
|
||||
|
||||
Currently, this doesn't handle sending a read receipt to the server,
|
||||
only cleaning up any unread indicators.
|
||||
"""
|
||||
|
||||
self.open_room = room_id
|
||||
if self.first_sync_done.is_set():
|
||||
room = self.models[self.user_id, "rooms"][room_id]
|
||||
room.mentions = 0
|
||||
room.unreads = 0
|
||||
|
||||
async def room_mass_invite(
|
||||
self, room_id: str, *user_ids: str,
|
||||
@@ -1153,10 +1166,12 @@ class MatrixClient(nio.AsyncClient):
|
||||
last_event_date = registered.last_event_date
|
||||
typing_members = registered.typing_members
|
||||
mentions = registered.mentions
|
||||
unreads = registered.unreads
|
||||
except KeyError:
|
||||
last_event_date = datetime.fromtimestamp(0)
|
||||
typing_members = []
|
||||
mentions = 0
|
||||
unreads = 0
|
||||
|
||||
self.models[self.user_id, "rooms"][room.room_id] = Room(
|
||||
id = room.room_id,
|
||||
@@ -1191,6 +1206,7 @@ class MatrixClient(nio.AsyncClient):
|
||||
|
||||
last_event_date = last_event_date,
|
||||
mentions = mentions,
|
||||
unreads = unreads,
|
||||
|
||||
)
|
||||
|
||||
|
@@ -82,6 +82,7 @@ class Room(ModelItem):
|
||||
last_event_date: datetime = ZeroDate
|
||||
|
||||
mentions: int = 0
|
||||
unreads: int = 0
|
||||
|
||||
def __lt__(self, other: "Room") -> bool:
|
||||
"""Sort by join state, then descending last event date, then name.
|
||||
|
@@ -36,7 +36,6 @@ class NioCallbacks:
|
||||
|
||||
client: "MatrixClient" = field()
|
||||
|
||||
|
||||
def __post_init__(self) -> None:
|
||||
"""Register our methods as callbacks."""
|
||||
|
||||
@@ -109,9 +108,11 @@ class NioCallbacks:
|
||||
room, ev, content=co, mentions=mention_list,
|
||||
)
|
||||
|
||||
if HTML_PROCESSOR.user_id_link_in_html(co, self.client.user_id):
|
||||
rooms = self.client.models[self.client.user_id, "rooms"]
|
||||
rooms[room.room_id].mentions += 1
|
||||
if self.client.first_sync_done.is_set() and self.client.open_room != room.room_id:
|
||||
room = self.client.models[self.client.user_id, "rooms"][room.room_id]
|
||||
room.unreads += 1
|
||||
if HTML_PROCESSOR.user_id_link_in_html(co, self.client.user_id):
|
||||
room.mentions += 1
|
||||
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user