From 68c88081885bb3bda196dfe71b684e21e678787e Mon Sep 17 00:00:00 2001 From: Lei Nelissen Date: Sun, 21 Jul 2024 22:10:10 +0200 Subject: [PATCH] fix: send last position for `Stopped` event instead of the current position, which is `0` when we move to a new track --- src/utility/JellyfinApi/playback.ts | 7 ++++--- src/utility/PlaybackService.ts | 2 +- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/src/utility/JellyfinApi/playback.ts b/src/utility/JellyfinApi/playback.ts index d76091a..047448d 100644 --- a/src/utility/JellyfinApi/playback.ts +++ b/src/utility/JellyfinApi/playback.ts @@ -17,11 +17,12 @@ const RepeatModeMap: Record = { */ export async function sendPlaybackEvent( path: string, - track?: Track + track?: Track, + lastPosition?: number, ) { // Extract all data from react-native-track-player const [ - activeTrack, { position }, repeatMode, volume, { state }, + activeTrack, { position: currentPosition }, repeatMode, volume, { state }, ] = await Promise.all([ track || TrackPlayer.getActiveTrack(), TrackPlayer.getProgress(), @@ -37,7 +38,7 @@ export async function sendPlaybackEvent( IsPaused: state === State.Paused, RepeatMode: RepeatModeMap[repeatMode], ShuffleMode: 'Sorted', - PositionTicks: Math.round(position * 10_000_000), + PositionTicks: Math.round((lastPosition || currentPosition) * 10_000_000), PlaybackRate: 1, PlayMethod: 'transcode', MediaSourceId: activeTrack?.backendId || null, diff --git a/src/utility/PlaybackService.ts b/src/utility/PlaybackService.ts index 1d2c56e..51a7833 100644 --- a/src/utility/PlaybackService.ts +++ b/src/utility/PlaybackService.ts @@ -45,7 +45,7 @@ export default async function() { if (settings.enablePlaybackReporting && 'track' in e) { // GUARD: End the previous track if it's about to end if (e.lastTrack) { - await sendPlaybackEvent('/Sessions/Playing/Stopped', e.lastTrack); + await sendPlaybackEvent('/Sessions/Playing/Stopped', e.lastTrack, e.lastPosition); } await sendPlaybackEvent('/Sessions/Playing', e.track);