initial working state
This commit is contained in:
parent
816fb34f75
commit
bb9a24c1ed
15 changed files with 688 additions and 0 deletions
67
src/synclean/models/room.py
Normal file
67
src/synclean/models/room.py
Normal file
|
@ -0,0 +1,67 @@
|
|||
from dataclasses import dataclass
|
||||
from typing import Dict, Any, Optional, List
|
||||
|
||||
|
||||
@dataclass
|
||||
class Room:
|
||||
"""Dataclass representing a Matrix room"""
|
||||
room_id: str
|
||||
name: Optional[str] = None
|
||||
canonical_alias: Optional[str] = None
|
||||
joined_members: int = 0
|
||||
joined_local_members: int = 0
|
||||
version: Optional[str] = None
|
||||
creator: Optional[str] = None
|
||||
encryption: Optional[str] = None
|
||||
federatable: bool = True
|
||||
public: bool = True
|
||||
join_rules: Optional[str] = None
|
||||
guest_access: Optional[str] = None
|
||||
history_visibility: Optional[str] = None
|
||||
state_events: int = 0
|
||||
room_type: Optional[str] = None
|
||||
|
||||
avatar: Optional[str] = None
|
||||
|
||||
@classmethod
|
||||
def from_api_response(cls, data: Dict[str, Any]) -> "Room":
|
||||
"""Create a Room object from a dictionary."""
|
||||
return cls(
|
||||
room_id=str(data['room_id']),
|
||||
name=data.get('name'),
|
||||
canonical_alias=data.get('canonical_alias'),
|
||||
joined_members=data.get('joined_members', 0),
|
||||
joined_local_members=data.get('joined_local_members', 0),
|
||||
version=data.get('version'),
|
||||
creator=data.get('creator'),
|
||||
encryption=data.get('encryption'),
|
||||
federatable=data.get('federatable', True),
|
||||
public=data.get('public', True),
|
||||
join_rules=data.get('join_rules'),
|
||||
guest_access=data.get('guest_access'),
|
||||
history_visibility=data.get('history_visibility'),
|
||||
state_events=data.get('state_events', 0),
|
||||
room_type=data.get('room_type'),
|
||||
avatar=data.get('avatar'),
|
||||
)
|
||||
|
||||
|
||||
@dataclass
|
||||
class RoomListResponse:
|
||||
"""Response from room list API"""
|
||||
rooms: List[Room]
|
||||
next_batch: Optional[int]
|
||||
prev_batch: Optional[int]
|
||||
total_rooms: int
|
||||
|
||||
@classmethod
|
||||
def from_api_response(cls, data: Dict[str, Any]) -> "RoomListResponse":
|
||||
"""Create RoomListResponse from API response."""
|
||||
rooms = [Room.from_api_response(room_data) for room_data in data.get('rooms', [])]
|
||||
|
||||
return cls(
|
||||
rooms=rooms,
|
||||
next_batch=data.get('next_batch'),
|
||||
prev_batch=data.get('prev_batch'),
|
||||
total_rooms=data.get('total_rooms', len(rooms))
|
||||
)
|
Loading…
Add table
Add a link
Reference in a new issue