FEATURE: propagate improvements from CLI and web-API versions to web-frontend
This commit is contained in:
@@ -1,5 +1,3 @@
|
||||
// web/frontend/src/stores/optionsStore.ts
|
||||
|
||||
import { create } from 'zustand'
|
||||
import { SplitOptions, ContainerInfo, CodecInfo } from '../types'
|
||||
import {
|
||||
@@ -18,24 +16,16 @@ import {
|
||||
DEFAULT_NUMBER_TRACKS,
|
||||
DEFAULT_REPLACE_BAD_CHARS,
|
||||
DEFAULT_SKIP_EXISTING,
|
||||
DEFAULT_TRANSCODE_TO,
|
||||
DEFAULT_TRACKLIST_FORMAT,
|
||||
} from '../constants/generated'
|
||||
|
||||
// Extend the state
|
||||
interface OptionsState {
|
||||
options: SplitOptions
|
||||
containers: ContainerInfo[]
|
||||
codecs: CodecInfo[]
|
||||
setOptions: (options: Partial<SplitOptions>) => void
|
||||
setContainers: (containers: ContainerInfo[]) => void
|
||||
setCodecs: (codecs: CodecInfo[]) => void
|
||||
reset: () => void
|
||||
}
|
||||
|
||||
// We use DEFAULT_FORMAT only as a fallback; container default is null (auto-detect)
|
||||
const DEFAULT_OPTIONS: SplitOptions = {
|
||||
format: DEFAULT_FORMAT,
|
||||
transcode_to: DEFAULT_TRANSCODE_TO ?? '',
|
||||
container: null,
|
||||
audio_codec: 'copy',
|
||||
video_codec: 'copy',
|
||||
subtitle_codec: 'copy',
|
||||
video_quality: null,
|
||||
drop_video: DEFAULT_DROP_VIDEO,
|
||||
drop_subs: DEFAULT_DROP_SUBS,
|
||||
number_tracks: DEFAULT_NUMBER_TRACKS,
|
||||
@@ -53,20 +43,35 @@ const DEFAULT_OPTIONS: SplitOptions = {
|
||||
tracklist_format: DEFAULT_TRACKLIST_FORMAT,
|
||||
}
|
||||
|
||||
interface OptionsState {
|
||||
options: SplitOptions
|
||||
containers: ContainerInfo[]
|
||||
codecs: CodecInfo[]
|
||||
compatibility: Record<string, { audio: string[] | null; video: string[] | null }>
|
||||
setOptions: (newOptions: Partial<SplitOptions>) => void
|
||||
setContainers: (containers: ContainerInfo[]) => void
|
||||
setCodecs: (codecs: CodecInfo[]) => void
|
||||
setCompatibility: (compat: Record<string, { audio: string[] | null; video: string[] | null }>) => void
|
||||
reset: () => void
|
||||
}
|
||||
|
||||
export const useOptionsStore = create<OptionsState>((set) => ({
|
||||
options: { ...DEFAULT_OPTIONS },
|
||||
containers: [],
|
||||
codecs: [],
|
||||
compatibility: {},
|
||||
setOptions: (newOptions) =>
|
||||
set((state) => ({
|
||||
options: { ...state.options, ...newOptions },
|
||||
})),
|
||||
setContainers: (containers) => set({ containers }),
|
||||
setCodecs: (codecs) => set({ codecs }),
|
||||
setCompatibility: (compatibility) => set({ compatibility }),
|
||||
reset: () =>
|
||||
set({
|
||||
options: { ...DEFAULT_OPTIONS },
|
||||
containers: [],
|
||||
codecs: [],
|
||||
compatibility: {},
|
||||
}),
|
||||
}))
|
||||
|
||||
Reference in New Issue
Block a user