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 ? (
@@ -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).
-
-
-
-
Live Streams page size
-
-
-
-
-
-
-
Autostart download subscriptions
-
-
-
- {
- handleUpdateConfig('subscriptions.auto_start', event.target.checked || false);
- }}
- />
- {!isAutostart && (
-
- )}
- {isAutostart && (
-
- )}
-
-
-
-
-
-
Downloads
-
-
-
-
-
-
Auto delete watched videos after x days
-
-
-
-
-
-
-
-
-
Limit video and audio quality format
-
-
-
-
-
-
Sort download formats
-
-
-
-
-
-
-
-
- {
- handleUpdateConfig('downloads.add_metadata', event.target.checked || false);
- }}
- />
- {!embedMetadata && (
-
- )}
- {embedMetadata && (
-
- )}
-
-
-
-
-
-
-
- {
- 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 && (
-
- )}
-
-
-
- >
- )}
-
-
-
-
- {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
-
-
-
- {showApiToken && }
-
- {showApiToken && (
-
-
-
-
-
Enable returnyoutubedislike
-
-
-
-
{
- handleUpdateConfig('downloads.integrate_ryd', event.target.checked);
- }}
- />
- {!downloadDislikes && (
-
- )}
- {downloadDislikes && (
-
- )}
+
-
-
-
-
-
-
{
- handleUpdateConfig('downloads.integrate_sponsorblock', event.target.checked);
- }}
- />
- {!enableSponsorBlock && (
-
- )}
- {enableSponsorBlock && (
-
- )}
+
+
+
Autostart download subscriptions
-
-
-
-
-
Snapshots
-
-
-
Enable Index Snapshot
-
-
-
-
-
+
+
Downloads
+
- {appSettingsConfig?.application.enable_snapshot && snapshots && (
- <>
-
- Create next snapshot:{' '}
- {snapshots.next_exec_str},
- snapshots expire after{' '}
- {snapshots.expire_after}
- .
- {isSnapshotQueued && Snapshot in progress}
- {!isSnapshotQueued && (
-
+
+
+
+
+
+
+
Auto delete watched videos after x days
+
+
+
+
+
+
+
+
+
Limit video and audio quality format
+
+
+
+
+
+
Sort download formats
+
+
+
+
+
+
+
+
+ {
+ handleUpdateConfig('downloads.add_metadata', event.target.checked || false);
+ }}
+ />
+ {!embedMetadata && (
+
+ )}
+ {embedMetadata && (
+
+ )}
+
+
+
+
+
+
+
+ {
+ 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 (
-
-
- );
- })}
- >
+ {subtitleSource === 'auto' && (
+
+ )}
+
+
+
+
+
+
Enable subtitle index
+
+
+
+ {
+ handleUpdateConfig('downloads.subtitle_index', event.target.checked);
+ }}
+ />
+ {!indexSubtitles && (
+
+ )}
+ {indexSubtitles && (
+
+ )}
+
+
+
+ >
+ )}
+
+
+
+
+ {appSettingsConfig?.downloads.comment_max && (
+
+
+
+
+
+
+ )}
+
+
+
+
Integrations
+
+
+
+ {showApiToken && }
+
+ {showApiToken && (
+
+
+
+
Enable returnyoutubedislike
+
+
+
+ {
+ handleUpdateConfig('downloads.integrate_ryd', event.target.checked);
+ }}
+ />
+ {!downloadDislikes && (
+
+ )}
+ {downloadDislikes && (
+
+ )}
+
+
+
+
+
+
+
+ {
+ 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 && (
+
+
+ {restoringSnapshot &&
Snapshot restore started
}
+ {!restoringSnapshot &&
+ snapshots.snapshots &&
+ snapshots.snapshots.map(snapshot => {
+ return (
+
+
+ );
+ })}
+ >
+ )}
+
+
+
-
+ )}