From 7012a792109d176e5b9cd7efdb4400281e885a4a Mon Sep 17 00:00:00 2001 From: mtvpls Date: Fri, 22 May 2026 00:24:44 +0800 Subject: [PATCH] =?UTF-8?q?openlist=E7=A6=BB=E7=BA=BF=E4=B8=8B=E8=BD=BD?= =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E9=A2=9D=E5=A4=96=E6=BA=90=E9=80=89=E6=8B=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/app/admin/page.tsx | 105 +++++++++++++++++++++++++++ src/app/api/acg/download/route.ts | 57 +++------------ src/app/api/admin/openlist/route.ts | 53 +++++++++++++- src/lib/admin.types.ts | 4 + src/lib/anime-subscription.ts | 56 +++----------- src/lib/config.ts | 23 ++++++ src/lib/openlist-offline-download.ts | 82 +++++++++++++++++++++ 7 files changed, 286 insertions(+), 94 deletions(-) create mode 100644 src/lib/openlist-offline-download.ts diff --git a/src/app/admin/page.tsx b/src/app/admin/page.tsx index 395c450..39de0e5 100644 --- a/src/app/admin/page.tsx +++ b/src/app/admin/page.tsx @@ -3155,6 +3155,11 @@ const OpenListConfigComponent = ({ const [password, setPassword] = useState(''); const [rootPaths, setRootPaths] = useState(['/']); const [offlineDownloadPath, setOfflineDownloadPath] = useState('/'); + const [offlineDownloadUseCustomSource, setOfflineDownloadUseCustomSource] = + useState(false); + const [offlineDownloadUrl, setOfflineDownloadUrl] = useState(''); + const [offlineDownloadUsername, setOfflineDownloadUsername] = useState(''); + const [offlineDownloadPassword, setOfflineDownloadPassword] = useState(''); const [scanInterval, setScanInterval] = useState(0); const [scanMode, setScanMode] = useState<'torrent' | 'name' | 'hybrid'>( 'hybrid' @@ -3183,6 +3188,16 @@ const OpenListConfigComponent = ({ : ['/']) ); setOfflineDownloadPath(config.OpenListConfig.OfflineDownloadPath || '/'); + setOfflineDownloadUseCustomSource( + config.OpenListConfig.OfflineDownloadUseCustomSource || false + ); + setOfflineDownloadUrl(config.OpenListConfig.OfflineDownloadURL || ''); + setOfflineDownloadUsername( + config.OpenListConfig.OfflineDownloadUsername || '' + ); + setOfflineDownloadPassword( + config.OpenListConfig.OfflineDownloadPassword || '' + ); setScanInterval(config.OpenListConfig.ScanInterval || 0); setScanMode(config.OpenListConfig.ScanMode || 'hybrid'); setDisableVideoPreview( @@ -3233,6 +3248,10 @@ const OpenListConfigComponent = ({ Password: password, RootPaths: rootPaths, OfflineDownloadPath: offlineDownloadPath, + OfflineDownloadUseCustomSource: offlineDownloadUseCustomSource, + OfflineDownloadURL: offlineDownloadUrl, + OfflineDownloadUsername: offlineDownloadUsername, + OfflineDownloadPassword: offlineDownloadPassword, ScanInterval: scanInterval, ScanMode: scanMode, DisableVideoPreview: disableVideoPreview, @@ -3592,6 +3611,92 @@ const OpenListConfigComponent = ({

+
+
+
+

+ 离线下载使用独立 OpenList 源 +

+

+ 开启后,存到私人影库和追番订阅会把任务提交到下方 OpenList,扫描和播放仍使用上方主 OpenList +

+
+ +
+ + {offlineDownloadUseCustomSource && ( +
+
+ + setOfflineDownloadUrl(e.target.value)} + disabled={!enabled} + placeholder='https://download-openlist-server.com' + className='w-full px-3 py-2 border border-gray-300 dark:border-gray-600 rounded-lg bg-white dark:bg-gray-800 text-gray-900 dark:text-gray-100 focus:ring-2 focus:ring-blue-500 focus:border-transparent disabled:opacity-50 disabled:cursor-not-allowed' + /> +
+ +
+
+ + + setOfflineDownloadUsername(e.target.value) + } + disabled={!enabled} + placeholder='admin' + className='w-full px-3 py-2 border border-gray-300 dark:border-gray-600 rounded-lg bg-white dark:bg-gray-800 text-gray-900 dark:text-gray-100 focus:ring-2 focus:ring-blue-500 focus:border-transparent disabled:opacity-50 disabled:cursor-not-allowed' + /> +
+
+ + + setOfflineDownloadPassword(e.target.value) + } + disabled={!enabled} + placeholder='password' + className='w-full px-3 py-2 border border-gray-300 dark:border-gray-600 rounded-lg bg-white dark:bg-gray-800 text-gray-900 dark:text-gray-100 focus:ring-2 focus:ring-blue-500 focus:border-transparent disabled:opacity-50 disabled:cursor-not-allowed' + /> +
+
+
+ )} +
+