feat: Add game activity status (Experimental)
All checks were successful
Queue Release Build / prepare (push) Successful in 21s
Deploy Web Apps / deploy (push) Successful in 5m14s
Queue Release Build / build-windows (push) Successful in 16m18s
Queue Release Build / build-linux (push) Successful in 29m20s
Queue Release Build / finalize (push) Successful in 36s

This commit is contained in:
2026-04-27 05:46:33 +02:00
parent 3858beb28e
commit 66c6f34cd3
52 changed files with 2120 additions and 113 deletions

View File

@@ -12,7 +12,8 @@ import {
BanEntry,
VoiceState,
ScreenShareState,
CameraState
CameraState,
GameActivity
} from '../../shared-kernel';
export const UsersActions = createActionGroup({
@@ -65,6 +66,7 @@ export const UsersActions = createActionGroup({
'Update Voice State': props<{ userId: string; voiceState: Partial<VoiceState> }>(),
'Update Screen Share State': props<{ userId: string; screenShareState: Partial<ScreenShareState> }>(),
'Update Camera State': props<{ userId: string; cameraState: Partial<CameraState> }>(),
'Update Game Activity': props<{ userId: string; gameActivity: GameActivity | null }>(),
'Set Manual Status': props<{ status: UserStatus | null }>(),
'Update Remote User Status': props<{ userId: string; status: UserStatus }>(),

View File

@@ -242,7 +242,8 @@ function buildPresenceRemovalChanges(
status: isOnline ? (user.status !== 'offline' ? user.status : 'online') : 'offline',
voiceState: shouldClearLiveState ? buildDisconnectedVoiceState(user) : user.voiceState,
screenShareState: shouldClearLiveState ? buildInactiveScreenShareState(user) : user.screenShareState,
cameraState: shouldClearLiveState ? buildInactiveCameraState(user) : user.cameraState
cameraState: shouldClearLiveState ? buildInactiveCameraState(user) : user.cameraState,
gameActivity: isOnline ? user.gameActivity : undefined
};
}
@@ -555,6 +556,23 @@ export const usersReducer = createReducer(
state
);
}),
on(UsersActions.updateGameActivity, (state, { userId, gameActivity }) => {
const existingUser = state.entities[userId];
if (!existingUser) {
return state;
}
return usersAdapter.updateOne(
{
id: userId,
changes: {
gameActivity: gameActivity ?? undefined
}
},
state
);
}),
on(UsersActions.syncUsers, (state, { users }) =>
usersAdapter.upsertMany(users, state)
),