|
16 | 16 | ChatType, |
17 | 17 | ) |
18 | 18 | from core.constants import ONE_DAY_IN_SECONDS, ONE_WEEK_IN_SECONDS |
19 | | -from core.utils import get_user_online_cache_key |
| 19 | +from core.utils import get_user_online_cache_key, get_users_online_cache_key |
20 | 20 | from projects.models import Collaborator |
21 | 21 | from users.models import CustomUser |
22 | 22 | from chats.consumers.event_types import DirectEvent, ProjectEvent |
@@ -186,15 +186,22 @@ async def edit_message(self, event: Event): |
186 | 186 |
|
187 | 187 | async def __process_general_event(self, event: Event, room_name: str): |
188 | 188 | cache_key = get_user_online_cache_key(self.user) |
| 189 | + users_online_list_key = get_users_online_cache_key() |
189 | 190 | if event.type == EventType.SET_ONLINE: |
190 | 191 | cache.set(cache_key, True, ONE_DAY_IN_SECONDS) |
| 192 | + users_online_list = cache.get_or_set(users_online_list_key, set()) |
| 193 | + users_online_list.add(self.user.pk) |
| 194 | + cache.set(users_online_list_key, users_online_list, ONE_DAY_IN_SECONDS) |
191 | 195 |
|
192 | 196 | # sent everyone online event that user X is online |
193 | 197 | await self.channel_layer.group_send( |
194 | 198 | room_name, {"type": EventType.SET_ONLINE, "user_id": self.user.pk} |
195 | 199 | ) |
196 | 200 | elif event.type == EventType.SET_OFFLINE: |
197 | 201 | cache.delete(cache_key) |
| 202 | + users_online_list = cache.get_or_set(users_online_list_key, set()) |
| 203 | + users_online_list.remove(self.user.pk) |
| 204 | + cache.set(users_online_list_key, users_online_list, ONE_DAY_IN_SECONDS) |
198 | 205 |
|
199 | 206 | # sent everyone online event that user X is offline |
200 | 207 | await self.channel_layer.group_send( |
|
0 commit comments