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",