Files
App/player/service.ts
Violet Caulfield b3838a3c75 adjust favorites
2025-01-21 09:49:43 -06:00

71 lines
2.3 KiB
TypeScript

import Client from "../api/client";
import { JellifyTrack } from "../types/JellifyTrack";
import { getUserLibraryApi } from "@jellyfin/sdk/lib/utils/api";
import TrackPlayer, { Event, RatingType } from "react-native-track-player";
import { getActiveTrack, getActiveTrackIndex } from "react-native-track-player/lib/src/trackPlayer";
/**
* Jellify Playback Service.
*
* Sets up event listeners for remote control events and
* runs for the duration of the app lifecycle
*/
export async function PlaybackService() {
TrackPlayer.addEventListener(Event.RemotePlay, async () => {
await TrackPlayer.play();
});
TrackPlayer.addEventListener(Event.RemotePause, async () => {
await TrackPlayer.pause();
});
TrackPlayer.addEventListener(Event.RemoteNext, async () => {
await TrackPlayer.skipToNext();
});
TrackPlayer.addEventListener(Event.RemotePrevious, async () => {
await TrackPlayer.skipToPrevious();
});
TrackPlayer.addEventListener(Event.RemoteSeek, async (event) => {
await TrackPlayer.seekTo(event.position);
});
// TrackPlayer.addEventListener(Event.RemoteJumpForward, async (event) => {
// await TrackPlayer.seekBy(event.interval)
// });
// TrackPlayer.addEventListener(Event.RemoteJumpBackward, async (event) => {
// await TrackPlayer.seekBy(-event.interval)
// });
TrackPlayer.addEventListener(Event.RemoteLike, async () => {
const nowPlaying = await getActiveTrack() as JellifyTrack;
const nowPlayingIndex = await getActiveTrackIndex();
await getUserLibraryApi(Client.api!)
.markFavoriteItem({
itemId: nowPlaying.item.Id!
});
await TrackPlayer.updateMetadataForTrack(nowPlayingIndex!, {
rating: RatingType.Heart
})
});
TrackPlayer.addEventListener(Event.RemoteDislike, async () => {
const nowPlaying = await getActiveTrack() as JellifyTrack;
const nowPlayingIndex = await getActiveTrackIndex();
await getUserLibraryApi(Client.api!)
.markFavoriteItem({
itemId: nowPlaying.item.Id!
});
await TrackPlayer.updateMetadataForTrack(nowPlayingIndex!, {
rating: undefined
});
});
}