Organize banners, add LeftBanner

Previously there was InviteOffer, now there's a base Banner component,
InviteBanner and LeftBanner.
This commit is contained in:
miruka
2019-04-21 15:20:20 -04:00
parent 909e1c3363
commit ea8f75c729
14 changed files with 274 additions and 134 deletions

View File

@@ -13,7 +13,8 @@ from .backend import Backend
from .client import Client
from .model.items import Room, RoomEvent, User
Inviter = Optional[Dict[str, str]]
Inviter = Optional[Dict[str, str]]
LeftEvent = Optional[Dict[str, str]]
class SignalManager(QObject):
@@ -23,8 +24,8 @@ class SignalManager(QObject):
super().__init__(parent=backend)
self.backend = backend
self.last_room_events: Deque[str] = Deque(maxlen=1000)
self._events_in_transfer: int = 0
self.last_room_events: Deque[str] = Deque(maxlen=1000)
self._events_in_transfer: int = 0
cm = self.backend.clientManager
cm.clientAdded.connect(self.onClientAdded)
@@ -60,45 +61,60 @@ class SignalManager(QObject):
client: Client,
room_id: str,
inviter: Inviter = None) -> None:
self._add_room(
client, client.nio.invited_rooms[room_id], "Invites", inviter
)
self._add_room(client, room_id, client.nio.invited_rooms[room_id],
"Invites", inviter=inviter)
def onRoomJoined(self, client: Client, room_id: str) -> None:
self._add_room(client, client.nio.rooms[room_id], "Rooms")
self._add_room(client, room_id, client.nio.rooms[room_id], "Rooms")
def onRoomLeft(self,
client: Client,
room_id: str,
left_event: LeftEvent = None) -> None:
self._add_room(client, room_id, client.nio.rooms.get(room_id), "Left",
left_event=left_event)
def _add_room(self,
client: Client,
room: MatrixRoom,
category: str,
inviter: Inviter = None) -> None:
model = self.backend.models.rooms[client.userId]
client: Client,
room_id: str,
room: MatrixRoom,
category: str,
inviter: Inviter = None,
left_event: LeftEvent = None) -> None:
assert not (inviter and left_event)
model = self.backend.models.rooms[client.userId]
no_update = []
def get_displayname() -> Optional[str]:
if not room:
no_update.append("displayName")
return room_id
name = room.name or room.canonical_alias
if name:
return name
def group_name() -> Optional[str]:
name = room.group_name()
return None if name == "Empty room?" else name
item = Room(
roomId = room.room_id,
roomId = room_id,
category = category,
displayName = room.name or room.canonical_alias or group_name(),
topic = room.topic,
displayName = get_displayname(),
topic = room.topic if room else "",
inviter = inviter,
leftEvent = left_event,
no_update = no_update,
)
model.updateOrAppendWhere("roomId", room.room_id, item)
def onRoomLeft(self, client: Client, room_id: str) -> None:
rooms = self.backend.models.rooms[client.userId]
try:
index = rooms.indexWhere("roomId", room_id)
except ValueError:
pass
else:
del rooms[index]
model.updateOrAppendWhere("roomId", room_id, item)
def onRoomSyncPrevBatchTokenReceived(