mirror of
https://github.com/Qortal/q-tube.git
synced 2025-02-12 02:05:52 +00:00
Merge pull request #38 from QortalSeth/main
Videoplayer volume now persists across videos and app reloads. Default value is 50%.
This commit is contained in:
commit
0ede1b5590
@ -37,6 +37,7 @@ import CSS from "csstype";
|
|||||||
import {
|
import {
|
||||||
setReduxPlaybackRate,
|
setReduxPlaybackRate,
|
||||||
setStretchVideoSetting,
|
setStretchVideoSetting,
|
||||||
|
setVolumeSetting,
|
||||||
StretchVideoType,
|
StretchVideoType,
|
||||||
} from "../../../state/features/persistSlice.ts";
|
} from "../../../state/features/persistSlice.ts";
|
||||||
|
|
||||||
@ -87,12 +88,13 @@ export const VideoPlayer = React.forwardRef<refType, VideoPlayerProps>(
|
|||||||
) => {
|
) => {
|
||||||
const videoSelector = useSelector((state: RootState) => state.video);
|
const videoSelector = useSelector((state: RootState) => state.video);
|
||||||
const persistSelector = useSelector((state: RootState) => state.persist);
|
const persistSelector = useSelector((state: RootState) => state.persist);
|
||||||
|
|
||||||
const dispatch = useDispatch();
|
const dispatch = useDispatch();
|
||||||
const videoRef = useRef<HTMLVideoElement>(null);
|
const videoRef = useRef<HTMLVideoElement>(null);
|
||||||
const containerRef = useRef<HTMLDivElement>(null);
|
const containerRef = useRef<HTMLDivElement>(null);
|
||||||
const [playing, setPlaying] = useState(false);
|
const [playing, setPlaying] = useState(false);
|
||||||
const [volume, setVolume] = useState(1);
|
const [volume, setVolume] = useState(persistSelector.volume);
|
||||||
const [mutedVolume, setMutedVolume] = useState(1);
|
const [mutedVolume, setMutedVolume] = useState(persistSelector.volume);
|
||||||
const [isMuted, setIsMuted] = useState(false);
|
const [isMuted, setIsMuted] = useState(false);
|
||||||
const [progress, setProgress] = useState(0);
|
const [progress, setProgress] = useState(0);
|
||||||
const [isLoading, setIsLoading] = useState(false);
|
const [isLoading, setIsLoading] = useState(false);
|
||||||
@ -240,9 +242,11 @@ export const VideoPlayer = React.forwardRef<refType, VideoPlayerProps>(
|
|||||||
|
|
||||||
const onVolumeChange = (_: any, value: number | number[]) => {
|
const onVolumeChange = (_: any, value: number | number[]) => {
|
||||||
if (!videoRef.current) return;
|
if (!videoRef.current) return;
|
||||||
videoRef.current.volume = value as number;
|
const newVolume = value as number;
|
||||||
setVolume(value as number);
|
videoRef.current.volume = newVolume;
|
||||||
|
setVolume(newVolume);
|
||||||
setIsMuted(false);
|
setIsMuted(false);
|
||||||
|
dispatch(setVolumeSetting(newVolume));
|
||||||
};
|
};
|
||||||
|
|
||||||
const onProgressChange = async (_: any, value: number | number[]) => {
|
const onProgressChange = async (_: any, value: number | number[]) => {
|
||||||
@ -309,6 +313,7 @@ export const VideoPlayer = React.forwardRef<refType, VideoPlayerProps>(
|
|||||||
}, []);
|
}, []);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
|
videoRef.current.volume = volume;
|
||||||
if (
|
if (
|
||||||
videoPlaying &&
|
videoPlaying &&
|
||||||
videoPlaying.id === identifier &&
|
videoPlaying.id === identifier &&
|
||||||
@ -316,7 +321,7 @@ export const VideoPlayer = React.forwardRef<refType, VideoPlayerProps>(
|
|||||||
videoRef?.current
|
videoRef?.current
|
||||||
) {
|
) {
|
||||||
handleCanPlay();
|
handleCanPlay();
|
||||||
videoRef.current.volume = videoPlaying.volume;
|
|
||||||
videoRef.current.currentTime = videoPlaying.currentTime;
|
videoRef.current.currentTime = videoPlaying.currentTime;
|
||||||
videoRef.current.play().then(() => {
|
videoRef.current.play().then(() => {
|
||||||
setPlaying(true);
|
setPlaying(true);
|
||||||
@ -571,6 +576,7 @@ export const VideoPlayer = React.forwardRef<refType, VideoPlayerProps>(
|
|||||||
setMutedVolume(newVolume);
|
setMutedVolume(newVolume);
|
||||||
videoRef.current.volume = newVolume;
|
videoRef.current.volume = newVolume;
|
||||||
setVolume(newVolume);
|
setVolume(newVolume);
|
||||||
|
dispatch(setVolumeSetting(newVolume));
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
const setProgressRelative = (secondsChange: number) => {
|
const setProgressRelative = (secondsChange: number) => {
|
||||||
|
@ -7,7 +7,8 @@ import {
|
|||||||
upsertVideos,
|
upsertVideos,
|
||||||
upsertVideosBeginning,
|
upsertVideosBeginning,
|
||||||
Video,
|
Video,
|
||||||
upsertFilteredVideos, removeFromHashMap,
|
upsertFilteredVideos,
|
||||||
|
removeFromHashMap,
|
||||||
} from "../state/features/videoSlice";
|
} from "../state/features/videoSlice";
|
||||||
import {
|
import {
|
||||||
setIsLoadingGlobal,
|
setIsLoadingGlobal,
|
||||||
@ -85,7 +86,9 @@ export const useFetchVideos = () => {
|
|||||||
url,
|
url,
|
||||||
})
|
})
|
||||||
);
|
);
|
||||||
} catch (error) {console.log(error)}
|
} catch (error) {
|
||||||
|
console.log(error);
|
||||||
|
}
|
||||||
}, []);
|
}, []);
|
||||||
|
|
||||||
const getVideo = async (
|
const getVideo = async (
|
||||||
@ -186,7 +189,8 @@ export const useFetchVideos = () => {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch (error) {console.log(error)
|
} catch (error) {
|
||||||
|
console.log(error);
|
||||||
} finally {
|
} finally {
|
||||||
dispatch(setIsLoadingGlobal(false));
|
dispatch(setIsLoadingGlobal(false));
|
||||||
}
|
}
|
||||||
@ -372,7 +376,8 @@ export const useFetchVideos = () => {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch (error) {console.log(error)
|
} catch (error) {
|
||||||
|
console.log(error);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
[filteredVideos, hashMapVideos]
|
[filteredVideos, hashMapVideos]
|
||||||
@ -412,7 +417,9 @@ export const useFetchVideos = () => {
|
|||||||
const newArray = responseData.slice(0, findVideo);
|
const newArray = responseData.slice(0, findVideo);
|
||||||
dispatch(setCountNewVideos(newArray.length));
|
dispatch(setCountNewVideos(newArray.length));
|
||||||
return;
|
return;
|
||||||
} catch (error) {console.log(error)}
|
} catch (error) {
|
||||||
|
console.log(error);
|
||||||
|
}
|
||||||
}, [videos]);
|
}, [videos]);
|
||||||
|
|
||||||
const getVideosCount = React.useCallback(async () => {
|
const getVideosCount = React.useCallback(async () => {
|
||||||
|
@ -18,6 +18,7 @@ interface settingsState {
|
|||||||
playbackRate: number;
|
playbackRate: number;
|
||||||
subscriptionListFilter: SubscriptionListFilterType;
|
subscriptionListFilter: SubscriptionListFilterType;
|
||||||
showStats: boolean;
|
showStats: boolean;
|
||||||
|
volume: number;
|
||||||
}
|
}
|
||||||
|
|
||||||
const initialState: settingsState = {
|
const initialState: settingsState = {
|
||||||
@ -28,6 +29,7 @@ const initialState: settingsState = {
|
|||||||
playbackRate: 1,
|
playbackRate: 1,
|
||||||
subscriptionListFilter: "currentNameOnly",
|
subscriptionListFilter: "currentNameOnly",
|
||||||
showStats: true,
|
showStats: true,
|
||||||
|
volume: 0.5,
|
||||||
};
|
};
|
||||||
|
|
||||||
export const persistSlice = createSlice({
|
export const persistSlice = createSlice({
|
||||||
@ -72,6 +74,9 @@ export const persistSlice = createSlice({
|
|||||||
changeFilterType: (state, action) => {
|
changeFilterType: (state, action) => {
|
||||||
state.filterType = action.payload;
|
state.filterType = action.payload;
|
||||||
},
|
},
|
||||||
|
setVolumeSetting: (state, action: PayloadAction<number>) => {
|
||||||
|
state.volume = action.payload;
|
||||||
|
},
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -83,6 +88,7 @@ export const {
|
|||||||
setReduxPlaybackRate,
|
setReduxPlaybackRate,
|
||||||
changeFilterType,
|
changeFilterType,
|
||||||
resetSubscriptions,
|
resetSubscriptions,
|
||||||
|
setVolumeSetting,
|
||||||
} = persistSlice.actions;
|
} = persistSlice.actions;
|
||||||
|
|
||||||
export default persistSlice.reducer;
|
export default persistSlice.reducer;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user