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