diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index b452f595..cf472c6c 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -47,8 +47,10 @@ jobs: python-version: ${{ env.PYTHON_VERSION }} - name: Install uv - uses: astral-sh/setup-uv@v4 + uses: astral-sh/setup-uv@v6.7 with: + enable-cache: true + save-cache: true version: "latest" - name: Install Python dependencies @@ -160,7 +162,7 @@ jobs: echo "APP_SHA=${SHA}" >> "$GITHUB_ENV" echo "APP_DATE=${DATE}" >> "$GITHUB_ENV" echo "APP_BRANCH=${BRANCH}" >> "$GITHUB_ENV" - + sed -i \ -e "s/^APP_VERSION = \".*\"/APP_VERSION = \"${VERSION}\"/" \ -e "s/^APP_COMMIT_SHA = \".*\"/APP_COMMIT_SHA = \"${SHA}\"/" \ diff --git a/app/library/config.py b/app/library/config.py index bb744967..9c3ef4fb 100644 --- a/app/library/config.py +++ b/app/library/config.py @@ -45,6 +45,9 @@ class Config(metaclass=Singleton): temp_path: str = "/tmp" """The path to the temporary directory.""" + simple_mode: bool = False + """Enable simple mode.""" + temp_keep: bool = False """Keep temporary files after the download is complete.""" @@ -244,6 +247,7 @@ class Config(metaclass=Singleton): "prevent_premiere_live", "temp_disabled", "allow_internal_urls", + "simple_mode", ) "The variables that are booleans." @@ -259,6 +263,7 @@ class Config(metaclass=Singleton): "default_preset", "instance_title", "console_enabled", + "simple_mode", "browser_control_enabled", "file_logging", "base_path", diff --git a/ui/app/assets/css/style.css b/ui/app/assets/css/style.css index 17fefacd..cd841efe 100644 --- a/ui/app/assets/css/style.css +++ b/ui/app/assets/css/style.css @@ -358,6 +358,10 @@ div.is-centered { justify-content: center; } +.is-overflow-visible { + overflow: visible !important +} + .modal-content-max { width: calc(100% - 20px); max-width: 1344px; diff --git a/ui/app/components/ConditionForm.vue b/ui/app/components/ConditionForm.vue index db50016d..93b3bae6 100644 --- a/ui/app/components/ConditionForm.vue +++ b/ui/app/components/ConditionForm.vue @@ -268,6 +268,7 @@ import { useStorage } from '@vueuse/core' import TextareaAutocomplete from '~/components/TextareaAutocomplete.vue' import type { AutoCompleteOptions } from '~/types/autocomplete'; import type { ConditionItem, ImportedConditionItem } from '~/types/conditions' +import {useConfirm} from '~/composables/useConfirm' const emitter = defineEmits<{ (e: 'cancel'): void @@ -410,7 +411,7 @@ const importItem = async (): Promise => { return } - if ((form.filter || form.cli || Object.keys(form.extras).length > 0) && !(await box.confirm('Overwrite the current form fields?', true))) { + if ((form.filter || form.cli || Object.keys(form.extras).length > 0) && !(await box.confirm('Overwrite the current form fields?'))) { return } diff --git a/ui/app/components/History.vue b/ui/app/components/History.vue index fa564054..685525aa 100644 --- a/ui/app/components/History.vue +++ b/ui/app/components/History.vue @@ -450,6 +450,7 @@ import moment from 'moment' import { useStorage } from '@vueuse/core' import type { StoreItem } from '~/types/store' +import {useConfirm} from '~/composables/useConfirm' const emitter = defineEmits<{ (e: 'getInfo', url: string, preset: string, cli: string): void @@ -588,7 +589,7 @@ const deleteSelectedItems = async () => { if (true === config.app.remove_files) { msg += ' This will remove any associated files if they exists.' } - if (false === (await box.confirm(msg, config.app.remove_files))) { + if (false === (await box.confirm(msg))) { return } for (const key in selectedElms.value) { @@ -750,7 +751,7 @@ const removeItem = async (item: StoreItem) => { if (item.status === 'finished' && config.app.remove_files) { msg += ' This will remove any associated files if they exists.' } - if (false === (await box.confirm(msg, Boolean(item.filename && config.app.remove_files)))) { + if (false === (await box.confirm(msg))) { return false } diff --git a/ui/app/components/NotificationForm.vue b/ui/app/components/NotificationForm.vue index df4bb096..9497cd4a 100644 --- a/ui/app/components/NotificationForm.vue +++ b/ui/app/components/NotificationForm.vue @@ -308,6 +308,7 @@ diff --git a/ui/app/components/Simple.vue b/ui/app/components/Simple.vue new file mode 100644 index 00000000..24bdb36d --- /dev/null +++ b/ui/app/components/Simple.vue @@ -0,0 +1,764 @@ + + + + + diff --git a/ui/app/components/TaskForm.vue b/ui/app/components/TaskForm.vue index e98645b6..157d5499 100644 --- a/ui/app/components/TaskForm.vue +++ b/ui/app/components/TaskForm.vue @@ -307,6 +307,7 @@ import { CronExpressionParser } from 'cron-parser' import TextareaAutocomplete from '~/components/TextareaAutocomplete.vue' import type { AutoCompleteOptions } from '~/types/autocomplete' import type { exported_task, task_item } from '~/types/tasks' +import {useConfirm} from '~/composables/useConfirm' const props = defineProps<{ reference?: string | null | undefined @@ -408,7 +409,7 @@ const importItem = async (): Promise => { } if (form.url || form.timer) { - if (false === (await box.confirm('Overwrite the current form fields?', true))) { + if (false === (await box.confirm('Overwrite the current form fields?'))) { return } } diff --git a/ui/app/composables/useConfirm.ts b/ui/app/composables/useConfirm.ts index 7286ca41..e3f8aa71 100644 --- a/ui/app/composables/useConfirm.ts +++ b/ui/app/composables/useConfirm.ts @@ -1,42 +1,29 @@ -import { useStorage } from '@vueuse/core' -import { useDialog } from './useDialog' +import { useDialog, type ConfirmOptions, type AlertOptions, type PromptOptions } from './useDialog' const dialog = useDialog() -const reduceConfirm = useStorage('reduce_confirm', false) - -const confirm = async (msg: string, force: boolean = false) => { - if (false === force && true === reduceConfirm.value) { - return true - } - - const { status } = await dialog.confirmDialog({ +const confirm = async (msg: string, opts: ConfirmOptions = {}) => { + const { status } = await dialog.confirmDialog(Object.assign({ title: 'Please Confirm', message: msg, cancelText: 'Cancel', confirmText: 'OK', - }) + } as ConfirmOptions, opts || {})) return status } -const alert = async (msg: string) => { - const { status } = await dialog.alertDialog({ +const alert = async (msg: string, opts: AlertOptions = {}) => { + const { status } = await dialog.alertDialog(Object.assign({ title: 'Alert', message: msg, confirmText: 'OK', - }) + } as AlertOptions, opts || {})) return status } -const prompt = async (msg: string, defaultValue: string = '') => { - const { status, value } = await dialog.promptDialog({ - title: 'Input Required', - message: msg, - initial: defaultValue, - cancelText: 'Cancel', - confirmText: 'OK', - }) +const prompt = async (msg: string, opts: PromptOptions = {}) => { + const { status, value } = await dialog.promptDialog(Object.assign({ message: msg } as PromptOptions, opts || {})) if (status) { return value @@ -45,6 +32,4 @@ const prompt = async (msg: string, defaultValue: string = '') => { return null } -export default function useConfirm() { - return { confirm, alert, prompt, reduceConfirm } -} +export const useConfirm = () => ({ confirm, alert, prompt }) diff --git a/ui/app/layouts/default.vue b/ui/app/layouts/default.vue index cd9ef5d5..5ec19b7a 100644 --- a/ui/app/layouts/default.vue +++ b/ui/app/layouts/default.vue @@ -1,169 +1,180 @@