From c475b43ebd7976138baf4df4a27118ffc4b7fbe8 Mon Sep 17 00:00:00 2001 From: viown <48097677+viown@users.noreply.github.com> Date: Wed, 11 Jun 2025 00:49:25 +0300 Subject: [PATCH] Maintain order of session updates --- .../sessions/hooks/useLiveSessions.ts | 24 +++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/src/apps/dashboard/features/sessions/hooks/useLiveSessions.ts b/src/apps/dashboard/features/sessions/hooks/useLiveSessions.ts index 9eb79f54f..e4801a094 100644 --- a/src/apps/dashboard/features/sessions/hooks/useLiveSessions.ts +++ b/src/apps/dashboard/features/sessions/hooks/useLiveSessions.ts @@ -2,7 +2,7 @@ import type { SessionInfoDto } from '@jellyfin/sdk/lib/generated-client/models/s import { SessionMessageType } from '@jellyfin/sdk/lib/generated-client/models/session-message-type'; import { useApi } from 'hooks/useApi'; import { ApiClient } from 'jellyfin-apiclient'; -import { useEffect } from 'react'; +import { useCallback, useEffect } from 'react'; import serverNotifications from 'scripts/serverNotifications'; import Events, { Event } from 'utils/events'; import { QUERY_KEY, useSessions } from '../api/useSessions'; @@ -18,9 +18,29 @@ const useLiveSessions = () => { const sessionsQuery = useSessions(params); + const updateSessions = useCallback((sessions: SessionInfoDto[]) => { + const newSessions = filterSessions(sessions); + const data = queryClient.getQueryData([ QUERY_KEY, params ]) as SessionInfoDto[]; + if (data) { + const currentSessions = [ ...data ]; + + for (const session of newSessions) { + const sessionIndex = currentSessions.findIndex((value) => value.DeviceId === session.DeviceId); + if (sessionIndex == -1) { + return [ ...currentSessions, session ]; + }; + currentSessions[sessionIndex] = session; + return currentSessions; + } + return currentSessions; + } else { + return newSessions; + } + }, []); + useEffect(() => { const onSessionsUpdate = (evt: Event, apiClient: ApiClient, info: SessionInfoDto[]) => { - queryClient.setQueryData([ QUERY_KEY, params ], filterSessions(info)); + queryClient.setQueryData([ QUERY_KEY, params ], updateSessions(info)); }; __legacyApiClient__?.sendMessage(SessionMessageType.SessionsStart, '0,1500');