diff --git a/.gitignore b/.gitignore index 0179ec38..7701ab66 100644 --- a/.gitignore +++ b/.gitignore @@ -39,3 +39,4 @@ build version.txt test_impl.py ./eslint.config.js +.pytest_cache diff --git a/ui/app/components/Simple.vue b/ui/app/components/Simple.vue index a24e7dc9..a1939e1b 100644 --- a/ui/app/components/Simple.vue +++ b/ui/app/components/Simple.vue @@ -13,8 +13,9 @@
-
@@ -29,7 +30,7 @@
-
+
+
+
+ +
+
+ +
+
+
@@ -213,7 +228,8 @@ const videoItem = ref(null) const formUrl = ref('') const formPreset = ref<{ preset: string }>({ preset: app.value.default_preset || '' }) const addInProgress = ref(false) -const showPresets = ref(false) +const showExtras = ref(false) +const dlFields = useStorage>('dl_fields', {}) const show_thumbnail = useStorage('show_thumbnail', true) const sortByNewest = (items: StoreItem[]): StoreItem[] => items.slice().sort((a, b) => (b.timestamp ?? 0) - (a.timestamp ?? 0)) @@ -247,9 +263,50 @@ const addDownload = async (): Promise => { return } + let cli = '' + + const dlFieldsExtra = ['--no-download-archive'] + + const is_valid = (dl_field: string): boolean => { + if (dlFieldsExtra.includes(dl_field)) { + return true + } + + if (configStore.dl_fields && configStore.dl_fields.length > 0) { + return configStore.dl_fields.some(f => dl_field === f.field) + } + + return false + } + + if (dlFields.value && Object.keys(dlFields.value).length > 0) { + const joined = [] + for (const [key, value] of Object.entries(dlFields.value)) { + if (false === is_valid(key)) { + continue + } + + if ([undefined, null, '', false].includes(value as any)) { + continue + } + + const keyRegex = new RegExp(`(^|\\s)${key}(\\s|$)`) + if (cli && keyRegex.test(cli)) { + continue + } + + joined.push(true === value ? `${key}` : `${key} ${value}`) + } + + if (joined.length > 0) { + cli = joined.join(' ') + } + } + const payload: item_request[] = [{ url, preset: formPreset.value.preset || app.value.default_preset, + cli: cli || '', auto_start: true, }] @@ -274,6 +331,7 @@ const addDownload = async (): Promise => { formUrl.value = '' formPreset.value.preset = app.value.default_preset || '' + dlFields.value = {} } catch (error) { const message = error instanceof Error ? error.message : 'Failed to add download.' toast.error(message) @@ -544,6 +602,9 @@ const showMessage = (item: StoreItem) => { return (item.msg?.length || 0) > 0 } +// eslint-disable-next-line vue/no-side-effects-in-computed-properties +const sortedDLFields = computed(() => configStore.dl_fields.sort((a, b) => (a.order || 0) - (b.order || 0))) + const connectionStatusColor = computed(() => { switch (socketStore.connectionStatus) { case 'connected':