87 lines
2.6 KiB
Python
87 lines
2.6 KiB
Python
from enum import Enum
|
|
from typing import Any, Dict, List, Optional
|
|
|
|
from PyQt5.QtCore import QDateTime, QSortFilterProxyModel
|
|
|
|
from ..pyqt_future import PyQtFuture
|
|
from .list_item import ListItem
|
|
from .list_model import ListModel
|
|
|
|
|
|
class Account(ListItem):
|
|
_required_init_values = {"userId", "roomCategories"}
|
|
_constant = {"userId", "roomCategories"}
|
|
|
|
userId: str = ""
|
|
roomCategories: ListModel = ListModel()
|
|
|
|
|
|
class RoomCategory(ListItem):
|
|
_required_init_values = {"name", "rooms", "sortedRooms"}
|
|
_constant = {"name", "rooms", "sortedRooms"}
|
|
|
|
name: str = ""
|
|
rooms: ListModel = ListModel()
|
|
sortedRooms: QSortFilterProxyModel = QSortFilterProxyModel()
|
|
|
|
|
|
class Room(ListItem):
|
|
_required_init_values = {"roomId", "displayName"}
|
|
_constant = {"roomId"}
|
|
|
|
roomId: str = ""
|
|
displayName: str = ""
|
|
topic: Optional[str] = None
|
|
lastEventDateTime: Optional[QDateTime] = None
|
|
typingMembers: List[str] = []
|
|
members: List[str] = []
|
|
|
|
inviter: Optional[Dict[str, str]] = None
|
|
leftEvent: Optional[Dict[str, str]] = None
|
|
|
|
|
|
# ----------
|
|
|
|
class RoomEvent(ListItem):
|
|
_required_init_values = {"type", "dict", "dateTime"}
|
|
_constant = {"type"}
|
|
|
|
type: str = ""
|
|
dict: Dict[str, Any] = {}
|
|
dateTime: QDateTime = QDateTime()
|
|
isLocalEcho: bool = False
|
|
|
|
|
|
# ----------
|
|
|
|
class User(ListItem):
|
|
_required_init_values = {"userId", "devices"}
|
|
_constant = {"userId", "devices"}
|
|
|
|
# Use PyQtFutures because the info might or might not need a request
|
|
# to be fetched, and we don't want to block the UI in any case.
|
|
# QML's property binding ability is used on the PyQtFuture.value
|
|
userId: str = ""
|
|
displayName: Optional[PyQtFuture] = None
|
|
avatarUrl: Optional[PyQtFuture] = None
|
|
statusMessage: Optional[PyQtFuture] = None
|
|
devices: ListModel = ListModel()
|
|
|
|
|
|
class Trust(Enum):
|
|
blacklisted = -1
|
|
undecided = 0
|
|
trusted = 1
|
|
|
|
|
|
class Device(ListItem):
|
|
_required_init_values = {"deviceId", "ed25519Key"}
|
|
_constant = {"deviceId", "ed25519Key"}
|
|
|
|
deviceId: str = ""
|
|
ed25519Key: str = ""
|
|
displayName: Optional[str] = None
|
|
trust: Trust = Trust.undecided
|
|
lastSeenIp: Optional[str] = None
|
|
lastSeenDate: Optional[QDateTime] = None
|