From 4ffa3d30f6efe2dd14e08b08a3a796c094959066 Mon Sep 17 00:00:00 2001 From: edde746 <86283021+edde746@users.noreply.github.com> Date: Sun, 31 May 2026 21:21:41 +0200 Subject: [PATCH] fix(player): preserve shader toggle preset close #1208 --- lib/providers/shader_provider.dart | 7 ++++--- .../video_controls/parts/track_controls.dart | 6 +++++- test/providers/shader_provider_test.dart | 17 +++++++++++++++++ 3 files changed, 26 insertions(+), 4 deletions(-) diff --git a/lib/providers/shader_provider.dart b/lib/providers/shader_provider.dart index 6b25f895..0023b8ba 100644 --- a/lib/providers/shader_provider.dart +++ b/lib/providers/shader_provider.dart @@ -74,9 +74,10 @@ class ShaderProvider extends ChangeNotifier with DisposableChangeNotifierMixin { Future setPreset(ShaderPreset preset) async { final service = _settingsService ?? await SettingsService.getInstance(); await service.write(SettingsService.globalShaderPreset, preset.id); - if (_savedPresetListenable == null) { - _savedPreset = preset; - _currentPreset = preset; + final changed = _savedPreset.id != preset.id || _currentPreset.id != preset.id; + _savedPreset = preset; + _currentPreset = preset; + if (changed || _savedPresetListenable == null) { safeNotifyListeners(); } } diff --git a/lib/widgets/video_controls/parts/track_controls.dart b/lib/widgets/video_controls/parts/track_controls.dart index b024c31c..e6250f2b 100644 --- a/lib/widgets/video_controls/parts/track_controls.dart +++ b/lib/widgets/video_controls/parts/track_controls.dart @@ -44,7 +44,11 @@ extension _PlexVideoControlsTrackMethods on _PlexVideoControlsState { .applyPreset(targetPreset) .then((_) async { if (!mounted) return; - await shaderProvider.setPreset(targetPreset); + if (targetPreset.isEnabled) { + await shaderProvider.setPreset(targetPreset); + } else { + shaderProvider.setCurrentPreset(targetPreset); + } if (!mounted) return; // ignore: no-empty-block - setState triggers rebuild to reflect shader changes _setControlsState(() {}); diff --git a/test/providers/shader_provider_test.dart b/test/providers/shader_provider_test.dart index 6de9e8ba..31d70d4c 100644 --- a/test/providers/shader_provider_test.dart +++ b/test/providers/shader_provider_test.dart @@ -89,6 +89,23 @@ void main() { p.dispose(); }); + test('setPreset restores current when saved preset id is unchanged', () async { + final p = ShaderProvider(); + await Future.delayed(Duration.zero); + final saved = ShaderPreset.anime4kPreset(Anime4KQuality.fast, Anime4KMode.modeA); + + await p.setPreset(saved); + p.setCurrentPreset(ShaderPreset.none); + expect(p.savedPreset, saved); + expect(p.currentPreset, ShaderPreset.none); + + await p.setPreset(saved); + expect(p.savedPreset, saved); + expect(p.currentPreset, saved); + + p.dispose(); + }); + test('reset returns to the none preset', () async { final p = ShaderProvider(); await Future.delayed(Duration.zero);