Update app.py
Browse files
app.py
CHANGED
|
@@ -874,6 +874,7 @@ def handle_join_chat(data):
|
|
| 874 |
"role": role,
|
| 875 |
"receiver_number": data.get('receiver_number'),
|
| 876 |
"public_key": public_key,
|
|
|
|
| 877 |
"joined_at": time.time(),
|
| 878 |
"last_seen": time.time()
|
| 879 |
}
|
|
@@ -986,21 +987,22 @@ def handle_leave_chat(data):
|
|
| 986 |
|
| 987 |
if room_id in CHAT_ROOMS and session_id in CHAT_ROOMS[room_id]["active_sessions"]:
|
| 988 |
session = CHAT_ROOMS[room_id]["active_sessions"][session_id]
|
| 989 |
-
del CHAT_ROOMS[room_id]["active_sessions"][session_id]
|
| 990 |
|
| 991 |
# If admin left and burn_on_admin_exit is true
|
| 992 |
if session["role"] == "admin" and CHAT_ROOMS[room_id]["settings"]["burn_on_admin_exit"]:
|
| 993 |
emit('room_closing', {'reason': 'Admin left the room'}, room=room_id)
|
| 994 |
del CHAT_ROOMS[room_id]
|
| 995 |
else:
|
| 996 |
-
#
|
| 997 |
emit('user_left', {
|
| 998 |
'session_id': session_id, # NEW: Include session_id
|
| 999 |
'role': session["role"],
|
| 1000 |
'receiver_number': session.get("receiver_number"),
|
| 1001 |
-
'active_count': len(CHAT_ROOMS[room_id]["active_sessions"])
|
| 1002 |
-
}, room=room_id) # Send to
|
| 1003 |
|
|
|
|
|
|
|
| 1004 |
leave_room(room_id)
|
| 1005 |
|
| 1006 |
@app.route("/api/auth/signup", methods=["POST"])
|
|
@@ -1505,26 +1507,30 @@ def handle_disconnect():
|
|
| 1505 |
print(f"👤 User disconnected: {username_hash[:8]}...")
|
| 1506 |
|
| 1507 |
# Remove from chat rooms
|
|
|
|
| 1508 |
for room_id, room in list(CHAT_ROOMS.items()):
|
| 1509 |
-
|
| 1510 |
-
#
|
| 1511 |
-
|
| 1512 |
-
|
| 1513 |
-
|
| 1514 |
-
|
| 1515 |
-
|
| 1516 |
-
|
| 1517 |
-
|
| 1518 |
-
|
| 1519 |
-
|
| 1520 |
-
|
| 1521 |
-
|
| 1522 |
-
|
| 1523 |
-
|
| 1524 |
-
|
| 1525 |
-
|
| 1526 |
-
|
| 1527 |
-
|
|
|
|
|
|
|
|
|
|
| 1528 |
|
| 1529 |
# Remove from screen share rooms
|
| 1530 |
for room_id, room in list(SCREEN_SHARE_ROOMS.items()):
|
|
|
|
| 874 |
"role": role,
|
| 875 |
"receiver_number": data.get('receiver_number'),
|
| 876 |
"public_key": public_key,
|
| 877 |
+
"socket_id": request.sid, # NEW: Store socket ID
|
| 878 |
"joined_at": time.time(),
|
| 879 |
"last_seen": time.time()
|
| 880 |
}
|
|
|
|
| 987 |
|
| 988 |
if room_id in CHAT_ROOMS and session_id in CHAT_ROOMS[room_id]["active_sessions"]:
|
| 989 |
session = CHAT_ROOMS[room_id]["active_sessions"][session_id]
|
|
|
|
| 990 |
|
| 991 |
# If admin left and burn_on_admin_exit is true
|
| 992 |
if session["role"] == "admin" and CHAT_ROOMS[room_id]["settings"]["burn_on_admin_exit"]:
|
| 993 |
emit('room_closing', {'reason': 'Admin left the room'}, room=room_id)
|
| 994 |
del CHAT_ROOMS[room_id]
|
| 995 |
else:
|
| 996 |
+
# CRITICAL: Emit BEFORE deleting and leaving
|
| 997 |
emit('user_left', {
|
| 998 |
'session_id': session_id, # NEW: Include session_id
|
| 999 |
'role': session["role"],
|
| 1000 |
'receiver_number': session.get("receiver_number"),
|
| 1001 |
+
'active_count': len(CHAT_ROOMS[room_id]["active_sessions"]) - 1 # Count after this person leaves
|
| 1002 |
+
}, room=room_id) # Send to ENTIRE room (including sender)
|
| 1003 |
|
| 1004 |
+
# Delete AFTER emitting
|
| 1005 |
+
del CHAT_ROOMS[room_id]["active_sessions"][session_id]
|
| 1006 |
leave_room(room_id)
|
| 1007 |
|
| 1008 |
@app.route("/api/auth/signup", methods=["POST"])
|
|
|
|
| 1507 |
print(f"👤 User disconnected: {username_hash[:8]}...")
|
| 1508 |
|
| 1509 |
# Remove from chat rooms
|
| 1510 |
+
# Remove from chat rooms and notify others
|
| 1511 |
for room_id, room in list(CHAT_ROOMS.items()):
|
| 1512 |
+
for session_id, session in list(room['active_sessions'].items()):
|
| 1513 |
+
# Check if this session matches the disconnected socket
|
| 1514 |
+
if session.get('socket_id') == request.sid:
|
| 1515 |
+
print(f"[Disconnect] User {session_id} disconnected from room {room_id}")
|
| 1516 |
+
|
| 1517 |
+
# CRITICAL: Notify BEFORE deleting
|
| 1518 |
+
socketio.emit('user_left', {
|
| 1519 |
+
'session_id': session_id,
|
| 1520 |
+
'role': session['role'],
|
| 1521 |
+
'receiver_number': session.get('receiver_number'),
|
| 1522 |
+
'active_count': len(room['active_sessions']) - 1
|
| 1523 |
+
}, room=room_id)
|
| 1524 |
+
|
| 1525 |
+
# If admin disconnected, close room
|
| 1526 |
+
if session['role'] == 'admin' and room['settings'].get('burn_on_admin_exit', True):
|
| 1527 |
+
print(f"[Disconnect] Admin disconnected, closing room {room_id}")
|
| 1528 |
+
socketio.emit('room_closing', {'reason': 'Admin disconnected'}, room=room_id)
|
| 1529 |
+
del CHAT_ROOMS[room_id]
|
| 1530 |
+
else:
|
| 1531 |
+
del room['active_sessions'][session_id]
|
| 1532 |
+
|
| 1533 |
+
break
|
| 1534 |
|
| 1535 |
# Remove from screen share rooms
|
| 1536 |
for room_id, room in list(SCREEN_SHARE_ROOMS.items()):
|