mirror of
https://github.com/Jellify-Music/App.git
synced 2026-02-05 01:48:30 -06:00
reporting playback to jellyfin server for lastfm scrobbling
This commit is contained in:
@@ -3,9 +3,11 @@ import { JellifyTrack } from "../types/JellifyTrack";
|
||||
import { storage } from "../constants/storage";
|
||||
import { MMKVStorageKeys } from "../enums/mmkv-storage-keys";
|
||||
import { findPlayQueueIndexStart } from "./helpers";
|
||||
import { add, reset, setupPlayer } from "react-native-track-player/lib/src/trackPlayer";
|
||||
import { add, reset, play as rntpPlay, pause as rntpPause, skipToNext, skipToPrevious, setupPlayer, getActiveTrack } from "react-native-track-player/lib/src/trackPlayer";
|
||||
import _ from "lodash";
|
||||
import { buildNewQueue } from "./helpers/queue";
|
||||
import { useApiClientContext } from "../components/jellyfin-api-provider";
|
||||
import { getPlaystateApi } from "@jellyfin/sdk/lib/utils/api";
|
||||
|
||||
interface PlayerContext {
|
||||
showPlayer: boolean;
|
||||
@@ -13,6 +15,8 @@ interface PlayerContext {
|
||||
showMiniplayer: boolean;
|
||||
setShowMiniplayer: React.Dispatch<SetStateAction<boolean>>;
|
||||
queue: JellifyTrack[];
|
||||
play: () => Promise<void>,
|
||||
pause: () => Promise<void>,
|
||||
resetQueue: (hideMiniplayer : boolean | undefined) => Promise<void>;
|
||||
addToQueue: (tracks: JellifyTrack[]) => Promise<void>;
|
||||
setPlayerState: React.Dispatch<SetStateAction<null>>;
|
||||
@@ -21,10 +25,15 @@ interface PlayerContext {
|
||||
const PlayerContextInitializer = () => {
|
||||
|
||||
const queueJson = storage.getString(MMKVStorageKeys.PlayQueue);
|
||||
|
||||
const { apiClient, sessionId } = useApiClientContext();
|
||||
const playStateApi = getPlaystateApi(apiClient!)
|
||||
|
||||
//#region State
|
||||
const [showPlayer, setShowPlayer] = useState<boolean>(false);
|
||||
const [showMiniplayer, setShowMiniplayer] = useState<boolean>(false);
|
||||
const [queue, setQueue] = useState<JellifyTrack[]>(queueJson ? JSON.parse(queueJson) : []);
|
||||
//#endregion State
|
||||
|
||||
//#region RNTP Setup
|
||||
setupPlayer().then(() => console.debug("Player setup successfully"));
|
||||
@@ -32,6 +41,31 @@ const PlayerContextInitializer = () => {
|
||||
const [playerState, setPlayerState] = useState(null);
|
||||
//#endregion RNTP Setup
|
||||
|
||||
//#region Functions
|
||||
const play = async () => {
|
||||
rntpPlay();
|
||||
|
||||
const activeTrack = await getActiveTrack() as JellifyTrack;
|
||||
playStateApi.reportPlaybackStart({
|
||||
playbackStartInfo: {
|
||||
SessionId: sessionId,
|
||||
ItemId: activeTrack.ItemId
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
const pause = async () => {
|
||||
rntpPause();
|
||||
|
||||
const activeTrack = await getActiveTrack() as JellifyTrack;
|
||||
playStateApi.reportPlaybackStopped({
|
||||
playbackStopInfo: {
|
||||
SessionId: sessionId,
|
||||
ItemId: activeTrack.ItemId
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
const resetQueue = async (hideMiniplayer: boolean | undefined) => {
|
||||
console.debug("Clearing queue")
|
||||
await reset();
|
||||
@@ -50,6 +84,7 @@ const PlayerContextInitializer = () => {
|
||||
|
||||
setShowMiniplayer(true);
|
||||
}
|
||||
//#endregion Functions
|
||||
|
||||
return {
|
||||
showPlayer,
|
||||
@@ -57,6 +92,8 @@ const PlayerContextInitializer = () => {
|
||||
showMiniplayer,
|
||||
setShowMiniplayer,
|
||||
queue,
|
||||
play,
|
||||
pause,
|
||||
addToQueue,
|
||||
resetQueue,
|
||||
setPlayerState,
|
||||
@@ -69,6 +106,8 @@ export const PlayerContext = createContext<PlayerContext>({
|
||||
showMiniplayer: false,
|
||||
setShowMiniplayer: () => {},
|
||||
queue: [],
|
||||
play: async () => {},
|
||||
pause: async () => {},
|
||||
resetQueue: async () => {},
|
||||
addToQueue: async ([]) => {},
|
||||
setPlayerState: () => {},
|
||||
@@ -81,6 +120,8 @@ export const PlayerProvider: ({ children }: { children: ReactNode }) => React.JS
|
||||
showMiniplayer,
|
||||
setShowMiniplayer,
|
||||
queue,
|
||||
play,
|
||||
pause,
|
||||
resetQueue,
|
||||
addToQueue,
|
||||
setPlayerState,
|
||||
@@ -92,6 +133,8 @@ export const PlayerProvider: ({ children }: { children: ReactNode }) => React.JS
|
||||
showMiniplayer,
|
||||
setShowMiniplayer,
|
||||
queue,
|
||||
play,
|
||||
pause,
|
||||
resetQueue,
|
||||
addToQueue,
|
||||
setPlayerState,
|
||||
|
||||
Reference in New Issue
Block a user