[skip ci] Feat: Add OPDS Configs to Server Settings tab (#945)
* Add OPDS config settings * Address PR comments * Update serverVersion for PREVIEW * Add "opdsUseBinaryFileSizes" setting --------- Co-authored-by: schroda <50052685+schroda@users.noreply.github.com>
This commit is contained in:
@@ -81,8 +81,8 @@
|
||||
"confirmation_other": "You are about to download {{count}} chapters.\nSuwayomi is not a mass downloader and too many downloads can get you banned from sources and/or cause performance issues.",
|
||||
"error_one": "Could not add the download",
|
||||
"error_other": "Could not add downloads",
|
||||
"next_one": "Next chapter",
|
||||
"next_other" : "Next {{count}} chapters",
|
||||
"next_one": "Next chapter",
|
||||
"next_other": "Next {{count}} chapters",
|
||||
"success_one": "Download added",
|
||||
"success_other": "{{count}} downloads added",
|
||||
"unread": "$t(global.filter.label.unread)"
|
||||
@@ -1377,6 +1377,55 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"opds": {
|
||||
"binary_file_sizes": {
|
||||
"label": {
|
||||
"description": "Display file sizes in binary (KiB, MiB, GiB) instead of decimal (KB, MB, GB)",
|
||||
"title": "Binary file size",
|
||||
"unit_one": "item",
|
||||
"unit_other": "items"
|
||||
}
|
||||
},
|
||||
"chapter_sort_order": {
|
||||
"label": {
|
||||
"description": "Choose the order in which chapters are displayed.",
|
||||
"title": "Chapter sort order"
|
||||
}
|
||||
},
|
||||
"enable_page_read_progress": {
|
||||
"label": {
|
||||
"description": "Track and update your reading progress by page for each chapter during page streaming",
|
||||
"title": "Enable page read progress"
|
||||
}
|
||||
},
|
||||
"items_per_page": {
|
||||
"label": {
|
||||
"description": "Number of items per page in OPDS feeds (e.g., Library History, Manga Chapters). \nHigher values may affect client performance.",
|
||||
"title": "Items per page",
|
||||
"unit_one": "item",
|
||||
"unit_other": "items"
|
||||
}
|
||||
},
|
||||
"mark_as_read_on_download": {
|
||||
"label": {
|
||||
"description": "Automatically mark chapters as read when you download them.",
|
||||
"title": "Mark chapters as read on download"
|
||||
}
|
||||
},
|
||||
"show_only_downloaded_chapters": {
|
||||
"label": {
|
||||
"description": "Filter manga feed to display only chapters you have downloaded.",
|
||||
"title": "Show only downloaded chapters"
|
||||
}
|
||||
},
|
||||
"show_only_unread_chapters": {
|
||||
"label": {
|
||||
"description": "Filter manga feed to display only chapters you haven’t read yet.",
|
||||
"title": "Show only unread chapters"
|
||||
}
|
||||
},
|
||||
"title": "OPDS"
|
||||
},
|
||||
"requests": {
|
||||
"sources": {
|
||||
"parallel": {
|
||||
|
||||
@@ -79,5 +79,14 @@ export const SERVER_SETTINGS = gql`
|
||||
flareSolverrSessionName
|
||||
flareSolverrSessionTtl
|
||||
flareSolverrAsResponseFallback
|
||||
|
||||
# OPDS
|
||||
opdsUseBinaryFileSizes
|
||||
opdsItemsPerPage
|
||||
opdsEnablePageReadProgress
|
||||
opdsMarkAsReadOnDownload
|
||||
opdsShowOnlyUnreadChapters
|
||||
opdsShowOnlyDownloadedChapters
|
||||
opdsChapterSortOrder
|
||||
}
|
||||
`;
|
||||
|
||||
@@ -552,7 +552,7 @@ export type PageInfoFieldPolicy = {
|
||||
hasPreviousPage?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
startCursor?: FieldPolicy<any> | FieldReadFunction<any>
|
||||
};
|
||||
export type PartialSettingsTypeKeySpecifier = ('autoDownloadAheadLimit' | 'autoDownloadIgnoreReUploads' | 'autoDownloadNewChapters' | 'autoDownloadNewChaptersLimit' | 'backupInterval' | 'backupPath' | 'backupTTL' | 'backupTime' | 'basicAuthEnabled' | 'basicAuthPassword' | 'basicAuthUsername' | 'debugLogsEnabled' | 'downloadAsCbz' | 'downloadsPath' | 'electronPath' | 'excludeCompleted' | 'excludeEntryWithUnreadChapters' | 'excludeNotStarted' | 'excludeUnreadChapters' | 'extensionRepos' | 'flareSolverrAsResponseFallback' | 'flareSolverrEnabled' | 'flareSolverrSessionName' | 'flareSolverrSessionTtl' | 'flareSolverrTimeout' | 'flareSolverrUrl' | 'globalUpdateInterval' | 'gqlDebugLogsEnabled' | 'initialOpenInBrowserEnabled' | 'ip' | 'localSourcePath' | 'maxLogFileSize' | 'maxLogFiles' | 'maxLogFolderSize' | 'maxSourcesInParallel' | 'port' | 'socksProxyEnabled' | 'socksProxyHost' | 'socksProxyPassword' | 'socksProxyPort' | 'socksProxyUsername' | 'socksProxyVersion' | 'systemTrayEnabled' | 'updateMangas' | 'webUIChannel' | 'webUIFlavor' | 'webUIInterface' | 'webUIUpdateCheckInterval' | PartialSettingsTypeKeySpecifier)[];
|
||||
export type PartialSettingsTypeKeySpecifier = ('autoDownloadAheadLimit' | 'autoDownloadIgnoreReUploads' | 'autoDownloadNewChapters' | 'autoDownloadNewChaptersLimit' | 'backupInterval' | 'backupPath' | 'backupTTL' | 'backupTime' | 'basicAuthEnabled' | 'basicAuthPassword' | 'basicAuthUsername' | 'debugLogsEnabled' | 'downloadAsCbz' | 'downloadsPath' | 'electronPath' | 'excludeCompleted' | 'excludeEntryWithUnreadChapters' | 'excludeNotStarted' | 'excludeUnreadChapters' | 'extensionRepos' | 'flareSolverrAsResponseFallback' | 'flareSolverrEnabled' | 'flareSolverrSessionName' | 'flareSolverrSessionTtl' | 'flareSolverrTimeout' | 'flareSolverrUrl' | 'globalUpdateInterval' | 'gqlDebugLogsEnabled' | 'initialOpenInBrowserEnabled' | 'ip' | 'localSourcePath' | 'maxLogFileSize' | 'maxLogFiles' | 'maxLogFolderSize' | 'maxSourcesInParallel' | 'opdsChapterSortOrder' | 'opdsEnablePageReadProgress' | 'opdsItemsPerPage' | 'opdsMarkAsReadOnDownload' | 'opdsShowOnlyDownloadedChapters' | 'opdsShowOnlyUnreadChapters' | 'opdsUseBinaryFileSizes' | 'port' | 'socksProxyEnabled' | 'socksProxyHost' | 'socksProxyPassword' | 'socksProxyPort' | 'socksProxyUsername' | 'socksProxyVersion' | 'systemTrayEnabled' | 'updateMangas' | 'webUIChannel' | 'webUIFlavor' | 'webUIInterface' | 'webUIUpdateCheckInterval' | PartialSettingsTypeKeySpecifier)[];
|
||||
export type PartialSettingsTypeFieldPolicy = {
|
||||
autoDownloadAheadLimit?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
autoDownloadIgnoreReUploads?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
@@ -589,6 +589,13 @@ export type PartialSettingsTypeFieldPolicy = {
|
||||
maxLogFiles?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
maxLogFolderSize?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
maxSourcesInParallel?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
opdsChapterSortOrder?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
opdsEnablePageReadProgress?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
opdsItemsPerPage?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
opdsMarkAsReadOnDownload?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
opdsShowOnlyDownloadedChapters?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
opdsShowOnlyUnreadChapters?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
opdsUseBinaryFileSizes?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
port?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
socksProxyEnabled?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
socksProxyHost?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
@@ -695,7 +702,7 @@ export type SetSourceMetaPayloadFieldPolicy = {
|
||||
clientMutationId?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
meta?: FieldPolicy<any> | FieldReadFunction<any>
|
||||
};
|
||||
export type SettingsKeySpecifier = ('autoDownloadAheadLimit' | 'autoDownloadIgnoreReUploads' | 'autoDownloadNewChapters' | 'autoDownloadNewChaptersLimit' | 'backupInterval' | 'backupPath' | 'backupTTL' | 'backupTime' | 'basicAuthEnabled' | 'basicAuthPassword' | 'basicAuthUsername' | 'debugLogsEnabled' | 'downloadAsCbz' | 'downloadsPath' | 'electronPath' | 'excludeCompleted' | 'excludeEntryWithUnreadChapters' | 'excludeNotStarted' | 'excludeUnreadChapters' | 'extensionRepos' | 'flareSolverrAsResponseFallback' | 'flareSolverrEnabled' | 'flareSolverrSessionName' | 'flareSolverrSessionTtl' | 'flareSolverrTimeout' | 'flareSolverrUrl' | 'globalUpdateInterval' | 'gqlDebugLogsEnabled' | 'initialOpenInBrowserEnabled' | 'ip' | 'localSourcePath' | 'maxLogFileSize' | 'maxLogFiles' | 'maxLogFolderSize' | 'maxSourcesInParallel' | 'port' | 'socksProxyEnabled' | 'socksProxyHost' | 'socksProxyPassword' | 'socksProxyPort' | 'socksProxyUsername' | 'socksProxyVersion' | 'systemTrayEnabled' | 'updateMangas' | 'webUIChannel' | 'webUIFlavor' | 'webUIInterface' | 'webUIUpdateCheckInterval' | SettingsKeySpecifier)[];
|
||||
export type SettingsKeySpecifier = ('autoDownloadAheadLimit' | 'autoDownloadIgnoreReUploads' | 'autoDownloadNewChapters' | 'autoDownloadNewChaptersLimit' | 'backupInterval' | 'backupPath' | 'backupTTL' | 'backupTime' | 'basicAuthEnabled' | 'basicAuthPassword' | 'basicAuthUsername' | 'debugLogsEnabled' | 'downloadAsCbz' | 'downloadsPath' | 'electronPath' | 'excludeCompleted' | 'excludeEntryWithUnreadChapters' | 'excludeNotStarted' | 'excludeUnreadChapters' | 'extensionRepos' | 'flareSolverrAsResponseFallback' | 'flareSolverrEnabled' | 'flareSolverrSessionName' | 'flareSolverrSessionTtl' | 'flareSolverrTimeout' | 'flareSolverrUrl' | 'globalUpdateInterval' | 'gqlDebugLogsEnabled' | 'initialOpenInBrowserEnabled' | 'ip' | 'localSourcePath' | 'maxLogFileSize' | 'maxLogFiles' | 'maxLogFolderSize' | 'maxSourcesInParallel' | 'opdsChapterSortOrder' | 'opdsEnablePageReadProgress' | 'opdsItemsPerPage' | 'opdsMarkAsReadOnDownload' | 'opdsShowOnlyDownloadedChapters' | 'opdsShowOnlyUnreadChapters' | 'opdsUseBinaryFileSizes' | 'port' | 'socksProxyEnabled' | 'socksProxyHost' | 'socksProxyPassword' | 'socksProxyPort' | 'socksProxyUsername' | 'socksProxyVersion' | 'systemTrayEnabled' | 'updateMangas' | 'webUIChannel' | 'webUIFlavor' | 'webUIInterface' | 'webUIUpdateCheckInterval' | SettingsKeySpecifier)[];
|
||||
export type SettingsFieldPolicy = {
|
||||
autoDownloadAheadLimit?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
autoDownloadIgnoreReUploads?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
@@ -732,6 +739,13 @@ export type SettingsFieldPolicy = {
|
||||
maxLogFiles?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
maxLogFolderSize?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
maxSourcesInParallel?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
opdsChapterSortOrder?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
opdsEnablePageReadProgress?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
opdsItemsPerPage?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
opdsMarkAsReadOnDownload?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
opdsShowOnlyDownloadedChapters?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
opdsShowOnlyUnreadChapters?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
opdsUseBinaryFileSizes?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
port?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
socksProxyEnabled?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
socksProxyHost?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
@@ -746,7 +760,7 @@ export type SettingsFieldPolicy = {
|
||||
webUIInterface?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
webUIUpdateCheckInterval?: FieldPolicy<any> | FieldReadFunction<any>
|
||||
};
|
||||
export type SettingsTypeKeySpecifier = ('autoDownloadAheadLimit' | 'autoDownloadIgnoreReUploads' | 'autoDownloadNewChapters' | 'autoDownloadNewChaptersLimit' | 'backupInterval' | 'backupPath' | 'backupTTL' | 'backupTime' | 'basicAuthEnabled' | 'basicAuthPassword' | 'basicAuthUsername' | 'debugLogsEnabled' | 'downloadAsCbz' | 'downloadsPath' | 'electronPath' | 'excludeCompleted' | 'excludeEntryWithUnreadChapters' | 'excludeNotStarted' | 'excludeUnreadChapters' | 'extensionRepos' | 'flareSolverrAsResponseFallback' | 'flareSolverrEnabled' | 'flareSolverrSessionName' | 'flareSolverrSessionTtl' | 'flareSolverrTimeout' | 'flareSolverrUrl' | 'globalUpdateInterval' | 'gqlDebugLogsEnabled' | 'initialOpenInBrowserEnabled' | 'ip' | 'localSourcePath' | 'maxLogFileSize' | 'maxLogFiles' | 'maxLogFolderSize' | 'maxSourcesInParallel' | 'port' | 'socksProxyEnabled' | 'socksProxyHost' | 'socksProxyPassword' | 'socksProxyPort' | 'socksProxyUsername' | 'socksProxyVersion' | 'systemTrayEnabled' | 'updateMangas' | 'webUIChannel' | 'webUIFlavor' | 'webUIInterface' | 'webUIUpdateCheckInterval' | SettingsTypeKeySpecifier)[];
|
||||
export type SettingsTypeKeySpecifier = ('autoDownloadAheadLimit' | 'autoDownloadIgnoreReUploads' | 'autoDownloadNewChapters' | 'autoDownloadNewChaptersLimit' | 'backupInterval' | 'backupPath' | 'backupTTL' | 'backupTime' | 'basicAuthEnabled' | 'basicAuthPassword' | 'basicAuthUsername' | 'debugLogsEnabled' | 'downloadAsCbz' | 'downloadsPath' | 'electronPath' | 'excludeCompleted' | 'excludeEntryWithUnreadChapters' | 'excludeNotStarted' | 'excludeUnreadChapters' | 'extensionRepos' | 'flareSolverrAsResponseFallback' | 'flareSolverrEnabled' | 'flareSolverrSessionName' | 'flareSolverrSessionTtl' | 'flareSolverrTimeout' | 'flareSolverrUrl' | 'globalUpdateInterval' | 'gqlDebugLogsEnabled' | 'initialOpenInBrowserEnabled' | 'ip' | 'localSourcePath' | 'maxLogFileSize' | 'maxLogFiles' | 'maxLogFolderSize' | 'maxSourcesInParallel' | 'opdsChapterSortOrder' | 'opdsEnablePageReadProgress' | 'opdsItemsPerPage' | 'opdsMarkAsReadOnDownload' | 'opdsShowOnlyDownloadedChapters' | 'opdsShowOnlyUnreadChapters' | 'opdsUseBinaryFileSizes' | 'port' | 'socksProxyEnabled' | 'socksProxyHost' | 'socksProxyPassword' | 'socksProxyPort' | 'socksProxyUsername' | 'socksProxyVersion' | 'systemTrayEnabled' | 'updateMangas' | 'webUIChannel' | 'webUIFlavor' | 'webUIInterface' | 'webUIUpdateCheckInterval' | SettingsTypeKeySpecifier)[];
|
||||
export type SettingsTypeFieldPolicy = {
|
||||
autoDownloadAheadLimit?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
autoDownloadIgnoreReUploads?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
@@ -783,6 +797,13 @@ export type SettingsTypeFieldPolicy = {
|
||||
maxLogFiles?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
maxLogFolderSize?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
maxSourcesInParallel?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
opdsChapterSortOrder?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
opdsEnablePageReadProgress?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
opdsItemsPerPage?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
opdsMarkAsReadOnDownload?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
opdsShowOnlyDownloadedChapters?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
opdsShowOnlyUnreadChapters?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
opdsUseBinaryFileSizes?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
port?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
socksProxyEnabled?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
socksProxyHost?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
|
||||
@@ -1556,6 +1556,13 @@ export type PartialSettingsType = Settings & {
|
||||
maxLogFiles?: Maybe<Scalars['Int']['output']>;
|
||||
maxLogFolderSize?: Maybe<Scalars['String']['output']>;
|
||||
maxSourcesInParallel?: Maybe<Scalars['Int']['output']>;
|
||||
opdsChapterSortOrder?: Maybe<SortOrder>;
|
||||
opdsEnablePageReadProgress?: Maybe<Scalars['Boolean']['output']>;
|
||||
opdsItemsPerPage?: Maybe<Scalars['Int']['output']>;
|
||||
opdsMarkAsReadOnDownload?: Maybe<Scalars['Boolean']['output']>;
|
||||
opdsShowOnlyDownloadedChapters?: Maybe<Scalars['Boolean']['output']>;
|
||||
opdsShowOnlyUnreadChapters?: Maybe<Scalars['Boolean']['output']>;
|
||||
opdsUseBinaryFileSizes?: Maybe<Scalars['Boolean']['output']>;
|
||||
port?: Maybe<Scalars['Int']['output']>;
|
||||
socksProxyEnabled?: Maybe<Scalars['Boolean']['output']>;
|
||||
socksProxyHost?: Maybe<Scalars['String']['output']>;
|
||||
@@ -1605,6 +1612,13 @@ export type PartialSettingsTypeInput = {
|
||||
maxLogFiles?: InputMaybe<Scalars['Int']['input']>;
|
||||
maxLogFolderSize?: InputMaybe<Scalars['String']['input']>;
|
||||
maxSourcesInParallel?: InputMaybe<Scalars['Int']['input']>;
|
||||
opdsChapterSortOrder?: InputMaybe<SortOrder>;
|
||||
opdsEnablePageReadProgress?: InputMaybe<Scalars['Boolean']['input']>;
|
||||
opdsItemsPerPage?: InputMaybe<Scalars['Int']['input']>;
|
||||
opdsMarkAsReadOnDownload?: InputMaybe<Scalars['Boolean']['input']>;
|
||||
opdsShowOnlyDownloadedChapters?: InputMaybe<Scalars['Boolean']['input']>;
|
||||
opdsShowOnlyUnreadChapters?: InputMaybe<Scalars['Boolean']['input']>;
|
||||
opdsUseBinaryFileSizes?: InputMaybe<Scalars['Boolean']['input']>;
|
||||
port?: InputMaybe<Scalars['Int']['input']>;
|
||||
socksProxyEnabled?: InputMaybe<Scalars['Boolean']['input']>;
|
||||
socksProxyHost?: InputMaybe<Scalars['String']['input']>;
|
||||
@@ -1966,6 +1980,13 @@ export type Settings = {
|
||||
maxLogFiles?: Maybe<Scalars['Int']['output']>;
|
||||
maxLogFolderSize?: Maybe<Scalars['String']['output']>;
|
||||
maxSourcesInParallel?: Maybe<Scalars['Int']['output']>;
|
||||
opdsChapterSortOrder?: Maybe<SortOrder>;
|
||||
opdsEnablePageReadProgress?: Maybe<Scalars['Boolean']['output']>;
|
||||
opdsItemsPerPage?: Maybe<Scalars['Int']['output']>;
|
||||
opdsMarkAsReadOnDownload?: Maybe<Scalars['Boolean']['output']>;
|
||||
opdsShowOnlyDownloadedChapters?: Maybe<Scalars['Boolean']['output']>;
|
||||
opdsShowOnlyUnreadChapters?: Maybe<Scalars['Boolean']['output']>;
|
||||
opdsUseBinaryFileSizes?: Maybe<Scalars['Boolean']['output']>;
|
||||
port?: Maybe<Scalars['Int']['output']>;
|
||||
socksProxyEnabled?: Maybe<Scalars['Boolean']['output']>;
|
||||
socksProxyHost?: Maybe<Scalars['String']['output']>;
|
||||
@@ -2020,6 +2041,13 @@ export type SettingsType = Settings & {
|
||||
maxLogFiles: Scalars['Int']['output'];
|
||||
maxLogFolderSize: Scalars['String']['output'];
|
||||
maxSourcesInParallel: Scalars['Int']['output'];
|
||||
opdsChapterSortOrder: SortOrder;
|
||||
opdsEnablePageReadProgress: Scalars['Boolean']['output'];
|
||||
opdsItemsPerPage: Scalars['Int']['output'];
|
||||
opdsMarkAsReadOnDownload: Scalars['Boolean']['output'];
|
||||
opdsShowOnlyDownloadedChapters: Scalars['Boolean']['output'];
|
||||
opdsShowOnlyUnreadChapters: Scalars['Boolean']['output'];
|
||||
opdsUseBinaryFileSizes: Scalars['Boolean']['output'];
|
||||
port: Scalars['Int']['output'];
|
||||
socksProxyEnabled: Scalars['Boolean']['output'];
|
||||
socksProxyHost: Scalars['String']['output'];
|
||||
@@ -2879,7 +2907,7 @@ export type MangaScreenFieldsFragment = { __typename?: 'MangaType', artist?: str
|
||||
|
||||
export type MangaLibraryDuplicateScreenFieldsFragment = { __typename?: 'MangaType', description?: string | null, id: number, title: string, thumbnailUrl?: string | null, thumbnailUrlLastFetched?: string | null, inLibrary: boolean, initialized: boolean, sourceId: string, unreadCount: number, downloadCount: number, bookmarkCount: number, hasDuplicateChapters: boolean, chapters: { __typename?: 'ChapterNodeList', totalCount: number } };
|
||||
|
||||
export type ServerSettingsFragment = { __typename?: 'SettingsType', ip: string, port: number, socksProxyEnabled: boolean, socksProxyVersion: number, socksProxyHost: string, socksProxyPort: string, socksProxyUsername: string, socksProxyPassword: string, webUIFlavor: WebUiFlavor, initialOpenInBrowserEnabled: boolean, webUIInterface: WebUiInterface, electronPath: string, webUIChannel: WebUiChannel, webUIUpdateCheckInterval: number, downloadAsCbz: boolean, downloadsPath: string, autoDownloadNewChapters: boolean, excludeEntryWithUnreadChapters: boolean, autoDownloadNewChaptersLimit: number, autoDownloadIgnoreReUploads?: boolean | null, extensionRepos: Array<string>, maxSourcesInParallel: number, excludeUnreadChapters: boolean, excludeNotStarted: boolean, excludeCompleted: boolean, globalUpdateInterval: number, updateMangas: boolean, basicAuthEnabled: boolean, basicAuthUsername: string, basicAuthPassword: string, debugLogsEnabled: boolean, systemTrayEnabled: boolean, maxLogFileSize: string, maxLogFiles: number, maxLogFolderSize: string, backupPath: string, backupTime: string, backupInterval: number, backupTTL: number, localSourcePath: string, flareSolverrEnabled: boolean, flareSolverrUrl: string, flareSolverrTimeout: number, flareSolverrSessionName: string, flareSolverrSessionTtl: number, flareSolverrAsResponseFallback: boolean };
|
||||
export type ServerSettingsFragment = { __typename?: 'SettingsType', ip: string, port: number, socksProxyEnabled: boolean, socksProxyVersion: number, socksProxyHost: string, socksProxyPort: string, socksProxyUsername: string, socksProxyPassword: string, webUIFlavor: WebUiFlavor, initialOpenInBrowserEnabled: boolean, webUIInterface: WebUiInterface, electronPath: string, webUIChannel: WebUiChannel, webUIUpdateCheckInterval: number, downloadAsCbz: boolean, downloadsPath: string, autoDownloadNewChapters: boolean, excludeEntryWithUnreadChapters: boolean, autoDownloadNewChaptersLimit: number, autoDownloadIgnoreReUploads?: boolean | null, extensionRepos: Array<string>, maxSourcesInParallel: number, excludeUnreadChapters: boolean, excludeNotStarted: boolean, excludeCompleted: boolean, globalUpdateInterval: number, updateMangas: boolean, basicAuthEnabled: boolean, basicAuthUsername: string, basicAuthPassword: string, debugLogsEnabled: boolean, systemTrayEnabled: boolean, maxLogFileSize: string, maxLogFiles: number, maxLogFolderSize: string, backupPath: string, backupTime: string, backupInterval: number, backupTTL: number, localSourcePath: string, flareSolverrEnabled: boolean, flareSolverrUrl: string, flareSolverrTimeout: number, flareSolverrSessionName: string, flareSolverrSessionTtl: number, flareSolverrAsResponseFallback: boolean, opdsUseBinaryFileSizes: boolean, opdsItemsPerPage: number, opdsEnablePageReadProgress: boolean, opdsMarkAsReadOnDownload: boolean, opdsShowOnlyUnreadChapters: boolean, opdsShowOnlyDownloadedChapters: boolean, opdsChapterSortOrder: SortOrder };
|
||||
|
||||
export type SourceMetaFieldsFragment = { __typename?: 'SourceMetaType', sourceId: string, key: string, value: string };
|
||||
|
||||
@@ -3241,14 +3269,14 @@ export type ResetServerSettingsMutationVariables = Exact<{
|
||||
}>;
|
||||
|
||||
|
||||
export type ResetServerSettingsMutation = { __typename?: 'Mutation', resetSettings: { __typename?: 'ResetSettingsPayload', settings: { __typename?: 'SettingsType', ip: string, port: number, socksProxyEnabled: boolean, socksProxyVersion: number, socksProxyHost: string, socksProxyPort: string, socksProxyUsername: string, socksProxyPassword: string, webUIFlavor: WebUiFlavor, initialOpenInBrowserEnabled: boolean, webUIInterface: WebUiInterface, electronPath: string, webUIChannel: WebUiChannel, webUIUpdateCheckInterval: number, downloadAsCbz: boolean, downloadsPath: string, autoDownloadNewChapters: boolean, excludeEntryWithUnreadChapters: boolean, autoDownloadNewChaptersLimit: number, autoDownloadIgnoreReUploads?: boolean | null, extensionRepos: Array<string>, maxSourcesInParallel: number, excludeUnreadChapters: boolean, excludeNotStarted: boolean, excludeCompleted: boolean, globalUpdateInterval: number, updateMangas: boolean, basicAuthEnabled: boolean, basicAuthUsername: string, basicAuthPassword: string, debugLogsEnabled: boolean, systemTrayEnabled: boolean, maxLogFileSize: string, maxLogFiles: number, maxLogFolderSize: string, backupPath: string, backupTime: string, backupInterval: number, backupTTL: number, localSourcePath: string, flareSolverrEnabled: boolean, flareSolverrUrl: string, flareSolverrTimeout: number, flareSolverrSessionName: string, flareSolverrSessionTtl: number, flareSolverrAsResponseFallback: boolean } } };
|
||||
export type ResetServerSettingsMutation = { __typename?: 'Mutation', resetSettings: { __typename?: 'ResetSettingsPayload', settings: { __typename?: 'SettingsType', ip: string, port: number, socksProxyEnabled: boolean, socksProxyVersion: number, socksProxyHost: string, socksProxyPort: string, socksProxyUsername: string, socksProxyPassword: string, webUIFlavor: WebUiFlavor, initialOpenInBrowserEnabled: boolean, webUIInterface: WebUiInterface, electronPath: string, webUIChannel: WebUiChannel, webUIUpdateCheckInterval: number, downloadAsCbz: boolean, downloadsPath: string, autoDownloadNewChapters: boolean, excludeEntryWithUnreadChapters: boolean, autoDownloadNewChaptersLimit: number, autoDownloadIgnoreReUploads?: boolean | null, extensionRepos: Array<string>, maxSourcesInParallel: number, excludeUnreadChapters: boolean, excludeNotStarted: boolean, excludeCompleted: boolean, globalUpdateInterval: number, updateMangas: boolean, basicAuthEnabled: boolean, basicAuthUsername: string, basicAuthPassword: string, debugLogsEnabled: boolean, systemTrayEnabled: boolean, maxLogFileSize: string, maxLogFiles: number, maxLogFolderSize: string, backupPath: string, backupTime: string, backupInterval: number, backupTTL: number, localSourcePath: string, flareSolverrEnabled: boolean, flareSolverrUrl: string, flareSolverrTimeout: number, flareSolverrSessionName: string, flareSolverrSessionTtl: number, flareSolverrAsResponseFallback: boolean, opdsUseBinaryFileSizes: boolean, opdsItemsPerPage: number, opdsEnablePageReadProgress: boolean, opdsMarkAsReadOnDownload: boolean, opdsShowOnlyUnreadChapters: boolean, opdsShowOnlyDownloadedChapters: boolean, opdsChapterSortOrder: SortOrder } } };
|
||||
|
||||
export type UpdateServerSettingsMutationVariables = Exact<{
|
||||
input: SetSettingsInput;
|
||||
}>;
|
||||
|
||||
|
||||
export type UpdateServerSettingsMutation = { __typename?: 'Mutation', setSettings: { __typename?: 'SetSettingsPayload', settings: { __typename?: 'SettingsType', ip: string, port: number, socksProxyEnabled: boolean, socksProxyVersion: number, socksProxyHost: string, socksProxyPort: string, socksProxyUsername: string, socksProxyPassword: string, webUIFlavor: WebUiFlavor, initialOpenInBrowserEnabled: boolean, webUIInterface: WebUiInterface, electronPath: string, webUIChannel: WebUiChannel, webUIUpdateCheckInterval: number, downloadAsCbz: boolean, downloadsPath: string, autoDownloadNewChapters: boolean, excludeEntryWithUnreadChapters: boolean, autoDownloadNewChaptersLimit: number, autoDownloadIgnoreReUploads?: boolean | null, extensionRepos: Array<string>, maxSourcesInParallel: number, excludeUnreadChapters: boolean, excludeNotStarted: boolean, excludeCompleted: boolean, globalUpdateInterval: number, updateMangas: boolean, basicAuthEnabled: boolean, basicAuthUsername: string, basicAuthPassword: string, debugLogsEnabled: boolean, systemTrayEnabled: boolean, maxLogFileSize: string, maxLogFiles: number, maxLogFolderSize: string, backupPath: string, backupTime: string, backupInterval: number, backupTTL: number, localSourcePath: string, flareSolverrEnabled: boolean, flareSolverrUrl: string, flareSolverrTimeout: number, flareSolverrSessionName: string, flareSolverrSessionTtl: number, flareSolverrAsResponseFallback: boolean } } };
|
||||
export type UpdateServerSettingsMutation = { __typename?: 'Mutation', setSettings: { __typename?: 'SetSettingsPayload', settings: { __typename?: 'SettingsType', ip: string, port: number, socksProxyEnabled: boolean, socksProxyVersion: number, socksProxyHost: string, socksProxyPort: string, socksProxyUsername: string, socksProxyPassword: string, webUIFlavor: WebUiFlavor, initialOpenInBrowserEnabled: boolean, webUIInterface: WebUiInterface, electronPath: string, webUIChannel: WebUiChannel, webUIUpdateCheckInterval: number, downloadAsCbz: boolean, downloadsPath: string, autoDownloadNewChapters: boolean, excludeEntryWithUnreadChapters: boolean, autoDownloadNewChaptersLimit: number, autoDownloadIgnoreReUploads?: boolean | null, extensionRepos: Array<string>, maxSourcesInParallel: number, excludeUnreadChapters: boolean, excludeNotStarted: boolean, excludeCompleted: boolean, globalUpdateInterval: number, updateMangas: boolean, basicAuthEnabled: boolean, basicAuthUsername: string, basicAuthPassword: string, debugLogsEnabled: boolean, systemTrayEnabled: boolean, maxLogFileSize: string, maxLogFiles: number, maxLogFolderSize: string, backupPath: string, backupTime: string, backupInterval: number, backupTTL: number, localSourcePath: string, flareSolverrEnabled: boolean, flareSolverrUrl: string, flareSolverrTimeout: number, flareSolverrSessionName: string, flareSolverrSessionTtl: number, flareSolverrAsResponseFallback: boolean, opdsUseBinaryFileSizes: boolean, opdsItemsPerPage: number, opdsEnablePageReadProgress: boolean, opdsMarkAsReadOnDownload: boolean, opdsShowOnlyUnreadChapters: boolean, opdsShowOnlyDownloadedChapters: boolean, opdsChapterSortOrder: SortOrder } } };
|
||||
|
||||
export type GetSourceMangasFetchMutationVariables = Exact<{
|
||||
input: FetchSourceMangaInput;
|
||||
@@ -3634,7 +3662,7 @@ export type GetWebuiUpdateStatusQuery = { __typename?: 'Query', getWebUIUpdateSt
|
||||
export type GetServerSettingsQueryVariables = Exact<{ [key: string]: never; }>;
|
||||
|
||||
|
||||
export type GetServerSettingsQuery = { __typename?: 'Query', settings: { __typename?: 'SettingsType', ip: string, port: number, socksProxyEnabled: boolean, socksProxyVersion: number, socksProxyHost: string, socksProxyPort: string, socksProxyUsername: string, socksProxyPassword: string, webUIFlavor: WebUiFlavor, initialOpenInBrowserEnabled: boolean, webUIInterface: WebUiInterface, electronPath: string, webUIChannel: WebUiChannel, webUIUpdateCheckInterval: number, downloadAsCbz: boolean, downloadsPath: string, autoDownloadNewChapters: boolean, excludeEntryWithUnreadChapters: boolean, autoDownloadNewChaptersLimit: number, autoDownloadIgnoreReUploads?: boolean | null, extensionRepos: Array<string>, maxSourcesInParallel: number, excludeUnreadChapters: boolean, excludeNotStarted: boolean, excludeCompleted: boolean, globalUpdateInterval: number, updateMangas: boolean, basicAuthEnabled: boolean, basicAuthUsername: string, basicAuthPassword: string, debugLogsEnabled: boolean, systemTrayEnabled: boolean, maxLogFileSize: string, maxLogFiles: number, maxLogFolderSize: string, backupPath: string, backupTime: string, backupInterval: number, backupTTL: number, localSourcePath: string, flareSolverrEnabled: boolean, flareSolverrUrl: string, flareSolverrTimeout: number, flareSolverrSessionName: string, flareSolverrSessionTtl: number, flareSolverrAsResponseFallback: boolean } };
|
||||
export type GetServerSettingsQuery = { __typename?: 'Query', settings: { __typename?: 'SettingsType', ip: string, port: number, socksProxyEnabled: boolean, socksProxyVersion: number, socksProxyHost: string, socksProxyPort: string, socksProxyUsername: string, socksProxyPassword: string, webUIFlavor: WebUiFlavor, initialOpenInBrowserEnabled: boolean, webUIInterface: WebUiInterface, electronPath: string, webUIChannel: WebUiChannel, webUIUpdateCheckInterval: number, downloadAsCbz: boolean, downloadsPath: string, autoDownloadNewChapters: boolean, excludeEntryWithUnreadChapters: boolean, autoDownloadNewChaptersLimit: number, autoDownloadIgnoreReUploads?: boolean | null, extensionRepos: Array<string>, maxSourcesInParallel: number, excludeUnreadChapters: boolean, excludeNotStarted: boolean, excludeCompleted: boolean, globalUpdateInterval: number, updateMangas: boolean, basicAuthEnabled: boolean, basicAuthUsername: string, basicAuthPassword: string, debugLogsEnabled: boolean, systemTrayEnabled: boolean, maxLogFileSize: string, maxLogFiles: number, maxLogFolderSize: string, backupPath: string, backupTime: string, backupInterval: number, backupTTL: number, localSourcePath: string, flareSolverrEnabled: boolean, flareSolverrUrl: string, flareSolverrTimeout: number, flareSolverrSessionName: string, flareSolverrSessionTtl: number, flareSolverrAsResponseFallback: boolean, opdsUseBinaryFileSizes: boolean, opdsItemsPerPage: number, opdsEnablePageReadProgress: boolean, opdsMarkAsReadOnDownload: boolean, opdsShowOnlyUnreadChapters: boolean, opdsShowOnlyDownloadedChapters: boolean, opdsChapterSortOrder: SortOrder } };
|
||||
|
||||
export type GetSourceBrowseQueryVariables = Exact<{
|
||||
id: Scalars['LongString']['input'];
|
||||
|
||||
@@ -32,6 +32,7 @@ import { MetadataUpdateSettings } from '@/modules/app-updates/AppUpdateChecker.t
|
||||
import { ServerSettings as GqlServerSettings } from '@/modules/settings/Settings.types.ts';
|
||||
import { getErrorMessage } from '@/lib/HelperFunctions.ts';
|
||||
import { useAppTitle } from '@/modules/navigation-bar/hooks/useAppTitle.ts';
|
||||
import { SortOrder } from '@/lib/graphql/generated/graphql';
|
||||
|
||||
type ServerSettingsType = Pick<
|
||||
GqlServerSettings,
|
||||
@@ -57,6 +58,13 @@ type ServerSettingsType = Pick<
|
||||
| 'flareSolverrSessionName'
|
||||
| 'flareSolverrSessionTtl'
|
||||
| 'flareSolverrAsResponseFallback'
|
||||
| 'opdsUseBinaryFileSizes'
|
||||
| 'opdsItemsPerPage'
|
||||
| 'opdsEnablePageReadProgress'
|
||||
| 'opdsMarkAsReadOnDownload'
|
||||
| 'opdsShowOnlyUnreadChapters'
|
||||
| 'opdsShowOnlyDownloadedChapters'
|
||||
| 'opdsChapterSortOrder'
|
||||
>;
|
||||
|
||||
const extractServerSettings = (settings: GqlServerSettings): ServerSettingsType => ({
|
||||
@@ -82,6 +90,13 @@ const extractServerSettings = (settings: GqlServerSettings): ServerSettingsType
|
||||
flareSolverrSessionName: settings.flareSolverrSessionName,
|
||||
flareSolverrSessionTtl: settings.flareSolverrSessionTtl,
|
||||
flareSolverrAsResponseFallback: settings.flareSolverrAsResponseFallback,
|
||||
opdsUseBinaryFileSizes: settings.opdsUseBinaryFileSizes,
|
||||
opdsItemsPerPage: settings.opdsItemsPerPage,
|
||||
opdsEnablePageReadProgress: settings.opdsEnablePageReadProgress,
|
||||
opdsMarkAsReadOnDownload: settings.opdsMarkAsReadOnDownload,
|
||||
opdsShowOnlyUnreadChapters: settings.opdsShowOnlyUnreadChapters,
|
||||
opdsShowOnlyDownloadedChapters: settings.opdsShowOnlyDownloadedChapters,
|
||||
opdsChapterSortOrder: settings.opdsChapterSortOrder,
|
||||
});
|
||||
|
||||
const getLogFilesCleanupDisplayValue = (ttl: number): string => {
|
||||
@@ -430,6 +445,92 @@ export const ServerSettings = () => {
|
||||
handleChange={(maxLogFolderSize) => updateSetting('maxLogFolderSize', maxLogFolderSize)}
|
||||
/>
|
||||
</List>
|
||||
<List
|
||||
subheader={
|
||||
<ListSubheader component="div" id="server-settings-opds">
|
||||
{t('settings.server.opds.title')}
|
||||
</ListSubheader>
|
||||
}
|
||||
>
|
||||
<ListItem>
|
||||
<ListItemText
|
||||
primary={t('settings.server.opds.binary_file_sizes.label.title')}
|
||||
secondary={t('settings.server.opds.binary_file_sizes.label.description')}
|
||||
/>
|
||||
<Switch
|
||||
edge="end"
|
||||
checked={serverSettings.opdsUseBinaryFileSizes}
|
||||
onChange={(e) => updateSetting('opdsUseBinaryFileSizes', e.target.checked)}
|
||||
/>
|
||||
</ListItem>
|
||||
<NumberSetting
|
||||
settingTitle={t('settings.server.opds.items_per_page.label.title')}
|
||||
settingValue={serverSettings.opdsItemsPerPage.toString()}
|
||||
dialogDescription={t('settings.server.opds.items_per_page.label.description')}
|
||||
value={serverSettings.opdsItemsPerPage}
|
||||
defaultValue={50}
|
||||
minValue={10}
|
||||
maxValue={5000}
|
||||
stepSize={10}
|
||||
showSlider
|
||||
valueUnit={t('settings.server.opds.items_per_page.label.unit_other')}
|
||||
handleUpdate={(value) => updateSetting('opdsItemsPerPage', value)}
|
||||
/>
|
||||
<ListItem>
|
||||
<ListItemText
|
||||
primary={t('settings.server.opds.enable_page_read_progress.label.title')}
|
||||
secondary={t('settings.server.opds.enable_page_read_progress.label.description')}
|
||||
/>
|
||||
<Switch
|
||||
edge="end"
|
||||
checked={serverSettings.opdsEnablePageReadProgress}
|
||||
onChange={(e) => updateSetting('opdsEnablePageReadProgress', e.target.checked)}
|
||||
/>
|
||||
</ListItem>
|
||||
<ListItem>
|
||||
<ListItemText
|
||||
primary={t('settings.server.opds.mark_as_read_on_download.label.title')}
|
||||
secondary={t('settings.server.opds.mark_as_read_on_download.label.description')}
|
||||
/>
|
||||
<Switch
|
||||
edge="end"
|
||||
checked={serverSettings.opdsMarkAsReadOnDownload}
|
||||
onChange={(e) => updateSetting('opdsMarkAsReadOnDownload', e.target.checked)}
|
||||
/>
|
||||
</ListItem>
|
||||
<ListItem>
|
||||
<ListItemText
|
||||
primary={t('settings.server.opds.show_only_unread_chapters.label.title')}
|
||||
secondary={t('settings.server.opds.show_only_unread_chapters.label.description')}
|
||||
/>
|
||||
<Switch
|
||||
edge="end"
|
||||
checked={serverSettings.opdsShowOnlyUnreadChapters}
|
||||
onChange={(e) => updateSetting('opdsShowOnlyUnreadChapters', e.target.checked)}
|
||||
/>
|
||||
</ListItem>
|
||||
<ListItem>
|
||||
<ListItemText
|
||||
primary={t('settings.server.opds.show_only_downloaded_chapters.label.title')}
|
||||
secondary={t('settings.server.opds.show_only_downloaded_chapters.label.description')}
|
||||
/>
|
||||
<Switch
|
||||
edge="end"
|
||||
checked={serverSettings.opdsShowOnlyDownloadedChapters}
|
||||
onChange={(e) => updateSetting('opdsShowOnlyDownloadedChapters', e.target.checked)}
|
||||
/>
|
||||
</ListItem>
|
||||
<SelectSetting<SortOrder>
|
||||
settingName={t('settings.server.opds.chapter_sort_order.label.title')}
|
||||
dialogDescription={t('settings.server.opds.chapter_sort_order.label.description')}
|
||||
value={serverSettings.opdsChapterSortOrder}
|
||||
values={[
|
||||
[SortOrder.Asc, { text: t('global.sort.label.asc') }],
|
||||
[SortOrder.Desc, { text: t('global.sort.label.desc') }],
|
||||
]}
|
||||
handleChange={(value) => updateSetting('opdsChapterSortOrder', value)}
|
||||
/>
|
||||
</List>
|
||||
</List>
|
||||
);
|
||||
};
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
[
|
||||
{
|
||||
"uiVersion": "PREVIEW",
|
||||
"serverVersion": "r1719"
|
||||
"serverVersion": "r1754"
|
||||
},
|
||||
{
|
||||
"tag": "20250703.01",
|
||||
|
||||
Reference in New Issue
Block a user