Add DequeDict
Change message_cache to a DequeDict
This commit is contained in:
parent
b133ebef69
commit
1af2716c54
@ -122,8 +122,8 @@ class Client:
|
|||||||
if isinstance(event, StateEvent):
|
if isinstance(event, StateEvent):
|
||||||
await room.update_state(event)
|
await room.update_state(event)
|
||||||
elif isinstance(event, MessageEvent):
|
elif isinstance(event, MessageEvent):
|
||||||
if event not in room.message_cache:
|
if event.event_id not in room.message_cache:
|
||||||
room.message_cache.append(event)
|
room.message_cache[event.event_id] = event
|
||||||
if room.read_receipts[self.user_id][1] < event.origin_server_ts:
|
if room.read_receipts[self.user_id][1] < event.origin_server_ts:
|
||||||
handlers = self.event_dispatchers.get(event.type)
|
handlers = self.event_dispatchers.get(event.type)
|
||||||
if handlers:
|
if handlers:
|
||||||
|
|||||||
@ -1,4 +1,3 @@
|
|||||||
# TODO Add Room class
|
|
||||||
from typing import List, Optional, Dict, Tuple
|
from typing import List, Optional, Dict, Tuple
|
||||||
from datetime import datetime, timedelta
|
from datetime import datetime, timedelta
|
||||||
from collections import deque
|
from collections import deque
|
||||||
@ -15,7 +14,7 @@ from .content import (
|
|||||||
MRoomRelatedGroupsContent,
|
MRoomRelatedGroupsContent,
|
||||||
MRoomTopicContent,
|
MRoomTopicContent,
|
||||||
)
|
)
|
||||||
from .utils import PreviousRoom
|
from .utils import PreviousRoom, DequeDict
|
||||||
|
|
||||||
|
|
||||||
class Room:
|
class Room:
|
||||||
@ -43,7 +42,7 @@ class Room:
|
|||||||
self.joined_member_count: Optional[int] = None
|
self.joined_member_count: Optional[int] = None
|
||||||
self.invited_member_count: Optional[int] = None
|
self.invited_member_count: Optional[int] = None
|
||||||
self.read_receipts: Dict[str, Tuple[str, int]] = {}
|
self.read_receipts: Dict[str, Tuple[str, int]] = {}
|
||||||
self.message_cache = deque(maxlen=1000)
|
self.message_cache = DequeDict(max=1000)
|
||||||
|
|
||||||
def update_read_receipts(self, receipts: Dict[str, Dict[str, Dict[str, Dict[str, int]]]]):
|
def update_read_receipts(self, receipts: Dict[str, Dict[str, Dict[str, Dict[str, int]]]]):
|
||||||
for event_id, receipt in receipts.items():
|
for event_id, receipt in receipts.items():
|
||||||
|
|||||||
@ -1,6 +1,7 @@
|
|||||||
from dataclasses import dataclass
|
from dataclasses import dataclass
|
||||||
from typing import Optional, List, Dict
|
from typing import Optional, List, Dict
|
||||||
from inspect import isawaitable
|
from inspect import isawaitable
|
||||||
|
from collections import OrderedDict
|
||||||
|
|
||||||
|
|
||||||
@dataclass
|
@dataclass
|
||||||
@ -108,3 +109,15 @@ async def maybe_coroutine(func, *args, **kwargs):
|
|||||||
|
|
||||||
def notification_power_levels_default_factory():
|
def notification_power_levels_default_factory():
|
||||||
return {'room': 50}
|
return {'room': 50}
|
||||||
|
|
||||||
|
|
||||||
|
class DequeDict(OrderedDict):
|
||||||
|
def __init__(self, *args, max: int = 0, **kwargs):
|
||||||
|
self._max = max
|
||||||
|
super(DequeDict, self).__init__(*args, **kwargs)
|
||||||
|
|
||||||
|
def __setitem__(self, key, value):
|
||||||
|
OrderedDict.__setitem__(self, key, value)
|
||||||
|
if self._max > 0:
|
||||||
|
if len(self) > self._max:
|
||||||
|
self.popitem(False)
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user