Add reconnect logic for desktop app

This commit is contained in:
Peter Stockings
2026-03-03 20:10:05 +11:00
parent 92aa926cf0
commit 3eb4b671c6
3 changed files with 35 additions and 4 deletions

View File

@@ -49,7 +49,9 @@ class VlcSyncApp(QMainWindow):
self.sync_client = SyncClientThread("wss://video-sync.peterstockings.com/ws")
self.sync_client.connected.connect(self.on_ws_connected)
self.sync_client.disconnected.connect(self.on_ws_disconnected)
self.sync_client.room_joined.connect(self.on_room_joined)
self.sync_client.room_rejoined.connect(self.on_room_rejoined)
self.sync_client.room_error.connect(self.on_room_error)
self.sync_client.file_check_needed.connect(self.on_file_check_needed)
self.sync_client.users_updated.connect(self.on_users_updated)
@@ -458,6 +460,18 @@ class VlcSyncApp(QMainWindow):
if self.pending_connect_action:
self.pending_connect_action()
self.pending_connect_action = None
elif self.stacked_widget.currentIndex() == 1 and self.room_code and self.username:
# We are already in a room and just reconnected
self.sync_client.send_message({
"type": "rejoin_room",
"username": self.username,
"code": self.room_code
})
def on_ws_disconnected(self):
if self.stacked_widget.currentIndex() == 1:
self.room_code_display.setText(f"Room: {self.room_code} (Reconnecting...)")
self.on_system_message("⚠️ Connection lost. Trying to reconnect...")
def on_room_error(self, msg: str):
QMessageBox.critical(self, "Room Error", msg)
@@ -537,6 +551,19 @@ class VlcSyncApp(QMainWindow):
for chat in chat_history:
self.on_chat_message(chat.get("username", "Unknown"), chat.get("message", ""), chat.get("timestamp", 0))
def on_room_rejoined(self, msg: dict):
self.room_code_display.setText(f"Room: {self.room_code}")
self.on_system_message("✅ Reconnected to the room.")
users = msg.get("users", [])
if users:
self.on_users_updated(users)
state = msg.get("state", {})
if state:
# Don't reload media, just resync playback state
self.on_sync_event(state)
def on_chat_message(self, author: str, text: str, timestamp: int):
try:
dt = datetime.datetime.fromtimestamp(timestamp / 1000.0)