Synclean/src/synclean/models/room.py
2025-07-16 15:09:41 +03:30

67 lines
2.2 KiB
Python

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))
)