From b6c0b9e203a8bfd78c608908ef51739871035059 Mon Sep 17 00:00:00 2001 From: Arnei Date: Thu, 14 Dec 2023 11:03:35 +0100 Subject: [PATCH 01/15] Split track selection to video and audio selection In the "Tracks" view, instead of de-/selecting the whole track, the video and audio streams can be de-/selected individually. At least one video stream must remain selected. All audio streams can be deselected. If the audio stream is marked as unavailable, it cannot be de-/selected. Shows the waveform from the timeline for a graphical representation of the audio stream. However, there will only be one waveform generated for the timeline, so in case of additional tracks a placeholder image will be shown instead. Resolves #1009. #1009 also mentions potential issues in the backend, while this PR only addresses the frontend. From my limited testing the backend seems fine when using the default community workflows (no errors, the correct streams get published). If there are any users around that are still using the track selection feature in the old editor, and that are aware of any backend issues, please do tell me about them. --- public/placeholder-waveform-empty.png | Bin 0 -> 43016 bytes public/placeholder-waveform.png | Bin 0 -> 72786 bytes src/i18n/locales/en-US.json | 18 ++-- src/main/TrackSelection.tsx | 148 +++++++++++++++++++------- src/redux/videoSlice.ts | 21 ++-- src/util/utilityFunctions.ts | 8 ++ 6 files changed, 145 insertions(+), 50 deletions(-) create mode 100644 public/placeholder-waveform-empty.png create mode 100644 public/placeholder-waveform.png diff --git a/public/placeholder-waveform-empty.png b/public/placeholder-waveform-empty.png new file mode 100644 index 0000000000000000000000000000000000000000..245ba282c61a5edae66f74eed549e4e358f532e2 GIT binary patch literal 43016 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 II~csb0ga;KiU0rr literal 0 HcmV?d00001 diff --git a/public/placeholder-waveform.png b/public/placeholder-waveform.png new file mode 100644 index 0000000000000000000000000000000000000000..eac7b675e9ca5cf20bd669e34258a5d7d6bd1e7e GIT binary patch literal 72786 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 literal 0 HcmV?d00001 diff --git a/src/i18n/locales/en-US.json b/src/i18n/locales/en-US.json index b77a3d038..9d6ef5097 100644 --- a/src/i18n/locales/en-US.json +++ b/src/i18n/locales/en-US.json @@ -231,12 +231,18 @@ "trackSelection": { "title": "Select track(s) for processing", "trackInactive": "inactive", - "deleteTrackText": "Delete Track", - "restoreTrackText": "Restore Track", - "cannotDeleteTrackText": "Cannot Delete Track", - "deleteTrackTooltip": "Do not encode and publish this track.", - "restoreTrackTooltip": "Encode and publish this track.", - "cannotDeleteTrackTooltip": "Cannot remove this track from publication." + "deleteVideoText": "Delete Video", + "restoreVideoText": "Restore Video", + "cannotDeleteVideoText": "Cannot Delete Video", + "deleteVideoTooltip": "Do not encode and publish this video.", + "restoreVideoTooltip": "Encode and publish this video.", + "cannotDeleteVideoTooltip": "Cannot remove this video from publication.", + "deleteAudioText": "Delete Audio", + "noAudioText": "No Audio available", + "restoreAudioText": "Restore Audio", + "deleteAudioTooltip": "Do not encode and publish this audio.", + "noAudioTooltip": "This track does not have any audio.", + "restoreAudioTooltip": "Encode and publish this audio." }, "subtitles": { diff --git a/src/main/TrackSelection.tsx b/src/main/TrackSelection.tsx index 533ad38e2..5c9ebcc46 100644 --- a/src/main/TrackSelection.tsx +++ b/src/main/TrackSelection.tsx @@ -2,18 +2,19 @@ import React from "react"; import { css } from '@emotion/react' import { IconType } from "react-icons"; -import { LuTrash } from "react-icons/lu"; +import { LuTrash, LuXCircle } from "react-icons/lu"; import { ReactComponent as TrashRestore } from '../img/trash-restore.svg'; import ReactPlayer from 'react-player' import { Track } from '../types' import { useSelector, useDispatch } from 'react-redux'; -import { selectVideos, setTrackEnabled } from '../redux/videoSlice' +import { selectVideos, selectWaveformImages, setAudioEnabled, setVideoEnabled } from '../redux/videoSlice' import { backgroundBoxStyle, basicButtonStyle, customIconStyle, deactivatedButtonStyle, flexGapReplacementStyle, titleStyle, titleStyleBold } from '../cssStyles' import { useTranslation } from 'react-i18next'; import { useTheme } from "../themes"; import { ThemedTooltip } from "./Tooltip"; +import { outOfBounds } from "../util/utilityFunctions"; /** * Creates the track selection. @@ -23,8 +24,14 @@ const TrackSelection: React.FC = () => { // Generate list of tracks const tracks: Track[] = useSelector(selectVideos); const enabledCount = tracks.filter(t => t.video_stream.enabled).length; - const trackItems: JSX.Element[] = tracks.map((track: Track) => - + const images = useSelector(selectWaveformImages) + const trackItems: JSX.Element[] = tracks.map((track: Track, index: number) => + ); const trackSelectionStyle = css({ @@ -71,15 +78,15 @@ const Header: React.FC = () => { } -const TrackItem: React.FC<{track: Track, enabledCount: number}> = ({track, enabledCount}) => { +const TrackItem: React.FC<{track: Track, enabledCount: number, waveform: string | undefined}> = ({track, enabledCount, waveform}) => { const theme = useTheme() const { t } = useTranslation(); const dispatch = useDispatch(); - const header = track.flavor.type + ' ' - + (track.video_stream.enabled ? '' - : `(${t('trackSelection.trackInactive', 'inactive')})`); + const header = track.flavor.type + + const imagesMaxWidth = 475 const trackItemStyle = css({ display: 'flex', @@ -96,12 +103,27 @@ const TrackItem: React.FC<{track: Track, enabledCount: number}> = ({track, enabl flexWrap: 'wrap', }) + const imagesStyle = css({ + display: 'flex', + flexDirection: 'column', + ...(flexGapReplacementStyle(20, true)), + }) + const playerStyle = css({ aspectRatio: '16 / 9', width: '100%', - maxWidth: '457px', + maxWidth: `${imagesMaxWidth}px`, }); + const imgStyle = css({ + height: '54px', // Keep height consistent in case the image does not render + width: '100%', + maxWidth: `${imagesMaxWidth}px`, + + filter: `${theme.invert_wave}`, + color: `${theme.inverted_text}`, + }) + const headerStyle = css({ fontWeight: 'bold', fontSize: 'larger', @@ -120,49 +142,99 @@ const TrackItem: React.FC<{track: Track, enabledCount: number}> = ({track, enabl flexDirection: 'column', }) - // What state is the track in and can it be deactivated? - // We do not permit deactivating the last remaining track - // 2 -> Track is enabled and can be deactivated - // 1 -> Track is enabled but is the last and cannot be deactivated - // 0 -> Track is disabled and can be restored + // What state is the video stream in and can it be deactivated? + // We do not permit deactivating the last remaining video + // 2 -> Video is enabled and can be deactivated + // 1 -> Video is enabled but is the last and cannot be deactivated + // 0 -> Video is disabled and can be restored const deleteStatus = track.video_stream.enabled ? (enabledCount > 1 ? 0 : 1) : 2; const deleteEnabled = deleteStatus !== 1; - const deleteText = [ - t('trackSelection.deleteTrackText', 'Delete Track'), - t('trackSelection.cannotDeleteTrackText', 'Cannot Delete Track'), - t('trackSelection.restoreTrackText', 'Restore Track') + const deleteTextVideo = [ + t('trackSelection.deleteVideoText'), + t('trackSelection.cannotDeleteVideoText'), + t('trackSelection.restoreVideoText') ][deleteStatus]; - const deleteTooltip = [ - t('trackSelection.deleteTrackTooltip', 'Do not encode and publish this track.'), - t('trackSelection.cannotDeleteTrackTooltip', 'Cannot remove this track from publication.'), - t('trackSelection.restoreTrackTooltip', 'Encode and publish this track.') + const deleteTooltipVideo = [ + t('trackSelection.deleteVideoTooltip'), + t('trackSelection.cannotDeleteVideoTooltip'), + t('trackSelection.restoreVideoTooltip') ][deleteStatus]; - const deleteIcon = [LuTrash, LuTrash, TrashRestore][deleteStatus]; - const trackEnabledChange = () => { - dispatch(setTrackEnabled({ - id: track.id, + const deleteIcon = [LuTrash, LuXCircle, TrashRestore][deleteStatus]; + const videoEnabledChange = () => { + dispatch(setVideoEnabled({ + trackId: track.id, enabled: !track.video_stream.enabled, })) } + // What state is the audio stream in and can it be deactivated? + // 2 -> Audio is enabled and can be deactivated + // 1 -> Audio is not available on this track and thus cannot be de-/activated + // 0 -> Audio is disabled and can be restored + const deleteStatusAudio = track.audio_stream.available ? (track.audio_stream.enabled ? 0 : 2) : 1; + const deleteEnabledAudio = deleteStatusAudio !== 1; + const deleteTextAudio = [ + t('trackSelection.deleteAudioText'), + t('trackSelection.noAudioText'), + t('trackSelection.restoreAudioText') + ][deleteStatusAudio]; + const deleteTooltipAudio = [ + t('trackSelection.deleteAudioTooltip'), + t('trackSelection.noAudioTooltip'), + t('trackSelection.restoreAudioTooltip') + ][deleteStatusAudio]; + const deleteIconAudio = [LuTrash, LuXCircle, TrashRestore][deleteStatusAudio]; + const audioEnabledChange = () => { + dispatch(setAudioEnabled({ + trackId: track.id, + enabled: !track.audio_stream.enabled, + })) + } + return (
{ header }
- +
+ + {track.audio_stream.available ? + placeholder for audio stream + : + placeholder for unavailable audio stream + } +
+
@@ -176,9 +248,10 @@ interface selectButtonInterface { Icon: IconType | React.FunctionComponent, tooltip: string, active: boolean, + positionAtEnd: boolean, // Just here to align the audio button with the corresponding image } -const SelectButton : React.FC = ({handler, text, Icon, tooltip, active}) => { +const SelectButton : React.FC = ({handler, text, Icon, tooltip, active, positionAtEnd}) => { const theme = useTheme(); @@ -190,6 +263,7 @@ const SelectButton : React.FC = ({handler, text, Icon, to boxShadow: '', background: `${theme.element_bg}`, textWrap: 'nowrap', + ...(positionAtEnd && {marginTop: 'auto'}), }]; const clickHandler = () => { diff --git a/src/redux/videoSlice.ts b/src/redux/videoSlice.ts index c9c230fb0..89dab8350 100644 --- a/src/redux/videoSlice.ts +++ b/src/redux/videoSlice.ts @@ -109,15 +109,22 @@ const videoSlice = createSlice({ name: 'videoState', initialState, reducers: { - setTrackEnabled: (state, action) => { + setVideoEnabled: (state, action: PayloadAction<{trackId: string, enabled: boolean}>) => { for (const track of state.tracks) { - if (track.id === action.payload.id) { - track.audio_stream.enabled = action.payload.enabled; + if (track.id === action.payload.trackId) { track.video_stream.enabled = action.payload.enabled; } } state.hasChanges = true; }, + setAudioEnabled: (state, action: PayloadAction<{trackId: string, enabled: boolean}>) => { + for (const track of state.tracks) { + if (track.id === action.payload.trackId) { + track.audio_stream.enabled = action.payload.enabled; + } + } + state.hasChanges = true; + }, setIsPlaying: (state, action: PayloadAction) => { state.isPlaying = action.payload; }, @@ -378,10 +385,10 @@ const setThumbnailHelper = (state: video, id: Track["id"], uri: Track["thumbnail } } -export const { setTrackEnabled, setIsPlaying, setIsPlayPreview, setIsMuted, setVolume, setCurrentlyAt, setCurrentlyAtInSeconds, - addSegment, setAspectRatio, setHasChanges, setWaveformImages, setThumbnails, setThumbnail, removeThumbnail, - setLock, cut, markAsDeletedOrAlive, setSelectedWorkflowIndex, mergeLeft, mergeRight, mergeAll, setPreviewTriggered, - setClickTriggered } = videoSlice.actions +export const { setVideoEnabled, setAudioEnabled, setIsPlaying, setIsPlayPreview, setIsMuted, setVolume, setCurrentlyAt, + setCurrentlyAtInSeconds, addSegment, setAspectRatio, setHasChanges, setWaveformImages, setThumbnails, setThumbnail, + removeThumbnail, setLock, cut, markAsDeletedOrAlive, setSelectedWorkflowIndex, mergeLeft, mergeRight, mergeAll, + setPreviewTriggered, setClickTriggered } = videoSlice.actions // Export selectors // Selectors mainly pertaining to the video state diff --git a/src/util/utilityFunctions.ts b/src/util/utilityFunctions.ts index 3b3607734..32fd14c53 100644 --- a/src/util/utilityFunctions.ts +++ b/src/util/utilityFunctions.ts @@ -206,3 +206,11 @@ export function useInterval(callback: IntervalFunction, delay: number | null) { } }, [callback, delay]); } + +// Returns true if the given index is out of bounds on the given array +export function outOfBounds(array: any[], index: number) { + if (index >= array.length) { + return true + } + return false +} From a453936d2cc6439cbf847f173c161e5e536819bd Mon Sep 17 00:00:00 2001 From: Marcus Date: Fri, 31 May 2024 08:01:46 +0200 Subject: [PATCH 02/15] Change frontend of track selection according to the mockups. See https://github.com/opencast/opencast-editor/pull/1230#issuecomment-2124872364 for details. Signed-off-by: Arnei --- src/cssStyles.tsx | 5 + src/i18n/locales/en-US.json | 26 +- src/main/Save.tsx | 7 +- src/main/TrackSelection.tsx | 520 +++++++++++++---------- src/main/WorkflowConfiguration.tsx | 7 +- src/redux/videoSlice.ts | 38 +- src/redux/workflowPostAndProcessSlice.ts | 1 + src/redux/workflowPostSlice.ts | 1 + src/types.ts | 1 + 9 files changed, 364 insertions(+), 242 deletions(-) diff --git a/src/cssStyles.tsx b/src/cssStyles.tsx index 3752e669a..66d7bdd1f 100644 --- a/src/cssStyles.tsx +++ b/src/cssStyles.tsx @@ -463,3 +463,8 @@ export const backgroundBoxStyle = (theme: Theme) => css(({ padding: "20px", ...(flexGapReplacementStyle(25, false)), })); + +export const checkboxStyle = (theme: Theme) => css({ + color: theme.text, + "&.Mui-disabled": { color: theme.disabled }, +}); diff --git a/src/i18n/locales/en-US.json b/src/i18n/locales/en-US.json index 9d6ef5097..60c25dc8a 100644 --- a/src/i18n/locales/en-US.json +++ b/src/i18n/locales/en-US.json @@ -230,19 +230,19 @@ "trackSelection": { "title": "Select track(s) for processing", - "trackInactive": "inactive", - "deleteVideoText": "Delete Video", - "restoreVideoText": "Restore Video", - "cannotDeleteVideoText": "Cannot Delete Video", - "deleteVideoTooltip": "Do not encode and publish this video.", - "restoreVideoTooltip": "Encode and publish this video.", - "cannotDeleteVideoTooltip": "Cannot remove this video from publication.", - "deleteAudioText": "Delete Audio", - "noAudioText": "No Audio available", - "restoreAudioText": "Restore Audio", - "deleteAudioTooltip": "Do not encode and publish this audio.", - "noAudioTooltip": "This track does not have any audio.", - "restoreAudioTooltip": "Encode and publish this audio." + "help": "At least one track has to be selected.", + "customizeLabel": "Customize track selection", + "videoTracksHeader": "Video tracks", + "audioTracksHeader": "Audio tracks", + "confirmText": "Confirm selection", + "confirmTooltip": "Confirm selected tracks", + "selectionAlertInfoVideo_zero": "You have not selected any video track.", + "selectionAlertInfoVideo_one": "You have selected 1 video track.", + "selectionAlertInfoVideo_other": "You have selected {{count}} video tracks.", + "selectionAlertInfoAudio_zero": "You have not selected any audio track.", + "selectionAlertInfoAudio_one": "You have selected 1 audio track.", + "selectionAlertInfoAudio_other": "You have selected {{count}} audio tracks that will be mixed into one.", + "selectionAlertError": "At least one video or audio track has to be selected." }, "subtitles": { diff --git a/src/main/Save.tsx b/src/main/Save.tsx index fdefd4736..d0d40b981 100644 --- a/src/main/Save.tsx +++ b/src/main/Save.tsx @@ -11,6 +11,7 @@ import { LuLoader, LuCheckCircle, LuAlertCircle, LuChevronLeft, LuSave, LuCheck import { useAppDispatch, useAppSelector } from "../redux/store"; import { selectFinishState } from "../redux/finishSlice"; import { + selectCustomizedTrackSelection, selectHasChanges, selectSegments, selectTracks, @@ -117,6 +118,7 @@ export const SaveButton: React.FC = () => { const segments = useAppSelector(selectSegments); const tracks = useAppSelector(selectTracks); + const customizedTrackSelection = useAppSelector(selectCustomizedTrackSelection); const subtitles = useAppSelector(selectSubtitles); const workflowStatus = useAppSelector(selectStatus); const metadataStatus = useAppSelector(selectPostStatus); @@ -173,8 +175,9 @@ export const SaveButton: React.FC = () => { if (metadataStatus === "success" && metadataSaveStarted) { setMetadataSaveStarted(false); dispatch(postVideoInformation({ - segments: segments, - tracks: tracks, + segments, + tracks, + customizedTrackSelection, subtitles: prepareSubtitles(), })); diff --git a/src/main/TrackSelection.tsx b/src/main/TrackSelection.tsx index df4bf617c..1bb510e47 100644 --- a/src/main/TrackSelection.tsx +++ b/src/main/TrackSelection.tsx @@ -1,18 +1,20 @@ import React from "react"; import { css } from "@emotion/react"; - -import { IconType } from "react-icons"; -import { LuTrash, LuXCircle } from "react-icons/lu"; -import { ReactComponent as TrashRestore } from "../img/trash-restore.svg"; +import { Alert, Checkbox, FormControlLabel } from "@mui/material"; import ReactPlayer from "react-player"; import { Track } from "../types"; -import { selectVideos, selectWaveformImages, setAudioEnabled, setVideoEnabled } from "../redux/videoSlice"; +import { + selectCustomizedTrackSelection, + selectVideos, + selectWaveformImages, + setAudioEnabled, + setCustomizedTrackSelection, + setVideoEnabled, +} from "../redux/videoSlice"; import { backgroundBoxStyle, - basicButtonStyle, - customIconStyle, - deactivatedButtonStyle, + checkboxStyle, flexGapReplacementStyle, titleStyle, titleStyleBold, @@ -20,7 +22,6 @@ import { import { useTranslation } from "react-i18next"; import { useTheme } from "../themes"; -import { ThemedTooltip } from "./Tooltip"; import { outOfBounds } from "../util/utilityFunctions"; import { useAppDispatch, useAppSelector } from "../redux/store"; @@ -28,54 +29,133 @@ import { useAppDispatch, useAppSelector } from "../redux/store"; * Creates the track selection. */ const TrackSelection: React.FC = () => { + const { t } = useTranslation(); + const dispatch = useAppDispatch(); // Generate list of tracks const tracks: Track[] = useAppSelector(selectVideos); - const enabledCount = tracks.filter(t => t.video_stream.enabled).length; + const enabledCount = tracks.reduce( + (memo: number, track: Track) => memo + !!track.video_stream.enabled + !!track.audio_stream.enabled, + 0 + ); const images = useAppSelector(selectWaveformImages); - const trackItems: JSX.Element[] = tracks.map((track: Track, index: number) => - + const customizedTrackSelection: boolean = useAppSelector(selectCustomizedTrackSelection); + + const videoTrackItems: JSX.Element[] = tracks.map( + (track: Track) => ( + ) ); - const trackSelectionStyle = css({ - display: "flex", - width: "auto", - height: "100%", - flexDirection: "column", - alignItems: "center", - }); + const audioTrackItems: JSX.Element[] = tracks.map( + (track: Track, index: number) => ( + + ) + ); - const trackAreaStyle = css({ - display: "flex", - width: "100%", - height: "100%", - flexDirection: "row", - justifyContent: "center", - alignItems: "center", - ...(flexGapReplacementStyle(10, false)), - }); + const onChange = () => { + if (customizedTrackSelection) { + tracks.forEach(track => { + if (track.video_stream.available) { + dispatch(setVideoEnabled({ + trackId: track.id, + enabled: true, + })); + } + if (track.audio_stream.available) { + dispatch(setAudioEnabled({ + trackId: track.id, + enabled: true, + })); + } + }); + } + + dispatch(setCustomizedTrackSelection(!customizedTrackSelection)); + }; + + const styles = { + trackSelection: css({ + display: "flex", + width: "max-content", + height: "100%", + flexDirection: "column", + alignItems: "center", + gap: "2rem", + alignSelf: "center", + }), + + trackArea: css({ + display: "flex", + width: "100%", + height: "100%", + flexDirection: "row", + justifyContent: "center", + alignItems: "center", + ...(flexGapReplacementStyle(10, false)), + }), + + leftAlignedSection: css({ + alignSelf: "start", + }), + + selectionSection: css({ + transition: "all 0.05s", + ...( + customizedTrackSelection + ? {} + : { + opacity: "0.7", + pointerEvents: "none", + filter: "grayscale(80%) blur(1.5px) brightness(80%)", + } + ), + }), + + trackSection: css({ + "& h3": { + marginBlock: "0", + }, + }), + }; return ( -
+
-
- {trackItems} -
+
+ +
+
+ +
+
+

{t("trackSelection.videoTracksHeader")}

+
{ videoTrackItems }
+
+
+

{t("trackSelection.audioTracksHeader")}

+
{ audioTrackItems }
+
); }; - const Header: React.FC = () => { - const { t } = useTranslation(); const theme = useTheme(); - const description: string = t("trackSelection.title"); return ( @@ -85,97 +165,53 @@ const Header: React.FC = () => { ); }; +const TrackSelectionEnabler: React.FC<{ + customizable: boolean, + onChange: () => void, +}> = ({ + customizable, + onChange, +}) => { + const theme = useTheme(); + const { t } = useTranslation(); + const label = t("trackSelection.customizeLabel"); -const TrackItem: React.FC<{ + return ( + + } label={label} /> + ); +}; + +const VideoTrackItem: React.FC<{ track: Track, enabledCount: number, - waveform: string | undefined + customizable: boolean, }> = ({ track, enabledCount, - waveform, + customizable, }) => { - - const theme = useTheme(); - - const { t } = useTranslation(); const dispatch = useAppDispatch(); - const header = track.flavor.type; - - const imagesMaxWidth = 475; - - const trackItemStyle = css({ - display: "flex", - flexDirection: "column", - alignItems: "left", - }); - - const trackitemSubStyle = css({ - display: "flex", - flexDirection: "row", - ...(flexGapReplacementStyle(20, true)), - - justifyContent: "space-around", - flexWrap: "wrap", - }); - - const imagesStyle = css({ - display: "flex", - flexDirection: "column", - ...(flexGapReplacementStyle(20, true)), - }); + const imagesMaxWidth = 300; + const disabled = !customizable || (track.video_stream.enabled && enabledCount === 1); const playerStyle = css({ aspectRatio: "16 / 9", width: "100%", maxWidth: `${imagesMaxWidth}px`, + opacity: track.video_stream.enabled ? "1" : "0.5", }); - const imgStyle = css({ - height: "54px", // Keep height consistent in case the image does not render - width: "100%", - maxWidth: `${imagesMaxWidth}px`, - - filter: `${theme.invert_wave}`, - color: `${theme.inverted_text}`, - }); - - const headerStyle = css({ - fontWeight: "bold", - fontSize: "larger", - color: `${theme.text}`, - "&:first-letter": { - textTransform: "capitalize", - }, - }); - - const buttonsStyle = css({ - // TODO: Avoid hard-coding max-width - "@media (max-width: 1550px)": { - width: "100%", - }, - display: "flex", - flexDirection: "column", - }); + const playerRootStyle = { + filter: track.video_stream.enabled ? "none" : "grayscale(80%) blur(1.5px) brightness(80%)", + opacity: track.video_stream.enabled ? "1" : "0.5", + }; - // What state is the video stream in and can it be deactivated? - // We do not permit deactivating the last remaining video - // 2 -> Video is enabled and can be deactivated - // 1 -> Video is enabled but is the last and cannot be deactivated - // 0 -> Video is disabled and can be restored - const deleteStatus = track.video_stream.enabled ? (enabledCount > 1 ? 0 : 1) : 2; - const deleteEnabled = deleteStatus !== 1; - const deleteTextVideo = [ - t("trackSelection.deleteVideoText"), - t("trackSelection.cannotDeleteVideoText"), - t("trackSelection.restoreVideoText"), - ][deleteStatus]; - const deleteTooltipVideo = [ - t("trackSelection.deleteVideoTooltip"), - t("trackSelection.cannotDeleteVideoTooltip"), - t("trackSelection.restoreVideoTooltip"), - ][deleteStatus]; - const deleteIcon = [LuTrash, LuXCircle, TrashRestore][deleteStatus]; const videoEnabledChange = () => { dispatch(setVideoEnabled({ trackId: track.id, @@ -183,23 +219,49 @@ const TrackItem: React.FC<{ })); }; - // What state is the audio stream in and can it be deactivated? - // 2 -> Audio is enabled and can be deactivated - // 1 -> Audio is not available on this track and thus cannot be de-/activated - // 0 -> Audio is disabled and can be restored - const deleteStatusAudio = track.audio_stream.available ? (track.audio_stream.enabled ? 0 : 2) : 1; - const deleteEnabledAudio = deleteStatusAudio !== 1; - const deleteTextAudio = [ - t("trackSelection.deleteAudioText"), - t("trackSelection.noAudioText"), - t("trackSelection.restoreAudioText"), - ][deleteStatusAudio]; - const deleteTooltipAudio = [ - t("trackSelection.deleteAudioTooltip"), - t("trackSelection.noAudioTooltip"), - t("trackSelection.restoreAudioTooltip"), - ][deleteStatusAudio]; - const deleteIconAudio = [LuTrash, LuXCircle, TrashRestore][deleteStatusAudio]; + return ( + + + + ); +}; + +const AudioTrackItem: React.FC<{ + track: Track, + waveform: string | undefined + enabledCount: number, + customizable: boolean, +}> = ({ + track, + waveform, + enabledCount, + customizable, +}) => { + const theme = useTheme(); + const dispatch = useAppDispatch(); + const imagesMaxWidth = 300; + const disabled = !customizable || (track.audio_stream.enabled && enabledCount === 1); + + const imgStyle = css({ + height: "54px", // Keep height consistent in case the image does not render + width: "100%", + maxWidth: `${imagesMaxWidth}px`, + filter: `${theme.invert_wave}`, + color: `${theme.inverted_text}`, + }); + const audioEnabledChange = () => { dispatch(setAudioEnabled({ trackId: track.id, @@ -208,107 +270,123 @@ const TrackItem: React.FC<{ }; return ( -
-
{header}
-
-
- - {track.audio_stream.available ? - placeholder for audio stream - : - placeholder for unavailable audio stream - } -
-
- - + + {track.audio_stream.available ? + placeholder for audio stream + : + placeholder for unavailable audio stream + } + + ); +}; + +const TrackItem: React.FC<{ + header: string, + checked: boolean, + disabled: boolean, + onChange: () => void, + children: React.ReactNode, +}> = ({ + header, + checked, + disabled, + onChange, + children, +}) => { + const theme = useTheme(); + + const styles = { + trackItem: css({ + display: "flex", + flexDirection: "column", + alignItems: "left", + cursor: disabled ? "not-allowed" : "pointer", + }), + + trackitemSub: css({ + display: "flex", + flexDirection: "row", + ...(flexGapReplacementStyle(20, true)), + justifyContent: "space-around", + flexWrap: "wrap", + }), + + images: css({ + display: "flex", + flexDirection: "column", + ...(flexGapReplacementStyle(20, true)), + }), + + header: css({ + fontWeight: "bold", + textTransform: "capitalize", + display: "flex", + alignItems: "center", + gap: "0.5em", + }), + }; + + return ( +
+ ); }; -interface selectButtonInterface { - handler: () => void, - text: string, - Icon: IconType | React.FunctionComponent, - tooltip: string, - active: boolean, - positionAtEnd: boolean, // Just here to align the audio button with the corresponding image +interface selectionAlertInterface { + tracks: Track[], + customizable: boolean, } -const SelectButton : React.FC = ({ handler, text, Icon, tooltip, active, positionAtEnd }) => { - +const SelectionAlert: React.FC = ({ + tracks, + customizable, +}) => { + const { t } = useTranslation(); const theme = useTheme(); + const video = tracks.filter(t => t.video_stream.enabled).length; + const audio = tracks.filter(t => t.audio_stream.enabled).length; - const buttonStyle = [ - active ? basicButtonStyle(theme) : deactivatedButtonStyle, - { - padding: "16px", - maxHeight: "21px", - boxShadow: "", - background: `${theme.element_bg}`, - textWrap: "nowrap", - ...(positionAtEnd && { marginTop: "auto" }), - }]; - - const clickHandler = () => { - if (active) { handler(); } - ref.current?.blur(); - }; - - const keyHandler = (event: React.KeyboardEvent) => { - if (active && (event.key === " " || event.key === "Enter")) { - handler(); - } - }; - - const ref = React.useRef(null); + const lines = customizable ? [ + t("trackSelection.selectionAlertInfoVideo", { count: video }), + t("trackSelection.selectionAlertInfoAudio", { count: audio }), + ] : []; return ( - -
- - {text} + +
+ {t("trackSelection.help")}
- + + {lines.map((line, index) => (
{line}
))} +
); }; diff --git a/src/main/WorkflowConfiguration.tsx b/src/main/WorkflowConfiguration.tsx index 575b88401..da01e6a7d 100644 --- a/src/main/WorkflowConfiguration.tsx +++ b/src/main/WorkflowConfiguration.tsx @@ -13,6 +13,7 @@ import { LuLoader, LuCheck, LuAlertCircle, LuChevronLeft, LuDatabase, LuMoreHori import { useAppDispatch, useAppSelector } from "../redux/store"; import { + selectCustomizedTrackSelection, selectSegments, selectTracks, setHasChanges as videoSetHasChanges, @@ -93,6 +94,7 @@ export const SaveAndProcessButton: React.FC<{ text: string; }> = ({ text }) => { const selectedWorkflowId = useAppSelector(selectSelectedWorkflowId); const segments = useAppSelector(selectSegments); const tracks = useAppSelector(selectTracks); + const customizedTrackSelection = useAppSelector(selectCustomizedTrackSelection); const subtitles = useAppSelector(selectSubtitles); const workflowStatus = useAppSelector(selectStatus); const metadataStatus = useAppSelector(selectPostStatus); @@ -134,8 +136,9 @@ export const SaveAndProcessButton: React.FC<{ text: string; }> = ({ text }) => { if (metadataStatus === "success" && metadataSaveStarted) { setMetadataSaveStarted(false); dispatch(postVideoInformationWithWorkflow({ - segments: segments, - tracks: tracks, + segments, + tracks, + customizedTrackSelection, workflow: [{ id: selectedWorkflowId }], subtitles: prepareSubtitles(), })); diff --git a/src/redux/videoSlice.ts b/src/redux/videoSlice.ts index e391e2204..81d2b5f6e 100644 --- a/src/redux/videoSlice.ts +++ b/src/redux/videoSlice.ts @@ -15,6 +15,7 @@ export interface video { currentlyAt: number, // Position in the video in milliseconds segments: Segment[], tracks: Track[], + customizedTrackSelection: boolean, // Did user select tracks for processing subtitlesFromOpencast: SubtitlesFromOpencast[], activeSegmentIndex: number, // Index of the segment that is currenlty hovered selectedWorkflowId: string, // Id of the currently selected workflow @@ -49,6 +50,7 @@ export const initialState: video & httpRequestState = { currentlyAt: 0, // Position in the video in milliseconds segments: [{ id: nanoid(), start: 0, end: 1, deleted: false }], tracks: [], + customizedTrackSelection: false, subtitlesFromOpencast: [], activeSegmentIndex: 0, selectedWorkflowId: "", @@ -222,6 +224,9 @@ const videoSlice = createSlice({ mergeSegments(state, state.activeSegmentIndex, state.segments.length - 1); state.hasChanges = true; }, + setCustomizedTrackSelection: (state, action: PayloadAction) => { + state.customizedTrackSelection = action.payload; + }, }, // For Async Requests extraReducers: builder => { @@ -392,10 +397,33 @@ const setThumbnailHelper = (state: video, id: Track["id"], uri: Track["thumbnail } }; -export const { setVideoEnabled, setAudioEnabled, setIsPlaying, setIsPlayPreview, setIsMuted, setVolume, setCurrentlyAt, - setCurrentlyAtInSeconds, addSegment, setAspectRatio, setHasChanges, setWaveformImages, setThumbnails, setThumbnail, - removeThumbnail, setLock, cut, markAsDeletedOrAlive, setSelectedWorkflowIndex, mergeLeft, mergeRight, mergeAll, - setPreviewTriggered, setClickTriggered } = videoSlice.actions; +export const { + addSegment, + cut, + markAsDeletedOrAlive, + mergeAll, + mergeLeft, + mergeRight, + removeThumbnail, + setAspectRatio, + setAudioEnabled, + setClickTriggered, + setCurrentlyAt, + setCurrentlyAtInSeconds, + setCustomizedTrackSelection, + setHasChanges, + setIsMuted, + setIsPlayPreview, + setIsPlaying, + setLock, + setPreviewTriggered, + setSelectedWorkflowIndex, + setThumbnail, + setThumbnails, + setVideoEnabled, + setVolume, + setWaveformImages, +} = videoSlice.actions; // Export selectors // Selectors mainly pertaining to the video state @@ -453,6 +481,8 @@ export const selectTitle = (state: { videoState: { title: video["title"]; }; }) state.videoState.title; export const selectTracks = (state: { videoState: { tracks: video["tracks"]; }; }) => state.videoState.tracks; +export const selectCustomizedTrackSelection = (state: { videoState: { tracks: video["customizedTrackSelection"]; }; }) => + state.videoState.customizedTrackSelection; export const selectWorkflows = (state: { videoState: { workflows: video["workflows"]; }; }) => state.videoState.workflows; export const selectAspectRatio = (state: { videoState: { aspectRatios: video["aspectRatios"]; }; }) => diff --git a/src/redux/workflowPostAndProcessSlice.ts b/src/redux/workflowPostAndProcessSlice.ts index 5984eb8e0..13e8b875e 100644 --- a/src/redux/workflowPostAndProcessSlice.ts +++ b/src/redux/workflowPostAndProcessSlice.ts @@ -21,6 +21,7 @@ export const postVideoInformationWithWorkflow = { segments: convertSegments(argument.segments), tracks: argument.tracks, + customizedTrackSelection: argument.customizedTrackSelection, subtitles: argument.subtitles, workflows: argument.workflow, } diff --git a/src/redux/workflowPostSlice.ts b/src/redux/workflowPostSlice.ts index 0e8dcee0e..00d9fbd4e 100644 --- a/src/redux/workflowPostSlice.ts +++ b/src/redux/workflowPostSlice.ts @@ -19,6 +19,7 @@ export const postVideoInformation = { segments: convertSegments(argument.segments), tracks: argument.tracks, + customizedTrackSelection: argument.customizedTrackSelection, subtitles: argument.subtitles, } ); diff --git a/src/types.ts b/src/types.ts index 06232b9f3..30cb4ec5b 100644 --- a/src/types.ts +++ b/src/types.ts @@ -67,6 +67,7 @@ export interface ExtendedSubtitleCue extends SubtitleCue { export interface PostEditArgument { segments: Segment[] tracks: Track[] + customizedTrackSelection: boolean subtitles: SubtitlesFromOpencast[] } From c097585048837e2b8faa5009dcafaebb564202f8 Mon Sep 17 00:00:00 2001 From: Marcus Date: Tue, 4 Jun 2024 06:22:17 +0200 Subject: [PATCH 03/15] Add styles to enhance responsive design for small devices. Signed-off-by: Arnei --- src/main/TrackSelection.tsx | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/src/main/TrackSelection.tsx b/src/main/TrackSelection.tsx index 1bb510e47..62ad6c17a 100644 --- a/src/main/TrackSelection.tsx +++ b/src/main/TrackSelection.tsx @@ -13,6 +13,7 @@ import { setVideoEnabled, } from "../redux/videoSlice"; import { + BREAKPOINT_MEDIUM, backgroundBoxStyle, checkboxStyle, flexGapReplacementStyle, @@ -87,7 +88,6 @@ const TrackSelection: React.FC = () => { const styles = { trackSelection: css({ display: "flex", - width: "max-content", height: "100%", flexDirection: "column", alignItems: "center", @@ -100,6 +100,7 @@ const TrackSelection: React.FC = () => { width: "100%", height: "100%", flexDirection: "row", + flexWrap: "wrap", justifyContent: "center", alignItems: "center", ...(flexGapReplacementStyle(10, false)), @@ -198,13 +199,17 @@ const VideoTrackItem: React.FC<{ }) => { const dispatch = useAppDispatch(); const imagesMaxWidth = 300; + const imagesMaxWidthMedium = 150; const disabled = !customizable || (track.video_stream.enabled && enabledCount === 1); const playerStyle = css({ aspectRatio: "16 / 9", width: "100%", - maxWidth: `${imagesMaxWidth}px`, opacity: track.video_stream.enabled ? "1" : "0.5", + maxWidth: `${imagesMaxWidthMedium}px`, + [`@media (min-width: ${BREAKPOINT_MEDIUM}px)`]: { + "&": { maxWidth: `${imagesMaxWidth}px` }, + }, }); const playerRootStyle = { @@ -252,14 +257,18 @@ const AudioTrackItem: React.FC<{ const theme = useTheme(); const dispatch = useAppDispatch(); const imagesMaxWidth = 300; + const imagesMaxWidthMedium = 150; const disabled = !customizable || (track.audio_stream.enabled && enabledCount === 1); const imgStyle = css({ height: "54px", // Keep height consistent in case the image does not render width: "100%", - maxWidth: `${imagesMaxWidth}px`, filter: `${theme.invert_wave}`, color: `${theme.inverted_text}`, + maxWidth: `${imagesMaxWidthMedium}px`, + [`@media (min-width: ${BREAKPOINT_MEDIUM}px)`]: { + "&": { maxWidth: `${imagesMaxWidth}px` }, + }, }); const audioEnabledChange = () => { From f4dc833534af91d31362d73b49d3b7f0e5436e6b Mon Sep 17 00:00:00 2001 From: Marcus Date: Tue, 4 Jun 2024 06:25:00 +0200 Subject: [PATCH 04/15] Transmit `customizedTrackSelection` to backend. Signed-off-by: Arnei --- src/redux/videoSlice.ts | 36 +++++++++++++++++++----------------- 1 file changed, 19 insertions(+), 17 deletions(-) diff --git a/src/redux/videoSlice.ts b/src/redux/videoSlice.ts index 81d2b5f6e..dd7c9915c 100644 --- a/src/redux/videoSlice.ts +++ b/src/redux/videoSlice.ts @@ -235,19 +235,19 @@ const videoSlice = createSlice({ state.status = "loading"; }); builder.addCase( - fetchVideoInformation.fulfilled, (state, action) => { + fetchVideoInformation.fulfilled, (state, { payload }) => { state.status = "success"; - if (action.payload.workflow_active) { + if (payload.workflow_active) { state.status = "failed"; state.errorReason = "workflowActive"; state.error = "This event is being processed. Please wait until the process is finished."; } - state.tracks = action.payload.tracks + state.tracks = payload.tracks .sort((a: { thumbnailPriority: number; }, b: { thumbnailPriority: number; }) => { return a.thumbnailPriority - b.thumbnailPriority; }).map((track: Track) => { - if (action.payload.local && settings.opencast.local) { + if (payload.local && settings.opencast.local) { console.debug("Replacing track URL"); track.uri = track.uri.replace(/https?:\/\/[^/]*/g, window.location.origin); } @@ -257,22 +257,23 @@ const videoSlice = createSlice({ // eslint-disable-next-line no-sequences state.videoURLs = videos.reduce((a: string[], o: { uri: string; }) => (a.push(o.uri), a), []); state.videoCount = state.videoURLs.length; - state.subtitlesFromOpencast = action.payload.subtitles ? - state.subtitlesFromOpencast = action.payload.subtitles : []; - state.duration = action.payload.duration; - state.title = action.payload.title; - state.segments = parseSegments(action.payload.segments, action.payload.duration); - state.workflows = action.payload.workflows; - state.waveformImages = action.payload.waveformURIs ? action.payload.waveformURIs : state.waveformImages; + state.subtitlesFromOpencast = payload.subtitles ? + state.subtitlesFromOpencast = payload.subtitles : []; + state.duration = payload.duration; + state.title = payload.title; + state.segments = parseSegments(payload.segments, payload.duration); + state.workflows = payload.workflows; + state.waveformImages = payload.waveformURIs ? payload.waveformURIs : state.waveformImages; state.originalThumbnails = state.tracks.map( (track: Track) => { return { id: track.id, uri: track.thumbnailUri }; } ); state.aspectRatios = new Array(state.videoCount); - state.lockingActive = action.payload.locking_active; - state.lockRefresh = action.payload.lock_refresh; - state.lock.uuid = action.payload.lock_uuid; - state.lock.user = action.payload.lock_user; + state.lockingActive = payload.locking_active; + state.lockRefresh = payload.lock_refresh; + state.lock.uuid = payload.lock_uuid; + state.lock.user = payload.lock_user; + state.customizedTrackSelection = payload.customizedTrackSelection; }); builder.addCase( fetchVideoInformation.rejected, (state, action) => { @@ -481,8 +482,9 @@ export const selectTitle = (state: { videoState: { title: video["title"]; }; }) state.videoState.title; export const selectTracks = (state: { videoState: { tracks: video["tracks"]; }; }) => state.videoState.tracks; -export const selectCustomizedTrackSelection = (state: { videoState: { tracks: video["customizedTrackSelection"]; }; }) => - state.videoState.customizedTrackSelection; +export const selectCustomizedTrackSelection = ( + state: { videoState: { tracks: video["customizedTrackSelection"]; }; } +) => state.videoState.customizedTrackSelection; export const selectWorkflows = (state: { videoState: { workflows: video["workflows"]; }; }) => state.videoState.workflows; export const selectAspectRatio = (state: { videoState: { aspectRatios: video["aspectRatios"]; }; }) => From aa240ff0818b9fe212369d1a8d086345909f8c16 Mon Sep 17 00:00:00 2001 From: Marcus Date: Tue, 4 Jun 2024 06:38:09 +0200 Subject: [PATCH 05/15] Fix case of `customized_track_selection`. Signed-off-by: Arnei --- src/redux/videoSlice.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/redux/videoSlice.ts b/src/redux/videoSlice.ts index dd7c9915c..25da9ab9b 100644 --- a/src/redux/videoSlice.ts +++ b/src/redux/videoSlice.ts @@ -273,7 +273,7 @@ const videoSlice = createSlice({ state.lockRefresh = payload.lock_refresh; state.lock.uuid = payload.lock_uuid; state.lock.user = payload.lock_user; - state.customizedTrackSelection = payload.customizedTrackSelection; + state.customizedTrackSelection = payload.customized_track_selection; }); builder.addCase( fetchVideoInformation.rejected, (state, action) => { From 4c255dfd8e0889eaaaa6c5d377c622557e8784ac Mon Sep 17 00:00:00 2001 From: Arnei Date: Thu, 6 Jun 2024 08:57:54 +0200 Subject: [PATCH 06/15] Fix build error --- src/main/TrackSelection.tsx | 3 --- src/util/utilityFunctions.ts | 2 +- 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/src/main/TrackSelection.tsx b/src/main/TrackSelection.tsx index ca63c8538..c9530cbd7 100644 --- a/src/main/TrackSelection.tsx +++ b/src/main/TrackSelection.tsx @@ -2,9 +2,6 @@ import React from "react"; import { css } from "@emotion/react"; import { Alert, Checkbox, FormControlLabel } from "@mui/material"; -import { IconType } from "react-icons"; -import { LuTrash } from "react-icons/lu"; -import TrashRestore from "../img/trash-restore.svg?react"; import ReactPlayer from "react-player"; import { Track } from "../types"; diff --git a/src/util/utilityFunctions.ts b/src/util/utilityFunctions.ts index 506f6d064..5ac147c2f 100644 --- a/src/util/utilityFunctions.ts +++ b/src/util/utilityFunctions.ts @@ -208,7 +208,7 @@ export function useInterval(callback: IntervalFunction, delay: number | null) { } // Returns true if the given index is out of bounds on the given array -export function outOfBounds(array: any[], index: number) { +export function outOfBounds(array: unknown[], index: number) { if (index >= array.length) { return true; } From 24124dbecf18098e5352c05d0850eb958c077c18 Mon Sep 17 00:00:00 2001 From: Arnei Date: Thu, 6 Jun 2024 13:07:09 +0200 Subject: [PATCH 07/15] Fix variable name --- src/redux/videoSlice.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/redux/videoSlice.ts b/src/redux/videoSlice.ts index 3b8db8bf7..7fab1efaf 100644 --- a/src/redux/videoSlice.ts +++ b/src/redux/videoSlice.ts @@ -340,7 +340,7 @@ const videoSlice = createSlice({ state.lockRefresh = payload.lock_refresh; state.lock.uuid = payload.lock_uuid; state.lock.user = payload.lock_user; - state.customizedTrackSelection = payload.customized_track_selection; + state.customizedTrackSelection = payload.customizedTrackSelection; }); builder.addCase( fetchVideoInformation.rejected, (state, action) => { From 3c1987f7764f34184af37e983b09ac33a738a7a8 Mon Sep 17 00:00:00 2001 From: Arnei Date: Fri, 7 Jun 2024 10:40:24 +0200 Subject: [PATCH 08/15] New placeholder for no audio tracks Text is superfluos, just show a flatline --- public/placeholder-waveform-empty.png | Bin 43016 -> 6647 bytes src/main/TrackSelection.tsx | 4 ++-- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/public/placeholder-waveform-empty.png b/public/placeholder-waveform-empty.png index 245ba282c61a5edae66f74eed549e4e358f532e2..01ff81898bb5ba79eecb2b1909dbd0f0b8b518d4 100644 GIT binary patch literal 6647 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 II~csb0ga;KiU0rr diff --git a/src/main/TrackSelection.tsx b/src/main/TrackSelection.tsx index c9530cbd7..d578bb66f 100644 --- a/src/main/TrackSelection.tsx +++ b/src/main/TrackSelection.tsx @@ -35,13 +35,13 @@ const TrackSelection: React.FC = () => { const dispatch = useAppDispatch(); // Generate list of tracks - const tracks: Track[] = useAppSelector(selectVideos); + const tracks = useAppSelector(selectVideos); const enabledCount = tracks.reduce( (memo: number, track: Track) => memo + !!track.video_stream.enabled + !!track.audio_stream.enabled, 0 ); const images = useAppSelector(selectWaveformImages); - const customizedTrackSelection: boolean = useAppSelector(selectCustomizedTrackSelection); + const customizedTrackSelection = useAppSelector(selectCustomizedTrackSelection); const videoTrackItems: JSX.Element[] = tracks.map( (track: Track) => ( From 4506bde95ead7dac04b66851c914d9124afa879d Mon Sep 17 00:00:00 2001 From: Arnei Date: Fri, 7 Jun 2024 11:14:52 +0200 Subject: [PATCH 09/15] Fix "No audio" tracks in track selection being selected "No audio" tracks were enabled per default and could not be disabled. Now they are disabled per default and can't be enabled. This also avoid an issue were a user could end up with a track selection that only contained "No audio" tracks. --- src/main/TrackSelection.tsx | 15 ++++++++++++--- src/redux/videoSlice.ts | 9 ++------- 2 files changed, 14 insertions(+), 10 deletions(-) diff --git a/src/main/TrackSelection.tsx b/src/main/TrackSelection.tsx index d578bb66f..9b68d2b65 100644 --- a/src/main/TrackSelection.tsx +++ b/src/main/TrackSelection.tsx @@ -1,4 +1,4 @@ -import React from "react"; +import React, { useEffect } from "react"; import { css } from "@emotion/react"; import { Alert, Checkbox, FormControlLabel } from "@mui/material"; @@ -43,7 +43,7 @@ const TrackSelection: React.FC = () => { const images = useAppSelector(selectWaveformImages); const customizedTrackSelection = useAppSelector(selectCustomizedTrackSelection); - const videoTrackItems: JSX.Element[] = tracks.map( + const videoTrackItems = tracks.map( (track: Track) => ( { />) ); - const audioTrackItems: JSX.Element[] = tracks.map( + const audioTrackItems = tracks.map( (track: Track, index: number) => ( { + if (!track.audio_stream.available) { + dispatch(setAudioEnabled({ + trackId: track.id, + enabled: false, + })); + } + }, [track.audio_stream.available]); + return ( state.videoState.tracks], - tracks => tracks.filter((track: Track) => track.video_stream.available === true) -); - // Export selectors export const { selectIsPlaying, @@ -571,6 +565,7 @@ export const { selectAspectRatio, selectSubtitlesFromOpencast, selectSubtitlesFromOpencastById, + selectVideos, } = videoSlice.selectors; export default videoSlice.reducer; From eb84d905a98ac4ad0ae40f219bde1ef5a5a58363 Mon Sep 17 00:00:00 2001 From: Marcus Date: Fri, 14 Jun 2024 12:55:15 +0200 Subject: [PATCH 10/15] Align audio tracks and add descriptive text when missing the audio. Signed-off-by: Arnei --- src/i18n/locales/en-US.json | 1 + src/main/TrackSelection.tsx | 21 +++++++++++---------- 2 files changed, 12 insertions(+), 10 deletions(-) diff --git a/src/i18n/locales/en-US.json b/src/i18n/locales/en-US.json index cebe7cfa9..ef55af0ec 100644 --- a/src/i18n/locales/en-US.json +++ b/src/i18n/locales/en-US.json @@ -241,6 +241,7 @@ "audioTracksHeader": "Audio tracks", "confirmText": "Confirm selection", "confirmTooltip": "Confirm selected tracks", + "noAudioAvailable": "No audio available", "selectionAlertInfoVideo_zero": "You have not selected any video track.", "selectionAlertInfoVideo_one": "You have selected 1 video track.", "selectionAlertInfoVideo_other": "You have selected {{count}} video tracks.", diff --git a/src/main/TrackSelection.tsx b/src/main/TrackSelection.tsx index 9b68d2b65..8c99fca4e 100644 --- a/src/main/TrackSelection.tsx +++ b/src/main/TrackSelection.tsx @@ -41,7 +41,7 @@ const TrackSelection: React.FC = () => { 0 ); const images = useAppSelector(selectWaveformImages); - const customizedTrackSelection = useAppSelector(selectCustomizedTrackSelection); + const customizedTrackSelection = !!useAppSelector(selectCustomizedTrackSelection); const videoTrackItems = tracks.map( (track: Track) => ( @@ -99,11 +99,13 @@ const TrackSelection: React.FC = () => { trackArea: css({ display: "flex", width: "100%", - height: "100%", flexDirection: "row", flexWrap: "wrap", justifyContent: "center", - alignItems: "center", + alignItems: "stretch", + "& > *" : { + flex: "1 1 0px", + }, ...(flexGapReplacementStyle(10, false)), }), @@ -113,6 +115,7 @@ const TrackSelection: React.FC = () => { selectionSection: css({ transition: "all 0.05s", + width: "100%", ...( customizedTrackSelection ? {} @@ -126,7 +129,7 @@ const TrackSelection: React.FC = () => { trackSection: css({ "& h3": { - marginBlock: "0", + marginBlock: "1rem", }, }), }; @@ -255,6 +258,7 @@ const AudioTrackItem: React.FC<{ enabledCount, customizable, }) => { + const { t } = useTranslation(); const theme = useTheme(); const dispatch = useAppDispatch(); const imagesMaxWidth = 300; @@ -303,12 +307,7 @@ const AudioTrackItem: React.FC<{ alt="placeholder for audio stream" /> : - placeholder for unavailable audio stream + {t("trackSelection.noAudioAvailable")} } ); @@ -343,6 +342,8 @@ const TrackItem: React.FC<{ ...(flexGapReplacementStyle(20, true)), justifyContent: "space-around", flexWrap: "wrap", + flexGrow: "1", + alignItems: "center", }), images: css({ From fa1e5034381fdec505b5dbf253241ac711bdaa72 Mon Sep 17 00:00:00 2001 From: Arnei Date: Wed, 19 Jun 2024 11:41:25 +0200 Subject: [PATCH 11/15] Import placeholder png as URL We generally can't server assets from the public directory in Opencast, so this changes it so that we import the placeholder png as URL. --- public/placeholder-waveform-empty.png | Bin 6647 -> 0 bytes {public => src/img}/placeholder-waveform.png | Bin src/img/placeholder_waveform.png | Bin 71475 -> 0 bytes src/main/TrackSelection.tsx | 3 ++- 4 files changed, 2 insertions(+), 1 deletion(-) delete mode 100644 public/placeholder-waveform-empty.png rename {public => src/img}/placeholder-waveform.png (100%) delete mode 100644 src/img/placeholder_waveform.png diff --git a/public/placeholder-waveform-empty.png b/public/placeholder-waveform-empty.png deleted file mode 100644 index 01ff81898bb5ba79eecb2b1909dbd0f0b8b518d4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6647 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 PKTen!Ss32XcZvERi_5QN diff --git a/src/main/TrackSelection.tsx b/src/main/TrackSelection.tsx index 8c99fca4e..808089e49 100644 --- a/src/main/TrackSelection.tsx +++ b/src/main/TrackSelection.tsx @@ -26,6 +26,7 @@ import { useTranslation } from "react-i18next"; import { useTheme } from "../themes"; import { outOfBounds } from "../util/utilityFunctions"; import { useAppDispatch, useAppSelector } from "../redux/store"; +import PlaceholderWaveform from "../img/placeholder-waveform.png"; /** * Creates the track selection. @@ -301,7 +302,7 @@ const AudioTrackItem: React.FC<{ > {track.audio_stream.available ? placeholder for audio stream Date: Thu, 27 Jun 2024 10:03:34 +0200 Subject: [PATCH 12/15] Add config "atLeastOneVideo" to track selection Adds a new config option to track selection. Instead of ensuring that at least any one stream remains enabled, this option makes is so that at least any one *video* stream remains enabled. This is useful if your Opencast cannot handle audio only. Also makes this new config option the default. --- editor-settings.toml | 7 +++++++ public/editor-settings.toml | 1 + src/config.ts | 2 ++ src/i18n/locales/en-US.json | 1 + src/main/TrackSelection.tsx | 24 ++++++++++++++++++------ 5 files changed, 29 insertions(+), 6 deletions(-) diff --git a/editor-settings.toml b/editor-settings.toml index ab3a01da7..aec7e6234 100644 --- a/editor-settings.toml +++ b/editor-settings.toml @@ -79,6 +79,13 @@ # Default: true #show = true +# Ensure that at least one video stream remains selected +# Typically, the track selection ensures that at least one video stream +# remains selected. If you would like your users to create selections with +# only audio streams, set this to false. +# Default: true +#atLeastOneVideo = true + #### # Subtitles ## diff --git a/public/editor-settings.toml b/public/editor-settings.toml index 94ad8b6b9..1bedbb77c 100644 --- a/public/editor-settings.toml +++ b/public/editor-settings.toml @@ -28,6 +28,7 @@ show = true [trackSelection] show = true +atLeastOneVideo = true [subtitles] show = true diff --git a/src/config.ts b/src/config.ts index 714e6b0f9..f1177b446 100644 --- a/src/config.ts +++ b/src/config.ts @@ -55,6 +55,7 @@ interface iSettings { }, trackSelection: { show: boolean, + atLeastOneVideo: boolean, }, thumbnail: { show: boolean, @@ -93,6 +94,7 @@ const defaultSettings: iSettings = { }, trackSelection: { show: true, + atLeastOneVideo: true, }, thumbnail: { show: false, diff --git a/src/i18n/locales/en-US.json b/src/i18n/locales/en-US.json index 017531dfa..d160ada6a 100644 --- a/src/i18n/locales/en-US.json +++ b/src/i18n/locales/en-US.json @@ -241,6 +241,7 @@ "trackSelection": { "title": "Select track(s) for processing", "help": "At least one track has to be selected.", + "helpAtLeastOneVideo": "At least one video track has to be selected.", "customizeLabel": "Customize track selection", "videoTracksHeader": "Video tracks", "audioTracksHeader": "Audio tracks", diff --git a/src/main/TrackSelection.tsx b/src/main/TrackSelection.tsx index ab96a94ec..b5f337f59 100644 --- a/src/main/TrackSelection.tsx +++ b/src/main/TrackSelection.tsx @@ -26,6 +26,7 @@ import { useTheme } from "../themes"; import { outOfBounds } from "../util/utilityFunctions"; import { useAppDispatch, useAppSelector } from "../redux/store"; import PlaceholderWaveform from "../img/placeholder-waveform.png"; +import { settings } from "../config"; /** * Creates the track selection. @@ -36,10 +37,20 @@ const TrackSelection: React.FC = () => { // Generate list of tracks const tracks = useAppSelector(selectVideos); - const enabledCount = tracks.reduce( - (memo: number, track: Track) => memo + !!track.video_stream.enabled + !!track.audio_stream.enabled, - 0 - ); + let enabledCount = 0; + if (settings.trackSelection.atLeastOneVideo) { + // Only care about at least one video stream being enabled + enabledCount = tracks.reduce( + (memo: number, track: Track) => memo + !!track.video_stream.enabled, + 0 + ); + } else { + // Make sure that at least one track remains enabled + enabledCount = tracks.reduce( + (memo: number, track: Track) => memo + !!track.video_stream.enabled + !!track.audio_stream.enabled, + 0 + ); + } const images = useAppSelector(selectWaveformImages); const customizedTrackSelection = !!useAppSelector(selectCustomizedTrackSelection); @@ -263,7 +274,8 @@ const AudioTrackItem: React.FC<{ const dispatch = useAppDispatch(); const imagesMaxWidth = 300; const imagesMaxWidthMedium = 150; - const disabled = !customizable || (track.audio_stream.enabled && enabledCount === 1); + const disabled = !customizable || + (!settings.trackSelection.atLeastOneVideo && track.audio_stream.enabled && enabledCount === 1); const imgStyle = css({ height: "54px", // Keep height consistent in case the image does not render @@ -402,7 +414,7 @@ const SelectionAlert: React.FC = ({ return (
- {t("trackSelection.help")} + {settings.trackSelection.atLeastOneVideo ? t("trackSelection.helpAtLeastOneVideo") : t("trackSelection.help")}
{lines.map((line, index) => (
{line}
))} From 6700626a92182af9f38959ee21ed4ac175993563 Mon Sep 17 00:00:00 2001 From: Arnei Date: Thu, 27 Jun 2024 11:04:15 +0200 Subject: [PATCH 13/15] Add config "atMostTwoVideos" to track selection Adds a new config option to track selection. It is true per default and disables the track selection for events with more than two videos. This is because standard Opencast workflows are not equipped to deal with track selection for more than two videos. --- editor-settings.toml | 10 ++++++++-- public/editor-settings.toml | 1 + src/config.ts | 4 ++++ src/i18n/locales/en-US.json | 1 + src/main/TrackSelection.tsx | 23 ++++++++++++++++++++++- 5 files changed, 36 insertions(+), 3 deletions(-) diff --git a/editor-settings.toml b/editor-settings.toml index aec7e6234..c124c77c5 100644 --- a/editor-settings.toml +++ b/editor-settings.toml @@ -81,11 +81,17 @@ # Ensure that at least one video stream remains selected # Typically, the track selection ensures that at least one video stream -# remains selected. If you would like your users to create selections with -# only audio streams, set this to false. +# remains selected. If you would like your users to be able to create selections +# with only audio streams, set this to false. # Default: true #atLeastOneVideo = true +# Disables track selection for events with more than two videos +# If your Opencast can handle track selection for more than two videos, set this +# to false. +# Default: true +#atMostTwoVideos = true + #### # Subtitles ## diff --git a/public/editor-settings.toml b/public/editor-settings.toml index 1bedbb77c..32e761456 100644 --- a/public/editor-settings.toml +++ b/public/editor-settings.toml @@ -29,6 +29,7 @@ show = true [trackSelection] show = true atLeastOneVideo = true +atMostTwoVideos = true [subtitles] show = true diff --git a/src/config.ts b/src/config.ts index f1177b446..99f4ccc65 100644 --- a/src/config.ts +++ b/src/config.ts @@ -56,6 +56,7 @@ interface iSettings { trackSelection: { show: boolean, atLeastOneVideo: boolean, + atMostTwoVideos: boolean, }, thumbnail: { show: boolean, @@ -95,6 +96,7 @@ const defaultSettings: iSettings = { trackSelection: { show: true, atLeastOneVideo: true, + atMostTwoVideos: true, }, thumbnail: { show: false, @@ -405,6 +407,8 @@ const SCHEMA = { }, trackSelection: { show: types.boolean, + atLeastOneVideo: types.boolean, + atMostTwoVideos: types.boolean, }, subtitles: { show: types.boolean, diff --git a/src/i18n/locales/en-US.json b/src/i18n/locales/en-US.json index d160ada6a..a5e8aca2f 100644 --- a/src/i18n/locales/en-US.json +++ b/src/i18n/locales/en-US.json @@ -242,6 +242,7 @@ "title": "Select track(s) for processing", "help": "At least one track has to be selected.", "helpAtLeastOneVideo": "At least one video track has to be selected.", + "atMostTwoVideos": "Track Selection is disabled for events with more than two videos", "customizeLabel": "Customize track selection", "videoTracksHeader": "Video tracks", "audioTracksHeader": "Audio tracks", diff --git a/src/main/TrackSelection.tsx b/src/main/TrackSelection.tsx index b5f337f59..120b0441c 100644 --- a/src/main/TrackSelection.tsx +++ b/src/main/TrackSelection.tsx @@ -33,6 +33,7 @@ import { settings } from "../config"; */ const TrackSelection: React.FC = () => { const { t } = useTranslation(); + const theme = useTheme(); const dispatch = useAppDispatch(); // Generate list of tracks @@ -97,6 +98,13 @@ const TrackSelection: React.FC = () => { dispatch(setCustomizedTrackSelection(!customizedTrackSelection)); }; + const isDisabledBecauseMoreThanTwoVideos = () => { + if (settings.trackSelection.atMostTwoVideos && tracks.length > 2) { + return true; + } + return false; + } + const styles = { trackSelection: css({ display: "flex", @@ -128,7 +136,7 @@ const TrackSelection: React.FC = () => { transition: "all 0.05s", width: "100%", ...( - customizedTrackSelection + customizedTrackSelection || isDisabledBecauseMoreThanTwoVideos() ? {} : { opacity: "0.7", @@ -145,6 +153,19 @@ const TrackSelection: React.FC = () => { }), }; + if (isDisabledBecauseMoreThanTwoVideos()) { + return ( +
+
+
+ + {t("trackSelection.atMostTwoVideos")} + +
+
+ ) + } + return (
From a705bb97fd47c2254f69900c0d1767ef10ad495a Mon Sep 17 00:00:00 2001 From: Arnei Date: Thu, 27 Jun 2024 11:18:05 +0200 Subject: [PATCH 14/15] Change track selection wording for audio tracks This changes wording in the info box to better reflect how the community workflows will handle the given selection. I am aware that this is not what we discussed, but it is the current default and what therefore most users arguably will expect to happen. --- src/i18n/locales/en-US.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/i18n/locales/en-US.json b/src/i18n/locales/en-US.json index a5e8aca2f..4bab03b15 100644 --- a/src/i18n/locales/en-US.json +++ b/src/i18n/locales/en-US.json @@ -253,8 +253,8 @@ "selectionAlertInfoVideo_one": "You have selected 1 video track.", "selectionAlertInfoVideo_other": "You have selected {{count}} video tracks.", "selectionAlertInfoAudio_zero": "You have not selected any audio track.", - "selectionAlertInfoAudio_one": "You have selected 1 audio track.", - "selectionAlertInfoAudio_other": "You have selected {{count}} audio tracks that will be mixed into one.", + "selectionAlertInfoAudio_one": "You have selected 1 audio track. It will be duplicated onto all videos.", + "selectionAlertInfoAudio_other": "You have selected {{count}} audio tracks.", "selectionAlertError": "At least one video or audio track has to be selected." }, From 3ae8f0eb8684d2b088c4abbf5b7f46a581a1838e Mon Sep 17 00:00:00 2001 From: Arnei Date: Thu, 12 Dec 2024 17:31:54 +0100 Subject: [PATCH 15/15] Fix BREAKPOINTS import As suggest by @JulianKniephoff. Fixes import of appkit css styles. --- src/main/TrackSelection.tsx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/TrackSelection.tsx b/src/main/TrackSelection.tsx index 120b0441c..f1cde38e8 100644 --- a/src/main/TrackSelection.tsx +++ b/src/main/TrackSelection.tsx @@ -14,7 +14,7 @@ import { setVideoEnabled, } from "../redux/videoSlice"; import { - BREAKPOINT_MEDIUM, + BREAKPOINTS, backgroundBoxStyle, checkboxStyle, titleStyle, @@ -243,7 +243,7 @@ const VideoTrackItem: React.FC<{ width: "100%", opacity: track.video_stream.enabled ? "1" : "0.5", maxWidth: `${imagesMaxWidthMedium}px`, - [`@media (min-width: ${BREAKPOINT_MEDIUM}px)`]: { + [`@media (min-width: ${BREAKPOINTS.medium}px)`]: { "&": { maxWidth: `${imagesMaxWidth}px` }, }, }); @@ -304,7 +304,7 @@ const AudioTrackItem: React.FC<{ filter: `${theme.invert_wave}`, color: `${theme.inverted_text}`, maxWidth: `${imagesMaxWidthMedium}px`, - [`@media (min-width: ${BREAKPOINT_MEDIUM}px)`]: { + [`@media (min-width: ${BREAKPOINTS.medium}px)`]: { "&": { maxWidth: `${imagesMaxWidth}px` }, }, });