fix(player): preserve shader toggle preset

close #1208
This commit is contained in:
edde746
2026-05-31 21:25:46 +02:00
parent d5c8778074
commit 4ffa3d30f6
3 changed files with 26 additions and 4 deletions
+4 -3
View File
@@ -74,9 +74,10 @@ class ShaderProvider extends ChangeNotifier with DisposableChangeNotifierMixin {
Future<void> 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();
}
}
@@ -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(() {});
+17
View File
@@ -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);