From 5ff6fb3779e5a0abdc4d91d4c3c010c1d42ecbf3 Mon Sep 17 00:00:00 2001 From: WaDadidou Date: Mon, 11 Sep 2023 17:23:55 +0200 Subject: [PATCH] fix: media player bar fix --- packages/components/FilePreview/AudioView.tsx | 10 +++--- .../FilePreview/EditableAudioPreview.tsx | 8 +++-- .../components/mediaPlayer/MediaNameImage.tsx | 18 +++++++--- .../components/mediaPlayer/MediaPlayerBar.tsx | 17 ++++++++-- .../mediaPlayer/MediaPlayerBarMobile.tsx | 5 +-- .../mediaPlayer/TimerSliderMobile.tsx | 34 +++++++++---------- packages/context/MediaPlayerProvider.tsx | 3 -- 7 files changed, 59 insertions(+), 36 deletions(-) diff --git a/packages/components/FilePreview/AudioView.tsx b/packages/components/FilePreview/AudioView.tsx index 8a3d395ba5..ae231e3482 100644 --- a/packages/components/FilePreview/AudioView.tsx +++ b/packages/components/FilePreview/AudioView.tsx @@ -34,7 +34,7 @@ export const AudioView: React.FC<{ media, isPlaying, handlePlayPause, - loadAndPlaySound, + loadAndPlayQueue, playbackStatus, } = useMediaPlayer(); const isInMediaPlayer = useMemo( @@ -51,15 +51,17 @@ export const AudioView: React.FC<{ await handlePlayPause(); } else { const songToPlay: Media = { - imageUrl: userInfo.metadata.image || undefined, + imageUrl: + file?.thumbnailFileData?.url || userInfo.metadata.image || undefined, name: "Song from Social Feed", createdBy: authorId, fileUrl: file.url, duration: file.audioMetadata?.duration, - // postId is used to difference audios from Social Feed (News feed or Article consultation) + // postId is used to difference audios from Social Feed (News feed or Article consultation) postId: postId || Math.floor(Math.random() * 200000).toString(), }; - await loadAndPlaySound(songToPlay); + // TODO: Play songs of social feed: Add songs of next posts in queue + await loadAndPlayQueue([songToPlay]); } }; diff --git a/packages/components/FilePreview/EditableAudioPreview.tsx b/packages/components/FilePreview/EditableAudioPreview.tsx index d54b2ecd86..5e0fe81a87 100644 --- a/packages/components/FilePreview/EditableAudioPreview.tsx +++ b/packages/components/FilePreview/EditableAudioPreview.tsx @@ -42,7 +42,7 @@ export const EditableAudioPreview: React.FC = ({ media, isPlaying, handlePlayPause, - loadAndPlaySound, + loadAndPlayQueue, playbackStatus, removeSound, } = useMediaPlayer(); @@ -60,13 +60,15 @@ export const EditableAudioPreview: React.FC = ({ await handlePlayPause(); } else { const songToAdd: Media = { - imageUrl: userInfo.metadata.image || undefined, + imageUrl: + file.thumbnailFileData?.url || userInfo.metadata.image || undefined, name: file.fileName, createdBy: userId, fileUrl: file.url, duration: file.audioMetadata?.duration, }; - await loadAndPlaySound(songToAdd); + // TODO: Play songs of social feed: Add songs of next posts in queue + await loadAndPlayQueue([songToAdd]); } }; useEffect(() => { diff --git a/packages/components/mediaPlayer/MediaNameImage.tsx b/packages/components/mediaPlayer/MediaNameImage.tsx index 5c8471807b..9874124f2b 100644 --- a/packages/components/mediaPlayer/MediaNameImage.tsx +++ b/packages/components/mediaPlayer/MediaNameImage.tsx @@ -1,5 +1,5 @@ import { FC } from "react"; -import { Image, View } from "react-native"; +import { Image, StyleProp, View, ViewStyle } from "react-native"; import { useMediaPlayer } from "../../context/MediaPlayerProvider"; import { useNSUserInfo } from "../../hooks/useNSUserInfo"; @@ -12,7 +12,9 @@ import { BrandText } from "../BrandText"; import { OmniLink } from "../OmniLink"; import { SpacerRow } from "../spacer"; -export const MediaNameImage: FC = () => { +export const MediaNameImage: FC<{ + style?: StyleProp; +}> = ({ style }) => { const { media } = useMediaPlayer(); const authorNSInfo = useNSUserInfo(media?.createdBy); const [, userAddress] = parseUserId(media?.createdBy); @@ -26,6 +28,7 @@ export const MediaNameImage: FC = () => { if (!media) return ; return ( { - {media.name} + + {media.name} + {media?.createdBy && ( - + {"@" + username} )} diff --git a/packages/components/mediaPlayer/MediaPlayerBar.tsx b/packages/components/mediaPlayer/MediaPlayerBar.tsx index e74f95e39e..d9767221cd 100644 --- a/packages/components/mediaPlayer/MediaPlayerBar.tsx +++ b/packages/components/mediaPlayer/MediaPlayerBar.tsx @@ -112,14 +112,25 @@ export const MediaPlayerBar: FC<{ color={playbackStatus?.isLooping ? secondaryColor : neutralA3} /> - + - + - + + + + + ); diff --git a/packages/components/mediaPlayer/MediaPlayerBarMobile.tsx b/packages/components/mediaPlayer/MediaPlayerBarMobile.tsx index 5add0f0aa1..91ea4d1b75 100644 --- a/packages/components/mediaPlayer/MediaPlayerBarMobile.tsx +++ b/packages/components/mediaPlayer/MediaPlayerBarMobile.tsx @@ -57,7 +57,7 @@ export const MediaPlayerBarMobile: FC<{ }} > {/*TODO: Test this on mobile*/} - + - + + setIsRandom((isRandom) => !isRandom)}> diff --git a/packages/components/mediaPlayer/TimerSliderMobile.tsx b/packages/components/mediaPlayer/TimerSliderMobile.tsx index a8c0468393..374c208e5e 100644 --- a/packages/components/mediaPlayer/TimerSliderMobile.tsx +++ b/packages/components/mediaPlayer/TimerSliderMobile.tsx @@ -1,3 +1,4 @@ +import Slider from "@react-native-community/slider"; import React, { FC, useState } from "react"; import { View } from "react-native"; @@ -5,31 +6,30 @@ import { useMediaPlayer } from "../../context/MediaPlayerProvider"; import { neutral55, secondaryColor } from "../../utils/style/colors"; export const TimerSliderMobile: FC = () => { - const { media, playbackStatus } = useMediaPlayer(); const [width, setWidth] = useState(0); - const minimumTrackWidth = - width && media?.duration && playbackStatus?.positionMillis - ? width / (media.duration / playbackStatus.positionMillis) - : 0; + const { media, playbackStatus, onChangeTimerPosition } = useMediaPlayer(); return ( setWidth(e.nativeEvent.layout.width)} > - - onChangeTimerPosition(a)} + value={playbackStatus?.positionMillis} + tapToSeek + // @ts-expect-error FIXME: thumbStyle only allowed in SliderPropsWindows + thumbStyle={{ + width: 0, + height: 0, }} + thumbTintColor={secondaryColor} + maximumValue={media?.duration} + minimumTrackTintColor={secondaryColor} + maximumTrackTintColor={neutral55} + //TODO: Increase bar height is isSliding. By extension, change style, remove borderRadius etc. But this style prop doesn't allow to style the bar :'( + style={{ width }} + disabled={!media} /> ); diff --git a/packages/context/MediaPlayerProvider.tsx b/packages/context/MediaPlayerProvider.tsx index 512e41d72d..2a51a062a2 100644 --- a/packages/context/MediaPlayerProvider.tsx +++ b/packages/context/MediaPlayerProvider.tsx @@ -23,7 +23,6 @@ interface DefaultValue { isMediaPlayerOpen: boolean; setIsMediaPlayerOpen: Dispatch>; loadAndPlayQueue: (queue: Media[], mediaToStart?: Media) => Promise; - loadAndPlaySound: (media: Media, queue?: Media[]) => Promise; removeSound: () => Promise; canNext: boolean; canPrev: boolean; @@ -44,7 +43,6 @@ const defaultValue: DefaultValue = { isMediaPlayerOpen: false, setIsMediaPlayerOpen: () => {}, loadAndPlayQueue: async () => {}, - loadAndPlaySound: async () => {}, removeSound: async () => {}, canNext: false, canPrev: false, @@ -212,7 +210,6 @@ export const MediaPlayerContextProvider: React.FC = ({ children }) => { isMediaPlayerOpen, setIsMediaPlayerOpen, loadAndPlayQueue, - loadAndPlaySound, removeSound, canNext, canPrev,