diff --git a/app/(auth)/vlc-player.tsx b/app/(auth)/vlc-player.tsx index 836e78a2..46cce362 100644 --- a/app/(auth)/vlc-player.tsx +++ b/app/(auth)/vlc-player.tsx @@ -17,7 +17,7 @@ import { getBackdropUrl } from "@/utils/jellyfin/image/getBackdropUrl"; import { getStreamUrl } from "@/utils/jellyfin/media/getStreamUrl"; import { writeToLog } from "@/utils/log"; import native from "@/utils/profiles/native"; -import { msToTicks } from "@/utils/time"; +import { msToTicks, ticksToMs } from "@/utils/time"; import { Api } from "@jellyfin/sdk"; import { BaseItemDto } from "@jellyfin/sdk/lib/generated-client"; import { @@ -28,7 +28,13 @@ import { useQuery } from "@tanstack/react-query"; import * as Haptics from "expo-haptics"; import { useLocalSearchParams } from "expo-router"; import { useAtomValue } from "jotai"; -import React, { useCallback, useMemo, useRef, useState } from "react"; +import React, { + useCallback, + useEffect, + useMemo, + useRef, + useState, +} from "react"; import { Alert, Pressable, @@ -146,7 +152,8 @@ export default function page() { Haptics.impactAsync(Haptics.ImpactFeedbackStyle.Light); if (isPlaying) { - videoRef.current?.pause(); + await videoRef.current?.pause(); + await getPlaystateApi(api).onPlaybackProgress({ itemId: item?.Id!, audioStreamIndex: audioIndex ? audioIndex : undefined, @@ -159,6 +166,7 @@ export default function page() { : "DirectStream", playSessionId: stream.sessionId, }); + console.log("ACtually marked as paused"); } else { videoRef.current?.play(); await getPlaystateApi(api).onPlaybackProgress({ @@ -230,7 +238,7 @@ export default function page() { if (isPlaybackStopped === true) return; if (!item?.Id || !api || !stream) return; - const { currentTime, isPlaying } = data.nativeEvent; + const { currentTime } = data.nativeEvent; progress.value = currentTime; const currentTimeInTicks = msToTicks(currentTime); @@ -251,6 +259,7 @@ export default function page() { playMethod: stream?.url.includes("m3u8") ? "Transcode" : "DirectStream", playSessionId: stream.sessionId, }); + console.log("Progress", currentTime); }, [item?.Id, isPlaying, api, isPlaybackStopped] ); @@ -313,6 +322,10 @@ export default function page() { if (!stream || !item) return null; + const startPosition = item?.UserData?.PlaybackPositionTicks + ? ticksToMs(item.UserData.PlaybackPositionTicks) + : 0; + return ( )} diff --git a/components/video-player/Controls.tsx b/components/video-player/Controls.tsx index d3fd44e7..ed4fd788 100644 --- a/components/video-player/Controls.tsx +++ b/components/video-player/Controls.tsx @@ -226,7 +226,9 @@ export const Controls: React.FC = ({ isSeeking.value = false; progress.value = value; - await seek(Math.max(0, Math.floor(isVlc ? value : value / 10000000))); + await seek( + Math.max(0, Math.floor(isVlc ? value : ticksToSeconds(value))) + ); if (wasPlayingRef.current === true) play(); }, [isVlc] diff --git a/modules/vlc-player/ios/VlcPlayerView.swift b/modules/vlc-player/ios/VlcPlayerView.swift index 464b19cf..cc2231bb 100644 --- a/modules/vlc-player/ios/VlcPlayerView.swift +++ b/modules/vlc-player/ios/VlcPlayerView.swift @@ -165,13 +165,13 @@ class VlcPlayerView: ExpoView { self.mediaPlayer?.media = media - if startPosition > 0 { - self.mediaPlayer?.time = VLCTime(int: startPosition) - } - if autoplay { print("Playing...") self.play() + if startPosition > 0 { + print("Debug: Starting at position: \(startPosition)") + self.seekTo(startPosition) + } } } }