mirror of
https://github.com/jakejarvis/sofa.git
synced 2026-07-14 18:15:56 -04:00
- Add `ContinueWatching` (systemSmall) and `Upcoming` (systemSmall) SwiftUI widgets via `expo-widgets`, registered in `app.json` under the `group.com.jakejarvis.sofa` app group - Add `widget-images` local Expo module with a Swift `WidgetImagesModule` that downloads and resizes remote poster images into the shared app group container for use by widgets; also copies bundled assets (sofa icon fallback) - Add `src/lib/widgets.ts` to fetch dashboard data, cache poster images, and write a JSON timeline to the shared container via `expo-widgets` - Add `ContinueWatching` and `Upcoming` SwiftUI widget views in `src/widgets/` - Add `useWidgetRefresh` hook that refreshes widgets on foreground (throttled to once per minute) and on session ready - Debounce widget refresh in `invalidateTitleQueries` so rapid mutations (e.g. marking multiple episodes watched) batch into a single refresh - Expose `titles.upcoming` from the dashboard procedure and add `upcomingTitles` field to the dashboard schema - Bump iOS deployment target to 16.2 (required by WidgetKit timeline APIs)
22 lines
718 B
TypeScript
22 lines
718 B
TypeScript
import { Platform } from "react-native";
|
|
|
|
function getModule() {
|
|
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
return require("./src/WidgetImagesModule").default;
|
|
}
|
|
|
|
export async function downloadWidgetImage(url: string, key: string): Promise<string | null> {
|
|
if (Platform.OS !== "ios") return null;
|
|
return getModule().downloadWidgetImage(url, key);
|
|
}
|
|
|
|
export async function copyBundledAsset(assetName: string, key: string): Promise<string | null> {
|
|
if (Platform.OS !== "ios") return null;
|
|
return getModule().copyBundledAsset(assetName, key);
|
|
}
|
|
|
|
export async function clearWidgetImages(): Promise<void> {
|
|
if (Platform.OS !== "ios") return;
|
|
return getModule().clearWidgetImages();
|
|
}
|