fix: play flickering bug

This commit is contained in:
Fredrik Burmester
2024-08-25 22:21:42 +02:00
parent c0f4587501
commit 969e68901a
2 changed files with 11 additions and 8 deletions

View File

@@ -17,6 +17,7 @@ import Animated, {
import Video from "react-native-video";
import { Text } from "./common/Text";
import { Loader } from "./Loader";
import { debounce } from "lodash";
export const CurrentlyPlayingBar: React.FC = () => {
const segments = useSegments();
@@ -195,13 +196,7 @@ export const CurrentlyPlayingBar: React.FC = () => {
onFullscreenPlayerDidDismiss={() => {}}
onFullscreenPlayerDidPresent={() => {}}
onPlaybackStateChanged={(e) => {
if (e.isPlaying) {
setIsPlaying(true);
} else if (e.isSeeking) {
return;
} else {
setIsPlaying(false);
}
setIsPlaying(e.isPlaying);
}}
onVolumeChange={(e) => {
setVolume(e.volume);

View File

@@ -24,6 +24,7 @@ import { Alert, Platform } from "react-native";
import { OnProgressData, type VideoRef } from "react-native-video";
import { apiAtom, userAtom } from "./JellyfinProvider";
import { postCapabilities } from "@/utils/jellyfin/session/capabilities";
import { debounce } from "lodash";
type CurrentlyPlayingState = {
url: string;
@@ -65,7 +66,7 @@ export const PlaybackProvider: React.FC<{ children: ReactNode }> = ({
const previousVolume = useRef<number | null>(null);
const [isPlaying, setIsPlaying] = useState<boolean>(false);
const [isPlaying, _setIsPlaying] = useState<boolean>(false);
const [isFullscreen, setIsFullscreen] = useState<boolean>(false);
const [progressTicks, setProgressTicks] = useState<number | null>(0);
const [volume, _setVolume] = useState<number | null>(null);
@@ -167,6 +168,13 @@ export const PlaybackProvider: React.FC<{ children: ReactNode }> = ({
setCurrentlyPlayingState(null);
}, [currentlyPlaying, session, progressTicks]);
const setIsPlaying = useCallback(
debounce((value: boolean) => {
_setIsPlaying(value);
}, 100),
[]
);
const onProgress = useCallback(
({ currentTime }: OnProgressData) => {
const ticks = currentTime * 10000000;