diff --git a/backend/appsettings/serializers.py b/backend/appsettings/serializers.py index eadd2455..e0547109 100644 --- a/backend/appsettings/serializers.py +++ b/backend/appsettings/serializers.py @@ -55,6 +55,7 @@ class AppConfigDownloadsSerializer( choices=["top", "new"], allow_null=True ) cookie_import = serializers.BooleanField() + pot_provider_url = serializers.CharField(allow_null=True) potoken = serializers.BooleanField() throttledratelimit = serializers.IntegerField(allow_null=True) extractor_args = serializers.CharField(allow_null=True) diff --git a/backend/appsettings/src/config.py b/backend/appsettings/src/config.py index 9458d09d..efc44327 100644 --- a/backend/appsettings/src/config.py +++ b/backend/appsettings/src/config.py @@ -42,6 +42,7 @@ class DownloadsConfigType(TypedDict): comment_max: str | None comment_sort: Literal["top", "new"] | None cookie_import: bool + pot_provider_url: str | None potoken: bool throttledratelimit: int | None extractor_args: str | None @@ -93,6 +94,7 @@ class AppConfig: "comment_max": None, "comment_sort": "top", "cookie_import": False, + "pot_provider_url": None, "potoken": False, "throttledratelimit": None, "extractor_args": None, diff --git a/frontend/src/api/loader/loadAppsettingsConfig.ts b/frontend/src/api/loader/loadAppsettingsConfig.ts index 46d1835f..97b2af04 100644 --- a/frontend/src/api/loader/loadAppsettingsConfig.ts +++ b/frontend/src/api/loader/loadAppsettingsConfig.ts @@ -23,6 +23,7 @@ export type AppSettingsConfigType = { comment_max: string | null; comment_sort: string; cookie_import: boolean; + pot_provider_url: string | null; potoken: boolean; throttledratelimit: number | null; extractor_args: string | null; diff --git a/frontend/src/pages/SettingsApplication.tsx b/frontend/src/pages/SettingsApplication.tsx index 3d678f00..50f9f526 100644 --- a/frontend/src/pages/SettingsApplication.tsx +++ b/frontend/src/pages/SettingsApplication.tsx @@ -74,6 +74,7 @@ const SettingsApplication = () => { const [showCookieForm, setShowCookieForm] = useState(false); const [poTokenFormData, setPoTokenFormData] = useState('web+'); const [showPoTokenForm, setShowPoTokenForm] = useState(false); + const [potProviderUrl, setPotProviderUrl] = useState(null); // Integrations const [showApiToken, setShowApiToken] = useState(false); @@ -128,6 +129,9 @@ const SettingsApplication = () => { setCommentsMax(appSettingsConfigData?.downloads.comment_max || null); setCommentsSort(appSettingsConfigData?.downloads.comment_sort || ''); + // Cookie + setPotProviderUrl(appSettingsConfigData?.downloads.pot_provider_url || null); + // Integrations setDownloadDislikes(appSettingsConfigData?.downloads.integrate_ryd || false); setEnableSponsorBlock(appSettingsConfigData?.downloads.integrate_sponsorblock || false); @@ -748,6 +752,16 @@ const SettingsApplication = () => { PO guide +
  • + The POT Provider URL (bgutil-ytdlp-pot-provider) running external to + tubearchivist. Make sure to review{' '} + + README.md + +
  • )} @@ -847,6 +861,19 @@ const SettingsApplication = () => { )} +
    +
    +

    POT Provider URL

    +
    + +

    Integrations

    diff --git a/frontend/src/stores/AppSettingsStore.ts b/frontend/src/stores/AppSettingsStore.ts index e1008c06..04f5979b 100644 --- a/frontend/src/stores/AppSettingsStore.ts +++ b/frontend/src/stores/AppSettingsStore.ts @@ -30,6 +30,7 @@ export const useAppSettingsStore = create(set => ({ comment_max: null, comment_sort: 'asc', cookie_import: false, + pot_provider_url: null, potoken: false, throttledratelimit: null, extractor_args: null,