mirror of
https://github.com/streamyfin/streamyfin.git
synced 2026-05-21 14:26:35 +01:00
58 lines
1.5 KiB
TypeScript
58 lines
1.5 KiB
TypeScript
import type { Api } from "@jellyfin/sdk";
|
|
import type { BaseItemDto } from "@jellyfin/sdk/lib/generated-client/models";
|
|
import { Platform } from "react-native";
|
|
import { clearTopShelfCache, writeTopShelfCache } from "@/modules";
|
|
import {
|
|
buildTVDiscoveryPayload,
|
|
type TVDiscoveryPayload,
|
|
} from "@/utils/tvDiscovery/payload";
|
|
|
|
export function updateTopShelfCache({
|
|
api,
|
|
sections,
|
|
}: {
|
|
api: Api | null | undefined;
|
|
sections: Array<{ title: string; items: BaseItemDto[] | undefined }>;
|
|
}): void {
|
|
if (Platform.OS !== "ios" || !Platform.isTV) return;
|
|
|
|
const payload = buildTVDiscoveryPayload({ api, sections });
|
|
if (!payload) {
|
|
clearTopShelfCacheSafely();
|
|
return;
|
|
}
|
|
|
|
writeTopShelfPayload(payload, api?.accessToken || undefined);
|
|
}
|
|
|
|
export function writeTopShelfPayload(
|
|
payload: TVDiscoveryPayload,
|
|
apiKey?: string,
|
|
): void {
|
|
if (Platform.OS !== "ios" || !Platform.isTV) return;
|
|
|
|
try {
|
|
const didWrite = writeTopShelfCache(JSON.stringify(payload), apiKey);
|
|
|
|
if (!didWrite) {
|
|
console.warn("[TopShelf] Native cache writer is unavailable");
|
|
}
|
|
} catch (error) {
|
|
console.warn("[TopShelf] Failed to write cache", error);
|
|
}
|
|
}
|
|
|
|
export function clearTopShelfCacheSafely(): void {
|
|
if (Platform.OS !== "ios" || !Platform.isTV) return;
|
|
|
|
try {
|
|
const didClear = clearTopShelfCache();
|
|
|
|
if (!didClear) {
|
|
console.warn("[TopShelf] Native cache clearer is unavailable");
|
|
}
|
|
} catch (error) {
|
|
console.warn("[TopShelf] Failed to clear cache", error);
|
|
}
|
|
}
|