diff --git a/src/hooks/useTraktAutosync.ts b/src/hooks/useTraktAutosync.ts index f4cbe5a7..9f8ecdf3 100644 --- a/src/hooks/useTraktAutosync.ts +++ b/src/hooks/useTraktAutosync.ts @@ -710,11 +710,27 @@ export function useTraktAutosync(options: TraktAutosyncOptions) { logger.log(`[TraktAutosync] Manual state reset for: ${options.title}`); }, [options.title]); + // Resume session after app foreground return — clears hasStopped so a fresh + // /scrobble/start can be sent without triggering the remount-duplicate guard. + // Only re-opens if session isn't complete (already scrobbled). + const resumeSession = useCallback(async (currentTime: number, duration: number) => { + if (isSessionComplete.current) { + logger.log(`[TraktAutosync] resumeSession: session complete, skipping`); + return; + } + if (isUnmounted.current) return; + logger.log(`[TraktAutosync] resumeSession: clearing hasStopped/hasStartedWatching and re-opening session`); + hasStopped.current = false; + hasStartedWatching.current = false; + await handlePlaybackStart(currentTime, duration); + }, [handlePlaybackStart]); + return { isAuthenticated, handlePlaybackStart, handleProgressUpdate, handlePlaybackEnd, + resumeSession, resetState }; }