| 
13 | 13 | from common_library.logging.logging_errors import create_troubleshooting_log_kwargs  | 
14 | 14 | from models_library.api_schemas_webserver.socketio import SocketIORoomStr  | 
15 | 15 | from models_library.products import ProductName  | 
 | 16 | +from models_library.projects import ProjectID  | 
16 | 17 | from models_library.socketio import SocketMessageDict  | 
17 | 18 | from models_library.users import UserID  | 
18 | 19 | from pydantic import TypeAdapter  | 
 | 
23 | 24 | from ..groups.api import list_user_groups_ids_with_read_access  | 
24 | 25 | from ..login.decorators import login_required  | 
25 | 26 | from ..products import products_web  | 
26 |  | -from ..resource_manager.user_sessions import managed_resource  | 
 | 27 | +from ..resource_manager.user_sessions import PROJECT_ID_KEY, managed_resource  | 
27 | 28 | from ._utils import EnvironDict, SocketID, get_socket_server, register_socketio_handler  | 
28 | 29 | from .messages import SOCKET_IO_HEARTBEAT_EVENT, send_message_to_user  | 
29 | 30 | 
 
  | 
@@ -99,6 +100,21 @@ async def _set_user_in_group_rooms(  | 
99 | 100 |     await sio.enter_room(socket_id, SocketIORoomStr.from_user_id(user_id))  | 
100 | 101 | 
 
  | 
101 | 102 | 
 
  | 
 | 103 | +async def _set_user_in_project_rooms(  | 
 | 104 | +    app: web.Application, user_id: UserID, client_session_id: str, socket_id: SocketID  | 
 | 105 | +) -> None:  | 
 | 106 | +    """Adds user in project rooms in case he has any project open"""  | 
 | 107 | +    project_ids = []  | 
 | 108 | +    with managed_resource(user_id, client_session_id, app) as user_session:  | 
 | 109 | +        project_ids = await user_session.find_all_resources_of_user(PROJECT_ID_KEY)  | 
 | 110 | + | 
 | 111 | +    sio = get_socket_server(app)  | 
 | 112 | +    for project_id in project_ids:  | 
 | 113 | +        await sio.enter_room(  | 
 | 114 | +            socket_id, SocketIORoomStr.from_project_id(ProjectID(project_id))  | 
 | 115 | +        )  | 
 | 116 | + | 
 | 117 | + | 
102 | 118 | #  | 
103 | 119 | # socketio event handlers  | 
104 | 120 | #  | 
@@ -135,6 +151,7 @@ async def connect(  | 
135 | 151 |         )  | 
136 | 152 | 
 
  | 
137 | 153 |         await _set_user_in_group_rooms(app, user_id, socket_id)  | 
 | 154 | +        await _set_user_in_project_rooms(app, user_id, client_session_id, socket_id)  | 
138 | 155 | 
 
  | 
139 | 156 |         _logger.debug("Sending set_heartbeat_emit_interval with %s", _EMIT_INTERVAL_S)  | 
140 | 157 | 
 
  | 
 | 
0 commit comments