diff --git a/app.json b/app.json index 2dfe334a..0f1c9ac2 100644 --- a/app.json +++ b/app.json @@ -41,7 +41,8 @@ "package": "com.fredrikburmester.streamyfin", "permissions": [ "android.permission.FOREGROUND_SERVICE", - "android.permission.FOREGROUND_SERVICE_MEDIA_PLAYBACK" + "android.permission.FOREGROUND_SERVICE_MEDIA_PLAYBACK", + "android.permission.WRITE_SETTINGS" ] }, "plugins": [ diff --git a/app/(auth)/player/direct-player.tsx b/app/(auth)/player/direct-player.tsx index 0ab6343e..030fa67c 100644 --- a/app/(auth)/player/direct-player.tsx +++ b/app/(auth)/player/direct-player.tsx @@ -455,21 +455,6 @@ export default function page() { writeToLog("ERROR", "Video Error", e.nativeEvent); }} /> - - - - {videoRef.current && ( { selectedTextTrack={selectedTextTrack} selectedAudioTrack={selectedAudioTrack} /> - - - ) : ( No video source... diff --git a/bun.lockb b/bun.lockb index db7d734e..38309af1 100755 Binary files a/bun.lockb and b/bun.lockb differ diff --git a/components/video-player/controls/Controls.tsx b/components/video-player/controls/Controls.tsx index e61579de..b8af9f90 100644 --- a/components/video-player/controls/Controls.tsx +++ b/components/video-player/controls/Controls.tsx @@ -32,6 +32,7 @@ import { Pressable, TouchableOpacity, View, + StyleSheet, } from "react-native"; import { Slider } from "react-native-awesome-slider"; import { @@ -50,6 +51,7 @@ import { VideoProvider } from "./contexts/VideoContext"; import * as Haptics from "expo-haptics"; import DropdownViewDirect from "./dropdown/DropdownViewDirect"; import DropdownViewTranscoding from "./dropdown/DropdownViewTranscoding"; +import * as Brightness from "expo-brightness"; interface Props { item: BaseItemDto; @@ -134,6 +136,22 @@ export const Controls: React.FC = ({ isVlc ); + const [brightness, setBrightness] = useState(useSharedValue(0.5)); + + useEffect(() => { + const getBrightness = async () => { + const currentBrightness = await Brightness.getBrightnessAsync(); + setBrightness(useSharedValue(currentBrightness)); + }; + + getBrightness(); + }, []); + + const handleBrightnessChange = async (value) => { + setBrightness(value); + await Brightness.setBrightnessAsync(value); + }; + const { showSkipCreditButton, skipCredit } = useCreditSkipper( offline ? undefined : item.Id, currentTime, @@ -352,7 +370,7 @@ export const Controls: React.FC = ({ style={[ { position: "absolute", - bottom: 97, + bottom: 110, }, ]} className={`z-10 p-4 @@ -370,7 +388,7 @@ export const Controls: React.FC = ({ = ({ pointerEvents={showControls ? "auto" : "none"} className={`flex flex-row items-center space-x-2 z-10 p-4 `} > + {previousItem && ( + + + + )} + + {nextItem && ( + + + + )} + {Platform.OS !== "ios" && ( = ({ + + + + + + {settings?.rewindSkipTime} + + + + + {!isBuffering ? ( + { + togglePlay(progress.value); + }} + > + + + ) : ( + + )} + + + + + + {settings?.forwardSkipTime} + + + + + = ({ )} - - - - - - - - { - togglePlay(progress.value); - }} - > - - - - - - - - - = ({ minimumTrackTintColor: "#fff", cacheTrackTintColor: "rgba(255,255,255,0.3)", bubbleBackgroundColor: "#fff", - bubbleTextColor: "#000", + bubbleTextColor: "#666", heartbeatColor: "#999", }} + renderThumb={() => ( + + )} cache={cacheProgress} onSlidingStart={handleSliderStart} onSlidingComplete={handleSliderComplete} @@ -524,47 +616,53 @@ export const Controls: React.FC = ({ return null; } const { x, y, url } = trickPlayUrl; - const tileWidth = 150; const tileHeight = 150 / trickplayInfo.aspectRatio!; return ( - + className=" bg-neutral-800 overflow-hidden" + > + + {`${time.hours > 0 ? `${time.hours}:` : ""}${ diff --git a/package.json b/package.json index 0f8bae05..7ab52d37 100644 --- a/package.json +++ b/package.json @@ -40,6 +40,7 @@ "expo-asset": "~10.0.10", "expo-background-fetch": "~12.0.1", "expo-blur": "~13.0.2", + "expo-brightness": "~12.0.1", "expo-build-properties": "~0.12.5", "expo-constants": "~16.0.2", "expo-dev-client": "~4.0.29",