diff --git a/frontend/src/api/loader/loadAppsettingsConfig.ts b/frontend/src/api/loader/loadAppsettingsConfig.ts index 0cad1885..f83cbc19 100644 --- a/frontend/src/api/loader/loadAppsettingsConfig.ts +++ b/frontend/src/api/loader/loadAppsettingsConfig.ts @@ -2,27 +2,27 @@ import APIClient from '../../functions/APIClient'; export type AppSettingsConfigType = { subscriptions: { - channel_size: number; - live_channel_size: number; - shorts_channel_size: number; + channel_size: number | null; + live_channel_size: number | null; + shorts_channel_size: number | null; auto_start: boolean; }; downloads: { - limit_speed: number | undefined; - sleep_interval: number; - autodelete_days: number; - format: string | undefined; - format_sort: string | undefined; + limit_speed: number | null; + sleep_interval: number | null; + autodelete_days: number | null; + format: string | null; + format_sort: string | null; add_metadata: boolean; add_thumbnail: boolean; - subtitle: string | undefined; - subtitle_source: boolean | string; + subtitle: string | null; + subtitle_source: string | null; subtitle_index: boolean; - comment_max: string | undefined; + comment_max: string | null; comment_sort: string; cookie_import: boolean; - throttledratelimit: number | undefined; - extractor_lang: string | undefined; + throttledratelimit: number | null; + extractor_lang: string | null; integrate_ryd: boolean; integrate_sponsorblock: boolean; }; diff --git a/frontend/src/components/InputConfig.tsx b/frontend/src/components/InputConfig.tsx index e4ab0d6d..5c2b1800 100644 --- a/frontend/src/components/InputConfig.tsx +++ b/frontend/src/components/InputConfig.tsx @@ -5,7 +5,7 @@ type InputTextProps = { setValue: | React.Dispatch> | React.Dispatch>; - oldValue: string | number | undefined; + oldValue: string | number | null; updateCallback: (arg0: string, arg1: string | boolean | number | null) => void; }; @@ -36,9 +36,7 @@ const InputConfig = ({ type, name, value, setValue, oldValue, updateCallback }: )} - {oldValue !== undefined && ( - - )} + {oldValue !== null && } ); diff --git a/frontend/src/pages/ChannelAbout.tsx b/frontend/src/pages/ChannelAbout.tsx index e9c6460f..922a2e6c 100644 --- a/frontend/src/pages/ChannelAbout.tsx +++ b/frontend/src/pages/ChannelAbout.tsx @@ -60,16 +60,20 @@ const ChannelAbout = () => { const channelResponse = await loadChannelById(channelId); setChannelResponse(channelResponse); - setDownloadFormat(channelResponse?.data?.channel_overwrites?.download_format || null); - setAutoDeleteAfter(channelResponse?.data?.channel_overwrites?.autodelete_days); - setIndexPlaylists(channelResponse?.data?.channel_overwrites?.index_playlists || false); - setEnableSponsorblock(channelResponse?.data?.channel_overwrites?.integrate_sponsorblock); - setPageSizeVideo(channelResponse?.data?.channel_overwrites?.subscriptions_channel_size); + setDownloadFormat(channelResponse?.data?.channel_overwrites?.download_format ?? null); + setAutoDeleteAfter(channelResponse?.data?.channel_overwrites?.autodelete_days ?? null); + setIndexPlaylists(channelResponse?.data?.channel_overwrites?.index_playlists ?? null); + setEnableSponsorblock( + channelResponse?.data?.channel_overwrites?.integrate_sponsorblock ?? null, + ); + setPageSizeVideo( + channelResponse?.data?.channel_overwrites?.subscriptions_channel_size ?? null, + ); setPageSizeShorts( - channelResponse?.data?.channel_overwrites?.subscriptions_shorts_channel_size, + channelResponse?.data?.channel_overwrites?.subscriptions_shorts_channel_size ?? null, ); setPageSizeStreams( - channelResponse?.data?.channel_overwrites?.subscriptions_live_channel_size, + channelResponse?.data?.channel_overwrites?.subscriptions_live_channel_size ?? null, ); setRefresh(false); @@ -244,7 +248,7 @@ const ChannelAbout = () => { name="download_format" value={downloadFormat} setValue={setDownloadFormat} - oldValue={channel.channel_overwrites?.download_format} + oldValue={channel.channel_overwrites?.download_format ?? null} updateCallback={handleUpdateConfig} /> @@ -257,7 +261,7 @@ const ChannelAbout = () => { name="autodelete_days" value={autoDeleteAfter} setValue={setAutoDeleteAfter} - oldValue={channel.channel_overwrites?.autodelete_days} + oldValue={channel.channel_overwrites?.autodelete_days ?? null} updateCallback={handleUpdateConfig} /> @@ -300,7 +304,7 @@ const ChannelAbout = () => {

- {enableSponsorblock !== undefined ? ( + {enableSponsorblock !== null ? (
{ name="subscriptions_channel_size" value={pageSizeVideo} setValue={setPageSizeVideo} - oldValue={channel.channel_overwrites?.subscriptions_channel_size} + oldValue={channel.channel_overwrites?.subscriptions_channel_size ?? null} updateCallback={handleUpdateConfig} />
@@ -358,7 +362,7 @@ const ChannelAbout = () => { name="subscriptions_shorts_channel_size" value={pageSizeShorts} setValue={setPageSizeShorts} - oldValue={channel.channel_overwrites?.subscriptions_shorts_channel_size} + oldValue={channel.channel_overwrites?.subscriptions_shorts_channel_size ?? null} updateCallback={handleUpdateConfig} />
@@ -371,7 +375,7 @@ const ChannelAbout = () => { name="subscriptions_live_channel_size" value={pageSizeStreams} setValue={setPageSizeStreams} - oldValue={channel.channel_overwrites?.subscriptions_live_channel_size} + oldValue={channel.channel_overwrites?.subscriptions_live_channel_size ?? null} updateCallback={handleUpdateConfig} />
diff --git a/frontend/src/pages/Channels.tsx b/frontend/src/pages/Channels.tsx index c1c85d31..e8d74c03 100644 --- a/frontend/src/pages/Channels.tsx +++ b/frontend/src/pages/Channels.tsx @@ -19,7 +19,7 @@ type ChannelOverwritesType = { download_format?: string; autodelete_days?: number; index_playlists?: boolean; - integrate_sponsorblock?: boolean; + integrate_sponsorblock?: boolean | null; subscriptions_channel_size?: number; subscriptions_live_channel_size?: number; subscriptions_shorts_channel_size?: number; diff --git a/frontend/src/pages/SettingsApplication.tsx b/frontend/src/pages/SettingsApplication.tsx index d5130ddc..01c766d7 100644 --- a/frontend/src/pages/SettingsApplication.tsx +++ b/frontend/src/pages/SettingsApplication.tsx @@ -65,12 +65,12 @@ const SettingsApplication = () => { // Subtitles const [subtitleLang, setSubtitleLang] = useState(null); - const [subtitleSource, setSubtitleSource] = useState(''); + const [subtitleSource, setSubtitleSource] = useState(null); const [indexSubtitles, setIndexSubtitles] = useState(false); // Comments const [commentsMax, setCommentsMax] = useState(null); - const [commentsSort, setCommentsSort] = useState(''); + const [commentsSort, setCommentsSort] = useState(''); // Cookie // const [cookieImport, setCookieImport] = useState(false); @@ -93,42 +93,42 @@ const SettingsApplication = () => { const apiToken = await loadApiToken(); // Subscriptions - setVideoPageSize(appSettingsConfig?.subscriptions.channel_size); - setLivePageSize(appSettingsConfig?.subscriptions.live_channel_size); - setShortPageSize(appSettingsConfig?.subscriptions.shorts_channel_size); - setIsAutostart(appSettingsConfig?.subscriptions.auto_start); + setVideoPageSize(appSettingsConfig.subscriptions.channel_size); + setLivePageSize(appSettingsConfig.subscriptions.live_channel_size); + setShortPageSize(appSettingsConfig.subscriptions.shorts_channel_size); + setIsAutostart(appSettingsConfig.subscriptions.auto_start); // Downloads - setCurrentDownloadSpeed(appSettingsConfig?.downloads.limit_speed || null); - setCurrentThrottledRate(appSettingsConfig?.downloads.throttledratelimit || null); - setCurrentScrapingSleep(appSettingsConfig?.downloads.sleep_interval); - setCurrentAutodelete(appSettingsConfig?.downloads.autodelete_days); + setCurrentDownloadSpeed(appSettingsConfig.downloads.limit_speed); + setCurrentThrottledRate(appSettingsConfig.downloads.throttledratelimit); + setCurrentScrapingSleep(appSettingsConfig.downloads.sleep_interval); + setCurrentAutodelete(appSettingsConfig.downloads.autodelete_days); // Download Format - setDownloadsFormat(appSettingsConfig?.downloads.format || null); - setDownloadsFormatSort(appSettingsConfig?.downloads.format_sort || null); - setDownloadsExtractorLang(appSettingsConfig?.downloads.extractor_lang || null); - setEmbedMetadata(appSettingsConfig?.downloads.add_metadata); - setEmbedThumbnail(appSettingsConfig?.downloads.add_thumbnail); + setDownloadsFormat(appSettingsConfig.downloads.format); + setDownloadsFormatSort(appSettingsConfig.downloads.format_sort); + setDownloadsExtractorLang(appSettingsConfig.downloads.extractor_lang); + setEmbedMetadata(appSettingsConfig.downloads.add_metadata); + setEmbedThumbnail(appSettingsConfig.downloads.add_thumbnail); // Subtitles - setSubtitleLang(appSettingsConfig?.downloads.subtitle || null); - setSubtitleSource(appSettingsConfig?.downloads.subtitle_source.toString()); - setIndexSubtitles(appSettingsConfig?.downloads.subtitle_index); + setSubtitleLang(appSettingsConfig.downloads.subtitle); + setSubtitleSource(appSettingsConfig.downloads.subtitle_source); + setIndexSubtitles(appSettingsConfig.downloads.subtitle_index); // Comments - setCommentsMax(appSettingsConfig?.downloads.comment_max || null); - setCommentsSort(appSettingsConfig?.downloads.comment_sort); + setCommentsMax(appSettingsConfig.downloads.comment_max); + setCommentsSort(appSettingsConfig.downloads.comment_sort); // Cookie // setCookieImport(appSettingsConfig?.downloads.cookie_import); // Integrations - setDownloadDislikes(appSettingsConfig?.downloads.integrate_ryd); - setEnableSponsorBlock(appSettingsConfig?.downloads.integrate_sponsorblock); + setDownloadDislikes(appSettingsConfig.downloads.integrate_ryd); + setEnableSponsorBlock(appSettingsConfig.downloads.integrate_sponsorblock); // Snapshots - setEnableSnapshots(appSettingsConfig?.application.enable_snapshot); + setEnableSnapshots(appSettingsConfig.application.enable_snapshot); setResponse({ snapshots: snapshotResponse, @@ -166,447 +166,73 @@ const SettingsApplication = () => {

Application Configurations

-
-
-

Subscriptions

-

Disable shorts or streams by setting their page size to 0 (zero).

-
-
-

Videos page size

-
- -
-
-
-

Live Streams page size

-
- -
-
-
-

Shorts page size

-
- -
-
-
-

Autostart download subscriptions

-
-
-
- { - handleUpdateConfig('subscriptions.auto_start', event.target.checked || false); - }} - /> - {!isAutostart && ( - - )} - {isAutostart && ( - - )} -
-
-
-
-
-

Downloads

-
-
-

Download Speed limit

-
- -
-
-
-

Throttled rate limit

-
- -
-
-
-

Sleep interval

-
- -
-
-
-

Auto delete watched videos after x days

-
- -
-
-
-

Download Format

-
-
-

Limit video and audio quality format

-
- -
-
-
-

Sort download formats

-
- -
-
-
-

Extractor Language

-
- -
-
-
-

Embed metadata

-
-
-
- { - handleUpdateConfig('downloads.add_metadata', event.target.checked || false); - }} - /> - {!embedMetadata && ( - - )} - {embedMetadata && ( - - )} -
-
-
-
-
-

Embed Thumbnail

-
-
-
- { - handleUpdateConfig('downloads.add_thumbnail', event.target.checked || false); - }} - /> - {!embedThumbnail && ( - - )} - {embedThumbnail && ( - - )} -
-
-
-
-
-

Subtitles

-
-
-

Choose subtitle language

-
- -
- {appSettingsConfig?.downloads.subtitle && ( - <> -
-
-

Enable auto generated subtitles

-
-
-
- { - handleUpdateConfig( - 'downloads.subtitle_source', - event.target.checked ? 'auto' : 'user', - ); - }} - /> - {subtitleSource === 'user' && ( - - )} - {subtitleSource === 'auto' && ( - - )} -
-
-
-
-
-

Enable subtitle index

-
-
-
- { - handleUpdateConfig('downloads.subtitle_index', event.target.checked); - }} - /> - {!indexSubtitles && ( - - )} - {indexSubtitles && ( - - )} -
-
-
- - )} -
-
-

Comments

-
-
-

Index comments

-
- -
- {appSettingsConfig?.downloads.comment_max && ( + {appSettingsConfig && ( +
+
+

Subscriptions

+

Disable shorts or streams by setting their page size to 0 (zero).

-

Comment sort method

+

Videos page size

+ +
+
- +

Live Streams page size

+
- )} -
-
- -
-
-
-

Integrations

-
-
-

API token

-
-
- {showApiToken && } - - {showApiToken && ( -
-
-
-
-

Enable returnyoutubedislike

-
-
-
- { - handleUpdateConfig('downloads.integrate_ryd', event.target.checked); - }} - /> - {!downloadDislikes && ( - - )} - {downloadDislikes && ( - - )} +
+
+

Shorts page size

+
-
-
-
-

Enable Sponsorblock

-
-
-
- { - handleUpdateConfig('downloads.integrate_sponsorblock', event.target.checked); - }} - /> - {!enableSponsorBlock && ( - - )} - {enableSponsorBlock && ( - - )} +
+
+

Autostart download subscriptions

-
-
-
-
-

Snapshots

-
-
-

Enable Index Snapshot

-
-
{ - handleUpdateConfig('application.enable_snapshot', event.target.checked); + handleUpdateConfig( + 'subscriptions.auto_start', + event.target.checked || false, + ); }} /> - {!enableSnapshots && ( + {!isAutostart && ( )} - {enableSnapshots && ( + {isAutostart && ( @@ -615,58 +241,444 @@ const SettingsApplication = () => {
-
-
-
+
+

Downloads

+
- {appSettingsConfig?.application.enable_snapshot && snapshots && ( - <> -

- Create next snapshot:{' '} - {snapshots.next_exec_str}, - snapshots expire after{' '} - {snapshots.expire_after} - .
- {isSnapshotQueued && Snapshot in progress} - {!isSnapshotQueued && ( -

+ +
+
+
+

Throttled rate limit

+
+ +
+
+
+

Sleep interval

+
+ +
+
+
+

Auto delete watched videos after x days

+
+ +
+
+
+

Download Format

+
+
+

Limit video and audio quality format

+
+ +
+
+
+

Sort download formats

+
+ +
+
+
+

Extractor Language

+
+ +
+
+
+

Embed metadata

+
+
+
+ { + handleUpdateConfig('downloads.add_metadata', event.target.checked || false); + }} + /> + {!embedMetadata && ( + + )} + {embedMetadata && ( + + )} +
+
+
+
+
+

Embed Thumbnail

+
+
+
+ { + handleUpdateConfig( + 'downloads.add_thumbnail', + event.target.checked || false, + ); + }} + /> + {!embedThumbnail && ( + + )} + {embedThumbnail && ( + + )} +
+
+
+
+
+

Subtitles

+
+
+

Choose subtitle language

+
+ +
+ {appSettingsConfig?.downloads.subtitle && ( + <> +
+
+

Enable auto generated subtitles

+
+
+
+ { + handleUpdateConfig( + 'downloads.subtitle_source', + event.target.checked ? 'auto' : 'user', + ); + }} + /> + {subtitleSource === 'user' && ( + )} -

-
- {restoringSnapshot &&

Snapshot restore started

} - {!restoringSnapshot && - snapshots.snapshots && - snapshots.snapshots.map(snapshot => { - return ( -

-

+
+
+
+
+

Enable subtitle index

+
+
+
+ { + handleUpdateConfig('downloads.subtitle_index', event.target.checked); + }} + /> + {!indexSubtitles && ( + + )} + {indexSubtitles && ( + + )} +
+
+
+ + )} +
+
+

Comments

+
+
+

Index comments

+
+ +
+ {appSettingsConfig?.downloads.comment_max && ( +
+
+

Comment sort method

+
+
+ +
+
+ )} +
+
+ +
+
+
+

Integrations

+
+
+

API token

+
+
+ {showApiToken && } + + {showApiToken && ( +
+
+
+

Enable returnyoutubedislike

+
+
+
+ { + handleUpdateConfig('downloads.integrate_ryd', event.target.checked); + }} + /> + {!downloadDislikes && ( + + )} + {downloadDislikes && ( + + )} +
+
+
+
+
+

Enable Sponsorblock

+
+
+
+ { + handleUpdateConfig( + 'downloads.integrate_sponsorblock', + event.target.checked, + ); + }} + /> + {!enableSponsorBlock && ( + + )} + {enableSponsorBlock && ( + + )} +
+
+
+
+
+

Snapshots

+
+
+

Enable Index Snapshot

+
+
+
+
+ { + handleUpdateConfig('application.enable_snapshot', event.target.checked); + }} + /> + {!enableSnapshots && ( + + )} + {enableSnapshots && ( + + )} +
+
+
+
+
+
+
+
+ {appSettingsConfig?.application.enable_snapshot && snapshots && ( + <> +

+ Create next snapshot:{' '} + {snapshots.next_exec_str}, + snapshots expire after{' '} + {snapshots.expire_after} + .
+ {isSnapshotQueued && Snapshot in progress} + {!isSnapshotQueued && ( +

+
+
-
+ )}