diff --git a/src/renderer/features/player/hooks/use-scrobble.ts b/src/renderer/features/player/hooks/use-scrobble.ts index 3e0468e57..3601f3eae 100644 --- a/src/renderer/features/player/hooks/use-scrobble.ts +++ b/src/renderer/features/player/hooks/use-scrobble.ts @@ -407,6 +407,47 @@ export const useScrobble = () => { [isScrobbleEnabled, isPrivateModeEnabled, sendScrobble], ); + const handleScrobbleFromRepeat = useCallback(() => { + if (!isScrobbleEnabled || isPrivateModeEnabled) { + return; + } + + const currentSong = usePlayerStore.getState().getCurrentSong(); + const currentStatus = usePlayerStore.getState().player.status; + + if (currentStatus !== PlayerStatus.PLAYING || !currentSong?.id) { + return; + } + + setIsCurrentSongScrobbled(false); + lastProgressEventRef.current = 0; + previousTimestampRef.current = 0; + + sendScrobble.mutate( + { + apiClientProps: { serverId: currentSong._serverId || '' }, + query: { + albumId: currentSong.albumId, + event: 'start', + id: currentSong.id, + position: 0, + submission: false, + }, + }, + { + onSuccess: () => { + logFn.debug(logMsg[LogCategory.SCROBBLE].scrobbledStart, { + category: LogCategory.SCROBBLE, + meta: { + id: currentSong.id, + reason: 'from repeat', + }, + }); + }, + }, + ); + }, [isScrobbleEnabled, isPrivateModeEnabled, sendScrobble]); + // Update previous timestamp on progress for use in status change handler const handleProgressUpdate = useCallback( (properties: { timestamp: number }, prev: { timestamp: number }) => { @@ -420,10 +461,17 @@ export const useScrobble = () => { { onCurrentSongChange: handleScrobbleFromSongChange, onPlayerProgress: handleProgressUpdate, + onPlayerRepeated: handleScrobbleFromRepeat, onPlayerSeekToTimestamp: handleScrobbleFromSeek, onPlayerStatus: handleScrobbleFromStatus, }, - [handleScrobbleFromSongChange, handleProgressUpdate, handleScrobbleFromSeek], + [ + handleScrobbleFromSongChange, + handleProgressUpdate, + handleScrobbleFromRepeat, + handleScrobbleFromSeek, + handleScrobbleFromStatus, + ], ); }; diff --git a/web.vite.config.ts b/web.vite.config.ts index 736490a32..79f50d5bf 100644 --- a/web.vite.config.ts +++ b/web.vite.config.ts @@ -41,7 +41,7 @@ export default defineConfig({ '@atlaskit/pragmatic-drag-and-drop', '@atlaskit/pragmatic-drag-and-drop-auto-scroll', '@atlaskit/pragmatic-drag-and-drop-hitbox', - '@tanstack_react-query-persist-client', + '@tanstack/react-query-persist-client', 'idb-keyval', ], },