feat: make tmdb image proxy configurable

This commit is contained in:
ngfchl
2026-07-18 16:18:13 +08:00
parent ff13645f6f
commit 9aef265ea2
3 changed files with 33 additions and 5 deletions
+1
View File
@@ -12,6 +12,7 @@ class StorageKeys {
static const String tmdbApiKey = 'guangya.tmdbApiKey';
static const String tmdbProxyHost = 'guangya.tmdbProxyHost';
static const String tmdbProxyPort = 'guangya.tmdbProxyPort';
static const String tmdbImageProxy = 'guangya.tmdbImageProxy';
static const String mediaLibraries = 'guangya.mediaLibraries';
static const String mediaLibraryItems = 'guangya.mediaLibraryItems';
static const String mediaCategoryRules = 'guangya.mediaCategoryRules';
+12 -5
View File
@@ -16,11 +16,18 @@ enum _MediaWallFilter { all, movies, series, collections, unmatched }
String _tmdbImageURL(String path, {required String size}) {
final source = _tmdbDirectImageURL(path, size: size);
return Uri.https('wsrv.nl', '/', {
'url': source,
'output': 'webp',
'q': '85',
}).toString();
final configured = StorageManager.get<String>(
StorageKeys.tmdbImageProxy,
)?.trim();
if (configured != null && configured.isEmpty) return source;
final proxy = Uri.tryParse(configured ?? 'https://wsrv.nl');
if (proxy == null || !proxy.hasScheme || proxy.host.isEmpty) return source;
return proxy
.replace(
path: proxy.path.isEmpty ? '/' : proxy.path,
queryParameters: {'url': source, 'output': 'webp', 'q': '85'},
)
.toString();
}
String _tmdbDirectImageURL(String path, {required String size}) {
+20
View File
@@ -15,6 +15,7 @@ class _SettingsDialogState extends ConsumerState<SettingsDialog> {
final _tmdbApiKeyController = TextEditingController();
final _tmdbProxyHostController = TextEditingController();
final _tmdbProxyPortController = TextEditingController();
final _tmdbImageProxyController = TextEditingController();
final _httpProxyHostController = TextEditingController();
final _httpProxyPortController = TextEditingController();
final _scanConcurrencyController = TextEditingController();
@@ -31,6 +32,9 @@ class _SettingsDialogState extends ConsumerState<SettingsDialog> {
StorageManager.get<String>(StorageKeys.tmdbProxyHost) ?? '';
_tmdbProxyPortController.text =
StorageManager.get<String>(StorageKeys.tmdbProxyPort) ?? '';
_tmdbImageProxyController.text =
StorageManager.get<String>(StorageKeys.tmdbImageProxy) ??
'https://wsrv.nl';
_httpProxyHostController.text =
StorageManager.get<String>(StorageKeys.httpProxyHost) ?? '';
_httpProxyPortController.text =
@@ -50,6 +54,7 @@ class _SettingsDialogState extends ConsumerState<SettingsDialog> {
_tmdbApiKeyController.dispose();
_tmdbProxyHostController.dispose();
_tmdbProxyPortController.dispose();
_tmdbImageProxyController.dispose();
_httpProxyHostController.dispose();
_httpProxyPortController.dispose();
_scanConcurrencyController.dispose();
@@ -270,6 +275,17 @@ class _SettingsDialogState extends ConsumerState<SettingsDialog> {
),
),
),
_SettingsRow(
icon: Icons.image_rounded,
label: '图片加速代理',
child: SizedBox(
width: 200,
child: ShadInput(
controller: _tmdbImageProxyController,
placeholder: const Text('https://wsrv.nl(留空直连)'),
),
),
),
const SizedBox(height: 16),
const ShadSeparator.horizontal(),
const SizedBox(height: 16),
@@ -310,6 +326,10 @@ class _SettingsDialogState extends ConsumerState<SettingsDialog> {
StorageKeys.tmdbProxyPort,
_tmdbProxyPortController.text.trim(),
);
StorageManager.set(
StorageKeys.tmdbImageProxy,
_tmdbImageProxyController.text.trim(),
);
StorageManager.set(
StorageKeys.httpProxyHost,
_httpProxyHostController.text.trim(),