2019-06-27 02:31:03 -04:00
|
|
|
from datetime import datetime
|
2019-07-02 22:22:29 -04:00
|
|
|
from enum import auto
|
|
|
|
from typing import Dict, Optional, Sequence, Type, Union
|
2019-06-27 02:31:03 -04:00
|
|
|
|
|
|
|
from dataclasses import dataclass, field
|
|
|
|
|
2019-07-02 22:22:29 -04:00
|
|
|
import nio
|
|
|
|
|
|
|
|
from .event import AutoStrEnum, Event
|
2019-06-27 02:31:03 -04:00
|
|
|
|
|
|
|
|
|
|
|
@dataclass
|
|
|
|
class RoomUpdated(Event):
|
2019-06-28 18:12:45 -04:00
|
|
|
user_id: str = field()
|
|
|
|
category: str = field()
|
2019-06-27 02:31:03 -04:00
|
|
|
room_id: str = field()
|
|
|
|
display_name: Optional[str] = None
|
|
|
|
avatar_url: Optional[str] = None
|
|
|
|
topic: Optional[str] = None
|
|
|
|
last_event_date: Optional[datetime] = None
|
|
|
|
|
2019-06-28 18:12:45 -04:00
|
|
|
inviter: Optional[str] = None
|
2019-06-27 02:31:03 -04:00
|
|
|
left_event: Optional[Dict[str, str]] = None
|
|
|
|
|
|
|
|
|
|
|
|
@dataclass
|
|
|
|
class RoomDeleted(Event):
|
2019-06-28 18:12:45 -04:00
|
|
|
user_id: str = field()
|
|
|
|
category: str = field()
|
|
|
|
room_id: str = field()
|
2019-06-27 02:31:03 -04:00
|
|
|
|
|
|
|
|
|
|
|
@dataclass
|
|
|
|
class RoomMemberUpdated(Event):
|
|
|
|
room_id: str = field()
|
|
|
|
user_id: str = field()
|
|
|
|
typing: bool = field()
|
|
|
|
|
|
|
|
|
|
|
|
@dataclass
|
|
|
|
class RoomMemberDeleted(Event):
|
|
|
|
room_id: str = field()
|
|
|
|
user_id: str = field()
|
2019-07-02 22:22:29 -04:00
|
|
|
|
|
|
|
|
|
|
|
# Timeline
|
|
|
|
|
|
|
|
class ContentType(AutoStrEnum):
|
|
|
|
html = auto()
|
|
|
|
image = auto()
|
|
|
|
audio = auto()
|
|
|
|
video = auto()
|
|
|
|
file = auto()
|
|
|
|
location = auto()
|
|
|
|
|
|
|
|
|
|
|
|
@dataclass
|
|
|
|
class TimelineEventReceived(Event):
|
|
|
|
event_type: Type[nio.Event] = field()
|
|
|
|
room_id: str = field()
|
|
|
|
event_id: str = field()
|
|
|
|
sender_id: str = field()
|
|
|
|
date: datetime = field()
|
|
|
|
content: str = field()
|
|
|
|
|
|
|
|
content_type: ContentType = ContentType.html
|
|
|
|
is_local_echo: bool = False
|
|
|
|
|
|
|
|
show_name_line: bool = False
|
|
|
|
translatable: Union[bool, Sequence[str]] = True
|
|
|
|
|
|
|
|
target_user_id: Optional[str] = None
|
|
|
|
|
|
|
|
|
|
|
|
@classmethod
|
|
|
|
def from_nio(cls, room: nio.rooms.MatrixRoom, ev: nio.Event, **fields
|
|
|
|
) -> "TimelineEventReceived":
|
|
|
|
return cls(
|
|
|
|
event_type = type(ev),
|
|
|
|
room_id = room.room_id,
|
|
|
|
event_id = ev.event_id,
|
|
|
|
sender_id = ev.sender,
|
|
|
|
date = datetime.fromtimestamp(ev.server_timestamp / 1000),
|
|
|
|
target_user_id = getattr(ev, "state_key", None),
|
|
|
|
**fields
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
@dataclass
|
|
|
|
class TimelineMessageReceived(TimelineEventReceived):
|
|
|
|
show_name_line: bool = True
|
|
|
|
translatable: Union[bool, Sequence[str]] = False
|