Add scrobble functionality (#19)

* Fix slider bar background to use theme

* Add "scrobbleAtDuration" to settings store

* Add subscribeWithSelector and playCount incrementor

* Add scrobbling API and mutation

* Add scrobble settings

* Begin support for multi-server queue handling

* Dynamically set version on auth header

* Add scrobbling functionality for navidrome/jellyfin
This commit is contained in:
Jeff 2023-01-30 20:01:57 -08:00 committed by GitHub
parent 85bf910d65
commit 484c96187c
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
14 changed files with 1253 additions and 653 deletions

View file

@ -12,6 +12,7 @@ import {
useShuffleStatus,
} from '/@/renderer/store';
import { usePlayerType, useSettingsStore } from '/@/renderer/store/settings.store';
import { useScrobble } from '/@/renderer/features/player/hooks/use-scrobble';
const mpvPlayer = isElectron() ? window.electron.mpvPlayer : null;
const mpvPlayerListener = isElectron() ? window.electron.mpvPlayerListener : null;
@ -35,6 +36,8 @@ export const useCenterControls = (args: { playersRef: any }) => {
const currentPlayerRef = currentPlayer === 1 ? player1Ref : player2Ref;
const nextPlayerRef = currentPlayer === 1 ? player2Ref : player1Ref;
const { handleScrobbleFromSongRestart, handleScrobbleFromSeek } = useScrobble();
const resetPlayers = useCallback(() => {
if (player1Ref.getInternalPlayer()) {
player1Ref.getInternalPlayer().currentTime = 0;
@ -289,6 +292,7 @@ export const useCenterControls = (args: { playersRef: any }) => {
// Reset the current track more than 10 seconds have elapsed
if (currentTime >= 10) {
setCurrentTime(0);
handleScrobbleFromSongRestart(currentTime);
if (isMpvPlayer) {
return mpvPlayer.seekTo(0);
@ -373,6 +377,7 @@ export const useCenterControls = (args: { playersRef: any }) => {
}, [
checkIsFirstTrack,
currentPlayerRef,
handleScrobbleFromSongRestart,
isMpvPlayer,
pause,
playerType,
@ -438,13 +443,15 @@ export const useCenterControls = (args: { playersRef: any }) => {
(e: number | any) => {
setCurrentTime(e);
handleScrobbleFromSeek(e);
if (isMpvPlayer) {
mpvPlayer.seekTo(e);
} else {
currentPlayerRef.seekTo(e);
}
},
[currentPlayerRef, isMpvPlayer, setCurrentTime],
[currentPlayerRef, handleScrobbleFromSeek, isMpvPlayer, setCurrentTime],
);
const handleQuit = useCallback(() => {