diff --git a/lib/models/settings/video_player_settings.dart b/lib/models/settings/video_player_settings.dart index 427f8bf32..d0f397ea2 100644 --- a/lib/models/settings/video_player_settings.dart +++ b/lib/models/settings/video_player_settings.dart @@ -67,7 +67,7 @@ abstract class VideoPlayerSettingsModel with _$VideoPlayerSettingsModel { @Default(BoxFit.contain) BoxFit videoFit, @Default(false) bool fillScreen, @Default(true) bool hardwareAccel, - @Default(false) bool useLibass, + @Default(true) bool useLibass, @Default(false) bool enableTunneling, @Default(32) int bufferSize, PlayerOptions? playerOptions, diff --git a/lib/models/settings/video_player_settings.freezed.dart b/lib/models/settings/video_player_settings.freezed.dart index ef65e7386..b9f974fb6 100644 --- a/lib/models/settings/video_player_settings.freezed.dart +++ b/lib/models/settings/video_player_settings.freezed.dart @@ -530,7 +530,7 @@ class _VideoPlayerSettingsModel extends VideoPlayerSettingsModel this.videoFit = BoxFit.contain, this.fillScreen = false, this.hardwareAccel = true, - this.useLibass = false, + this.useLibass = true, this.enableTunneling = false, this.bufferSize = 32, this.playerOptions, diff --git a/lib/models/settings/video_player_settings.g.dart b/lib/models/settings/video_player_settings.g.dart index 0b4547e8d..4441a23cb 100644 --- a/lib/models/settings/video_player_settings.g.dart +++ b/lib/models/settings/video_player_settings.g.dart @@ -14,7 +14,7 @@ _VideoPlayerSettingsModel _$VideoPlayerSettingsModelFromJson( BoxFit.contain, fillScreen: json['fillScreen'] as bool? ?? false, hardwareAccel: json['hardwareAccel'] as bool? ?? true, - useLibass: json['useLibass'] as bool? ?? false, + useLibass: json['useLibass'] as bool? ?? true, enableTunneling: json['enableTunneling'] as bool? ?? false, bufferSize: (json['bufferSize'] as num?)?.toInt() ?? 32, playerOptions: diff --git a/lib/screens/settings/player_settings_page.dart b/lib/screens/settings/player_settings_page.dart index ff41cc885..7f0b1107d 100644 --- a/lib/screens/settings/player_settings_page.dart +++ b/lib/screens/settings/player_settings_page.dart @@ -1,5 +1,3 @@ -import 'dart:io' show Platform; - import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; @@ -50,6 +48,8 @@ class _PlayerSettingsPageState extends ConsumerState { final userSettings = ref.watch(userProvider.select((value) => value?.userSettings)); + final currentPlayer = videoSettings.wantedPlayer; + return SettingsScaffold( label: context.localized.settingsPlayerTitle, items: [ @@ -359,143 +359,97 @@ class _PlayerSettingsPageState extends ConsumerState { ); }), ), - AnimatedFadeSize( - child: switch (videoSettings.wantedPlayer) { - PlayerOptions.libMPV => Column( - children: [ - SettingsListTile( - label: Text(context.localized.settingsPlayerVideoHWAccelTitle), - subLabel: Text(context.localized.settingsPlayerVideoHWAccelDesc), - onTap: () => provider.setHardwareAccel(!videoSettings.hardwareAccel), - trailing: Switch( - value: videoSettings.hardwareAccel, - onChanged: (value) => provider.setHardwareAccel(value), - ), - ), - if (!kIsWeb) - SettingsListTile( - label: Text(context.localized.settingsPlayerNativeLibassAccelTitle), - subLabel: Text(context.localized.settingsPlayerNativeLibassAccelDesc), - onTap: () => provider.setUseLibass(!videoSettings.useLibass), - trailing: Switch( - value: videoSettings.useLibass, - onChanged: (value) => provider.setUseLibass(value), - ), - ), - if (!videoSettings.useLibass) - SettingsListTile( - label: Text(context.localized.settingsPlayerCustomSubtitlesTitle), - subLabel: Text(context.localized.settingsPlayerCustomSubtitlesDesc), - onTap: videoSettings.useLibass - ? null - : () { - showDialog( - context: context, - barrierDismissible: true, - useSafeArea: false, - builder: (context) => const SubtitleEditor(), - ); - }, - ), - AnimatedFadeSize( - child: videoSettings.useLibass && videoSettings.hardwareAccel && Platform.isAndroid - ? SettingsMessageBox( - context.localized.settingsPlayerMobileWarning, - messageType: MessageType.warning, - ) - : Container(), - ), - SettingsListTile( - label: Text(context.localized.settingsPlayerBufferSizeTitle), - subLabel: Text(context.localized.settingsPlayerBufferSizeDesc), - trailing: IntInputField( - suffix: 'MB', - controller: TextEditingController(text: videoSettings.bufferSize.toString()), - onSubmitted: (value) { - if (value != null) { - provider.setBufferSize(value); - } - }, - ), - ), - ], + ...[ + if (currentPlayer == PlayerOptions.libMPV) ...[ + SettingsListTile( + label: Text(context.localized.settingsPlayerVideoHWAccelTitle), + subLabel: Text(context.localized.settingsPlayerVideoHWAccelDesc), + onTap: () => provider.setHardwareAccel(!videoSettings.hardwareAccel), + trailing: Switch( + value: videoSettings.hardwareAccel, + onChanged: (value) => provider.setHardwareAccel(value), ), - PlayerOptions.nativePlayer => Column( - children: [ - SettingsListTile( - label: Text(context.localized.mediaTunnelingTitle), - subLabel: Text(context.localized.mediaTunnelingDesc), - onTap: () => provider.setMediaTunneling(!videoSettings.enableTunneling), - trailing: Switch( - value: videoSettings.enableTunneling, - onChanged: (value) => provider.setMediaTunneling(value), - ), - ), - if (ref.read(argumentsStateProvider).leanBackMode) - SettingsListTile( - label: Text(context.localized.playerSettingsScreensaverTitle), - subLabel: Text(context.localized.playerSettingsScreensaverDesc), - trailing: EnumBox( - current: videoSettings.screensaver.label(context), - itemBuilder: (context) => Screensaver.values - .map( - (entry) => ItemActionButton( - label: Text(entry.label(context)), - action: () => provider.setScreensaver(entry), - ), - ) - .toList(), + ), + if (!kIsWeb) + SettingsListTile( + label: Text(context.localized.settingsPlayerNativeLibassAccelTitle), + subLabel: Text(context.localized.settingsPlayerNativeLibassAccelDesc), + onTap: () => provider.setUseLibass(!videoSettings.useLibass), + trailing: Switch( + value: videoSettings.useLibass, + onChanged: (value) => provider.setUseLibass(value), + ), + ), + ], + if (currentPlayer == PlayerOptions.nativePlayer) + SettingsListTile( + label: Text(context.localized.mediaTunnelingTitle), + subLabel: Text(context.localized.mediaTunnelingDesc), + onTap: () => provider.setMediaTunneling(!videoSettings.enableTunneling), + trailing: Switch( + value: videoSettings.enableTunneling, + onChanged: (value) => provider.setMediaTunneling(value), + ), + ), + if (ref.read(argumentsStateProvider).leanBackMode) + SettingsListTile( + label: Text(context.localized.playerSettingsScreensaverTitle), + subLabel: Text(context.localized.playerSettingsScreensaverDesc), + trailing: EnumBox( + current: videoSettings.screensaver.label(context), + itemBuilder: (context) => Screensaver.values + .map( + (entry) => ItemActionButton( + label: Text(entry.label(context)), + action: () => provider.setScreensaver(entry), ), - ), - SettingsListTile( - label: Text(context.localized.settingsPlayerCustomSubtitlesTitle), - subLabel: Text(context.localized.settingsPlayerCustomSubtitlesDesc), - onTap: videoSettings.useLibass - ? null - : () { - showDialog( - context: context, - barrierDismissible: true, - useSafeArea: false, - builder: (context) => const SubtitleEditor(), - ); - }, - ), - ], + ) + .toList(), ), - PlayerOptions.libMDK => Column( - children: [ - SettingsListTile( - label: Text(context.localized.settingsPlayerCustomSubtitlesTitle), - subLabel: Text(context.localized.settingsPlayerCustomSubtitlesDesc), - onTap: () { - showDialog( - context: context, - barrierDismissible: true, - useSafeArea: false, - builder: (context) => const SubtitleEditor(), - ); - }, - ), - SettingsListTile( - label: Text(context.localized.advancedVideoOptionsTitle), - subLabel: Text(context.localized.advancedVideoOptionsDesc), - onTap: () { - provider.setEnableAdvancedVideoOptions(!videoSettings.enableAdvancedVideoOptions); - ref.read(videoPlayerProvider.notifier).init(); - }, - trailing: Switch( - value: videoSettings.enableAdvancedVideoOptions, - onChanged: (value) { - provider.setEnableAdvancedVideoOptions(value); - ref.read(videoPlayerProvider.notifier).init(); - }, - ), - ), - ], + ), + SettingsListTile( + label: Text(context.localized.settingsPlayerCustomSubtitlesTitle), + subLabel: Text(context.localized.settingsPlayerCustomSubtitlesDesc), + onTap: () { + showDialog( + context: context, + barrierDismissible: true, + useSafeArea: false, + builder: (context) => const SubtitleEditor(), + ); + }, + ), + if (currentPlayer == PlayerOptions.libMPV) + SettingsListTile( + label: Text(context.localized.settingsPlayerBufferSizeTitle), + subLabel: Text(context.localized.settingsPlayerBufferSizeDesc), + trailing: IntInputField( + suffix: 'MB', + controller: TextEditingController(text: videoSettings.bufferSize.toString()), + onSubmitted: (value) { + if (value != null) { + provider.setBufferSize(value); + } + }, ), - }, - ), + ), + if (currentPlayer == PlayerOptions.libMDK) + SettingsListTile( + label: Text(context.localized.advancedVideoOptionsTitle), + subLabel: Text(context.localized.advancedVideoOptionsDesc), + onTap: () { + provider.setEnableAdvancedVideoOptions(!videoSettings.enableAdvancedVideoOptions); + ref.read(videoPlayerProvider.notifier).init(); + }, + trailing: Switch( + value: videoSettings.enableAdvancedVideoOptions, + onChanged: (value) { + provider.setEnableAdvancedVideoOptions(value); + ref.read(videoPlayerProvider.notifier).init(); + }, + ), + ), + ], Column( children: [ SettingsListTile(