@@ -46,13 +46,6 @@ async def connect(self):
4646 cache .set (
4747 get_user_channel_cache_key (self .user ), self .channel_name , ONE_WEEK_IN_SECONDS
4848 )
49- # set user online
50- user_cache_key = get_user_online_cache_key (self .user )
51- cache .set (user_cache_key , True , ONE_DAY_IN_SECONDS )
52-
53- online_users = cache .get (get_users_online_cache_key (), set ())
54- online_users .add (self .user .id )
55- cache .set (get_users_online_cache_key (), online_users )
5649
5750 # get all projects that user is a member of
5851 project_ids_list = Collaborator .objects .filter (user = self .user ).values_list (
@@ -68,6 +61,18 @@ async def connect(self):
6861 f"{ EventGroupType .CHATS_RELATED } _{ project_id } " , self .channel_name
6962 )
7063
64+ # set user online
65+ user_cache_key = get_user_online_cache_key (self .user )
66+ cache .set (user_cache_key , True , ONE_DAY_IN_SECONDS )
67+ online_users = cache .get (get_users_online_cache_key (), set ())
68+ online_users .add (self .user .id )
69+ cache .set (get_users_online_cache_key (), online_users )
70+ # notify everyone that this user is online
71+ await self .channel_layer .group_send (
72+ EventGroupType .GENERAL_EVENTS ,
73+ {"type" : EventType .SET_OFFLINE , "user" : {"id" : self .user .id }},
74+ )
75+
7176 await self .channel_layer .group_add (
7277 EventGroupType .GENERAL_EVENTS , self .channel_name
7378 )
@@ -81,8 +86,9 @@ async def disconnect(self, close_code):
8186 cache .delete (get_user_online_cache_key (self .user ))
8287 room_name = EventGroupType .GENERAL_EVENTS
8388
89+ # TODO: add a User extra-small serializer for this?
8490 await self .channel_layer .group_send (
85- room_name , {"type" : EventType .SET_OFFLINE , "user_id " : self .user .pk }
91+ room_name , {"type" : EventType .SET_OFFLINE , "user " : { "id" : self .user .id } }
8692 )
8793
8894 async def receive_json (self , content , ** kwargs ):
@@ -99,7 +105,6 @@ async def receive_json(self, content, **kwargs):
99105 EventType .DELETE_MESSAGE ,
100106 EventType .EDIT_MESSAGE ,
101107 ]:
102-
103108 if event .content ["chat_type" ] == ChatType .DIRECT :
104109 self .event = DirectEvent (self .user , self .channel_layer , self .channel_name )
105110 elif event .content ["chat_type" ] == ChatType .PROJECT :
0 commit comments