mirror of
https://github.com/streamyfin/streamyfin.git
synced 2025-08-20 18:37:18 +02:00
40 lines
1.3 KiB
TypeScript
40 lines
1.3 KiB
TypeScript
import { useQuery } from "@tanstack/react-query";
|
|
import { apiAtom } from "@/providers/JellyfinProvider";
|
|
import { useAtom } from "jotai";
|
|
import { getSessionApi } from "@jellyfin/sdk/lib/utils/api/session-api";
|
|
import { userAtom } from "@/providers/JellyfinProvider";
|
|
import { Platform } from "react-native";
|
|
const Notifications = !Platform.isTV ? require("expo-notifications") : null;
|
|
|
|
export interface useSessionsProps {
|
|
refetchInterval: number;
|
|
activeWithinSeconds: number;
|
|
}
|
|
|
|
export const useSessions = ({ refetchInterval = 5 * 1000, activeWithinSeconds = 360 }: useSessionsProps) => {
|
|
const [api] = useAtom(apiAtom);
|
|
const [user] = useAtom(userAtom);
|
|
|
|
const { data, isLoading } = useQuery({
|
|
queryKey: ["sessions"],
|
|
queryFn: async () => {
|
|
if (!api || !user || !user.Policy?.IsAdministrator) {
|
|
return [];
|
|
}
|
|
const response = await getSessionApi(api).getSessions({
|
|
activeWithinSeconds: activeWithinSeconds,
|
|
});
|
|
|
|
const result = response.data
|
|
.filter((s) => s.NowPlayingItem)
|
|
.sort((a, b) => (b.NowPlayingItem?.Name ?? "").localeCompare(a.NowPlayingItem?.Name ?? ""));
|
|
|
|
Notifications.setBadgeCountAsync(result.length);
|
|
return result
|
|
},
|
|
refetchInterval: refetchInterval,
|
|
});
|
|
|
|
return { sessions: data, isLoading };
|
|
};
|