diff --git a/lib/providers/settings_provider.dart b/lib/providers/settings_provider.dart index 5a926cfe..4ebbc62d 100644 --- a/lib/providers/settings_provider.dart +++ b/lib/providers/settings_provider.dart @@ -1,3 +1,4 @@ +import 'dart:async'; import 'dart:convert'; import 'dart:io'; import 'package:flutter_riverpod/flutter_riverpod.dart'; @@ -96,23 +97,29 @@ class SettingsNotifier extends Notifier { } void _syncLyricsSettingsToBackend() { + unawaited(syncLyricsSettingsToBackend()); + } + + Future syncLyricsSettingsToBackend() async { if (!PlatformBridge.supportsCoreBackend) return; - PlatformBridge.setLyricsProviders(state.lyricsProviders).catchError(( - Object e, - ) { + try { + await PlatformBridge.setLyricsProviders(state.lyricsProviders); + } catch (e) { _log.w('Failed to sync lyrics providers to backend: $e'); - }); + } - PlatformBridge.setLyricsFetchOptions({ - 'include_translation_netease': state.lyricsIncludeTranslationNetease, - 'include_romanization_netease': state.lyricsIncludeRomanizationNetease, - 'multi_person_word_by_word': state.lyricsMultiPersonWordByWord, - 'apple_elrc_word_sync': state.lyricsAppleElrcWordSync, - 'musixmatch_language': state.musixmatchLanguage, - }).catchError((Object e) { + try { + await PlatformBridge.setLyricsFetchOptions({ + 'include_translation_netease': state.lyricsIncludeTranslationNetease, + 'include_romanization_netease': state.lyricsIncludeRomanizationNetease, + 'multi_person_word_by_word': state.lyricsMultiPersonWordByWord, + 'apple_elrc_word_sync': state.lyricsAppleElrcWordSync, + 'musixmatch_language': state.musixmatchLanguage, + }); + } catch (e) { _log.w('Failed to sync lyrics fetch options to backend: $e'); - }); + } } void _syncNetworkCompatibilitySettingsToBackend() { diff --git a/lib/screens/local_album_screen.dart b/lib/screens/local_album_screen.dart index 8223ce95..d0f2bce7 100644 --- a/lib/screens/local_album_screen.dart +++ b/lib/screens/local_album_screen.dart @@ -987,6 +987,7 @@ class _LocalAlbumScreenState extends ConsumerState { final durationMs = (item.duration ?? 0) * 1000; final settings = ref.read(settingsProvider); final artistTagMode = settings.artistTagMode; + await ref.read(settingsProvider.notifier).syncLyricsSettingsToBackend(); final request = { 'file_path': item.filePath, 'cover_url': '', diff --git a/lib/screens/queue_tab.dart b/lib/screens/queue_tab.dart index 2cac17ad..3d10e165 100644 --- a/lib/screens/queue_tab.dart +++ b/lib/screens/queue_tab.dart @@ -5155,6 +5155,7 @@ class _QueueTabState extends ConsumerState { final durationMs = (item.duration ?? 0) * 1000; final settings = ref.read(settingsProvider); final artistTagMode = settings.artistTagMode; + await ref.read(settingsProvider.notifier).syncLyricsSettingsToBackend(); final request = { 'file_path': item.filePath, 'cover_url': '', diff --git a/lib/screens/track_metadata_edit_sheet.dart b/lib/screens/track_metadata_edit_sheet.dart index 63ea7139..8663a0c5 100644 --- a/lib/screens/track_metadata_edit_sheet.dart +++ b/lib/screens/track_metadata_edit_sheet.dart @@ -664,6 +664,10 @@ class _EditMetadataSheetState extends State<_EditMetadataSheet> { } setState(() => _fetching = true); + final settingsNotifier = ProviderScope.containerOf( + context, + listen: false, + ).read(settingsProvider.notifier); try { final title = _titleCtrl.text.trim(); @@ -871,6 +875,10 @@ class _EditMetadataSheetState extends State<_EditMetadataSheet> { } if (shouldFetchLyrics) { + await settingsNotifier.syncLyricsSettingsToBackend(); + + if (!mounted) return; + final lyricsTitle = ((selectedBest?['name'] ?? selectedBest?['title'] ?? title) .toString()) diff --git a/lib/screens/track_metadata_screen.dart b/lib/screens/track_metadata_screen.dart index a3b01fd6..48a6b2c1 100644 --- a/lib/screens/track_metadata_screen.dart +++ b/lib/screens/track_metadata_screen.dart @@ -3011,8 +3011,12 @@ class _TrackMetadataScreenState extends ConsumerState { try { final settings = ref.read(settingsProvider); final artistTagMode = settings.artistTagMode; - ScaffoldMessenger.of(context).showSnackBar( - SnackBar(content: Text(context.l10n.trackReEnrichSearching)), + final messenger = ScaffoldMessenger.of(context); + final l10n = context.l10n; + await ref.read(settingsProvider.notifier).syncLyricsSettingsToBackend(); + if (!mounted) return; + messenger.showSnackBar( + SnackBar(content: Text(l10n.trackReEnrichSearching)), ); final durationMs = (duration ?? 0) * 1000;