feat: make tmdb image proxy configurable
This commit is contained in:
@@ -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';
|
||||
|
||||
@@ -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}) {
|
||||
|
||||
@@ -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(),
|
||||
|
||||
Reference in New Issue
Block a user