Merged changes from main

This commit is contained in:
Alex Kim
2024-12-13 16:39:58 +11:00
7 changed files with 46 additions and 42 deletions

1
.gitignore vendored
View File

@@ -35,3 +35,4 @@ credentials.json
*.ipa
.continuerc.json
.vscode/

View File

@@ -11,7 +11,5 @@
},
"[swift]": {
"editor.defaultFormatter": "sswg.swift-lang"
},
"java.configuration.updateBuildConfiguration": "interactive",
"java.compile.nullAnalysis.mode": "automatic"
}
}

View File

@@ -30,7 +30,7 @@ import React, {
useRef,
useState,
} from "react";
import { BackHandler, View } from "react-native";
import { View } from "react-native";
import { useSharedValue } from "react-native-reanimated";
import Video, {
OnProgressData,
@@ -38,7 +38,6 @@ import Video, {
SelectedTrackType,
VideoRef,
} from "react-native-video";
import index from "../(tabs)/(home)";
import { SubtitleHelper } from "@/utils/SubtitleHelper";
const Player = () => {
@@ -55,6 +54,7 @@ const Player = () => {
const [ignoreSafeAreas, setIgnoreSafeAreas] = useState(false);
const [isPlaying, setIsPlaying] = useState(false);
const [isBuffering, setIsBuffering] = useState(true);
const [isVideoLoaded, setIsVideoLoaded] = useState(false);
const setShowControls = useCallback((show: boolean) => {
_setShowControls(show);

View File

@@ -1,6 +1,12 @@
import { Settings, useSettings } from "@/utils/atoms/settings";
import { useAtomValue } from "jotai";
import React, { createContext, useContext, ReactNode, useEffect } from "react";
import React, {
createContext,
useContext,
ReactNode,
useEffect,
useState,
} from "react";
import { apiAtom } from "@/providers/JellyfinProvider";
import { getLocalizationApi, getUserApi } from "@jellyfin/sdk/lib/utils/api";
import {
@@ -87,16 +93,14 @@ export const MediaProvider = ({ children }: { children: ReactNode }) => {
queryKey: ["authUser"],
queryFn: async () => {
if (!api) return;
const userApi = await getUserApi(api).getCurrentUser();
return userApi.data;
},
enabled: !!api,
staleTime: 0,
refetchOnMount: true,
});
const { data: cultures = [] } = useQuery({
const { data: cultures = [], isFetched: isCulturesFetched } = useQuery({
queryKey: ["cultures"],
queryFn: async () => {
if (!api) return [];
@@ -105,13 +109,12 @@ export const MediaProvider = ({ children }: { children: ReactNode }) => {
return cultures;
},
enabled: !!api,
staleTime: 0,
refetchOnMount: true,
staleTime: 43200000, // 12 hours
});
// Set default settings from user configuration.s
useEffect(() => {
if (user && cultures) {
if (!user || cultures.length === 0) return;
const userSubtitlePreference =
user?.Configuration?.SubtitleLanguagePreference;
const userAudioPreference = user?.Configuration?.AudioLanguagePreference;
@@ -132,8 +135,7 @@ export const MediaProvider = ({ children }: { children: ReactNode }) => {
rememberSubtitleSelections:
user?.Configuration?.RememberSubtitleSelections,
});
}
}, [user, cultures]);
}, [user, isCulturesFetched]);
if (!api) return null;

View File

@@ -318,7 +318,7 @@ export const Controls: React.FC<Props> = ({
const minutes = Math.floor((progressInSeconds % 3600) / 60);
const seconds = progressInSeconds % 60;
setTime({ hours, minutes, seconds });
}, 10),
}, 3),
[]
);

View File

@@ -35,14 +35,18 @@ const DropdownView: React.FC<DropdownViewProps> = ({ showControls }) => {
}>();
// Either its on a text subtitle or its on not on any subtitle therefore it should show all the embedded HLS subtitles.
const isOnTextSubtitle =
const isOnTextSubtitle = useMemo(() => {
const res = Boolean(
mediaSource?.MediaStreams?.find(
(x) => x.Index === parseInt(subtitleIndex) && x.IsTextSubtitleStream
) || subtitleIndex === "-1";
) || subtitleIndex === "-1"
);
return res;
}, []);
const allSubs =
mediaSource?.MediaStreams?.filter((x) => x.Type === "Subtitle") ?? [];
const textBasedSubs = allSubs.filter((x) => x.IsTextSubtitleStream);
const subtitleHelper = new SubtitleHelper(mediaSource?.MediaStreams ?? []);
@@ -75,7 +79,7 @@ const DropdownView: React.FC<DropdownViewProps> = ({ showControls }) => {
return [disableSubtitle, ...transcodedSubtitle];
}, [item, isVideoLoaded, subtitleTracks, mediaSource?.MediaStreams]);
const ChangeTranscodingSubtitle = useCallback(
const changeToImageBasedSub = useCallback(
(subtitleIndex: number) => {
const queryParams = new URLSearchParams({
itemId: item.Id ?? "", // Ensure itemId is a string
@@ -184,8 +188,7 @@ const DropdownView: React.FC<DropdownViewProps> = ({ showControls }) => {
setSubtitleTrack && setSubtitleTrack(sub.index);
return;
}
console.log("ChangeTranscodingSubtitle", subtitleIndex);
ChangeTranscodingSubtitle(sub.index);
changeToImageBasedSub(sub.index);
}}
>
<DropdownMenu.ItemTitle key={`subtitle-item-title-${idx}`}>

View File

@@ -127,7 +127,7 @@ export class SubtitleHelper {
// This function aims to get the source subtitle index from the embedded track index.
getSourceSubtitleIndex = (embeddedTrackIndex: number): number => {
if (Platform.OS === "android") {
return this.getSubtitles()[embeddedTrackIndex]?.Index ?? -1;
return this.getTextSubtitles()[embeddedTrackIndex]?.Index ?? -1;
}
return this.getUniqueTextBasedSubtitles()[embeddedTrackIndex]?.Index ?? -1;
};