Files
App/player/service.ts
Violet Caulfield 028990043b Maybe this is how this works?
Also removing the jump forward from the control center since that's probably not the desired control scheme
2025-01-20 19:41:15 -06:00

90 lines
2.7 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 } 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 progress = await TrackPlayer.getProgress();
const nowPlaying = await getActiveTrack() as JellifyTrack;
await getUserLibraryApi(Client.api!)
.markFavoriteItem({
itemId: nowPlaying.item.Id!
});
await TrackPlayer.updateOptions({
likeOptions: {
isActive: false,
title: "Favorite"
},
dislikeOptions: {
isActive: true,
title: "Unfavorite"
}
});
});
TrackPlayer.addEventListener(Event.RemoteDislike, async () => {
const progress = await TrackPlayer.getProgress();
const nowPlaying = await getActiveTrack() as JellifyTrack;
await getUserLibraryApi(Client.api!)
.markFavoriteItem({
itemId: nowPlaying.item.Id!
});
await TrackPlayer.updateNowPlayingMetadata({
elapsedTime: progress.position,
rating: undefined
});
await TrackPlayer.updateOptions({
likeOptions: {
isActive: true,
title: "Favorite"
},
dislikeOptions: {
isActive: false,
title: "Unfavorite"
}
});
});
}