diff --git a/README.md b/README.md index f1a737c1..8bddf816 100644 --- a/README.md +++ b/README.md @@ -12,8 +12,8 @@ Welcome to Streamyfin, a simple and user-friendly Jellyfin client built with Exp ## 🌟 Features - -- 📱 **Native video player**: Playback with the platform native video player. With support for subtitles, playback speed control, and more. +- 🚀 **Skp intro / credits support** +- 🖼️ **Trickplay images**: The new golden standard for chapter previews when seeking. - 📺 **Picture in Picture** (iPhone only): Watch movies in PiP mode on your iPhone. - 🔊 **Background audio**: Stream music in the background, even when locking the phone. - 📥 **Download media** (Experimental): Save your media locally and watch it offline. diff --git a/app.json b/app.json index b1f99dc8..36c126c2 100644 --- a/app.json +++ b/app.json @@ -2,7 +2,7 @@ "expo": { "name": "Streamyfin", "slug": "streamyfin", - "version": "0.14.0", + "version": "0.15.0", "orientation": "default", "icon": "./assets/images/icon.png", "scheme": "streamyfin", @@ -33,7 +33,7 @@ }, "android": { "jsEngine": "hermes", - "versionCode": 40, + "versionCode": 41, "adaptiveIcon": { "foregroundImage": "./assets/images/icon.png" }, diff --git a/app/(auth)/(tabs)/(home)/_layout.tsx b/app/(auth)/(tabs)/(home)/_layout.tsx index a53cfcd3..763b89c9 100644 --- a/app/(auth)/(tabs)/(home)/_layout.tsx +++ b/app/(auth)/(tabs)/(home)/_layout.tsx @@ -25,10 +25,9 @@ export default function IndexLayout() { onPress={() => { router.push("/(auth)/settings"); }} + className="p-2 " > - - - + ), diff --git a/app/(auth)/(tabs)/(home)/index.tsx b/app/(auth)/(tabs)/(home)/index.tsx index 592fd541..c60a99a1 100644 --- a/app/(auth)/(tabs)/(home)/index.tsx +++ b/app/(auth)/(tabs)/(home)/index.tsx @@ -211,43 +211,34 @@ export default function index() { if (!api || !user?.Id) return []; const ss: Section[] = [ - { - title: "Continue Watching", - queryKey: ["resumeItems", user.Id], - queryFn: async () => - ( - await getItemsApi(api).getResumeItems({ - userId: user.Id, - enableImageTypes: ["Primary", "Backdrop", "Thumb"], - }) - ).data.Items || [], - type: "ScrollingCollectionList", - orientation: "horizontal", - }, - { - title: "Next Up", - queryKey: ["nextUp-all", user?.Id], - queryFn: async () => - ( - await getTvShowsApi(api).getNextUp({ - userId: user?.Id, - fields: ["MediaSourceCount"], - limit: 20, - enableImageTypes: ["Primary", "Backdrop", "Thumb"], - }) - ).data.Items || [], - type: "ScrollingCollectionList", - orientation: "horizontal", - }, - ...(mediaListCollections?.map( - (ml) => - ({ - title: ml.Name || "", - queryKey: ["mediaList", ml.Id], - queryFn: async () => ml, - type: "MediaListSection", - } as MediaListSection) - ) || []), + // { + // title: "Continue Watching", + // queryKey: ["resumeItems", user.Id], + // queryFn: async () => + // ( + // await getItemsApi(api).getResumeItems({ + // userId: user.Id, + // enableImageTypes: ["Primary", "Backdrop", "Thumb"], + // }) + // ).data.Items || [], + // type: "ScrollingCollectionList", + // orientation: "horizontal", + // }, + // { + // title: "Next Up", + // queryKey: ["nextUp-all", user?.Id], + // queryFn: async () => + // ( + // await getTvShowsApi(api).getNextUp({ + // userId: user?.Id, + // fields: ["MediaSourceCount"], + // limit: 20, + // enableImageTypes: ["Primary", "Backdrop", "Thumb"], + // }) + // ).data.Items || [], + // type: "ScrollingCollectionList", + // orientation: "horizontal", + // }, { title: "Recently Added in Movies", queryKey: ["recentlyAddedInMovies", user?.Id, movieCollectionId], @@ -282,6 +273,15 @@ export default function index() { ).data || [], type: "ScrollingCollectionList", }, + ...(mediaListCollections?.map( + (ml) => + ({ + title: ml.Name || "", + queryKey: ["mediaList", ml.Id], + queryFn: async () => ml, + type: "MediaListSection", + } as MediaListSection) + ) || []), { title: "Suggested Movies", queryKey: ["suggestedMovies", user?.Id], @@ -371,7 +371,7 @@ export default function index() { const insets = useSafeAreaInsets(); - if (e1 || e2) + if (e1 || e2 || !api) return ( Oops! @@ -395,39 +395,69 @@ export default function index() { refreshControl={ } + key={"home"} + contentContainerStyle={{ + paddingLeft: insets.left, + paddingRight: insets.right, + }} + className="flex flex-col space-y-4 mb-20" > - - + - {sections.map((section, index) => { - if (section.type === "ScrollingCollectionList") { - return ( - - ); - } else if (section.type === "MediaListSection") { - return ( - - ); - } - return null; - })} - + + ( + await getTvShowsApi(api).getNextUp({ + userId: user?.Id, + fields: ["MediaSourceCount"], + limit: 20, + enableImageTypes: ["Primary", "Backdrop", "Thumb"], + }) + ).data.Items|| [] + } + orientation={"horizontal"} + /> + + + ( + await getItemsApi(api).getResumeItems({ + userId: user?.Id, + enableImageTypes: ["Primary", "Backdrop", "Thumb"], + }) + ).data.Items || [] + } + orientation={"horizontal"} + /> + + {sections.map((section, index) => { + if (section.type === "ScrollingCollectionList") { + return ( + + ); + } else if (section.type === "MediaListSection") { + return ( + + ); + } + return null; + })} ); } diff --git a/app/(auth)/(tabs)/(home)/settings.tsx b/app/(auth)/(tabs)/(home)/settings.tsx index 79accca1..cf3d44ec 100644 --- a/app/(auth)/(tabs)/(home)/settings.tsx +++ b/app/(auth)/(tabs)/(home)/settings.tsx @@ -91,9 +91,7 @@ export default function settings() { Tests