diff --git a/lib/pages/main/controller.dart b/lib/pages/main/controller.dart index 05dd777b7..a677d95b1 100644 --- a/lib/pages/main/controller.dart +++ b/lib/pages/main/controller.dart @@ -59,6 +59,8 @@ class MainController extends GetxController late bool directExitOnBack = Pref.directExitOnBack; late bool minimizeOnExit = Pref.minimizeOnExit; + late bool pauseOnMinimize = Pref.pauseOnMinimize; + late bool isPlaying = false; static const _period = 5 * 60 * 1000; late int _lastSelectTime = 0; diff --git a/lib/pages/main/view.dart b/lib/pages/main/view.dart index a0eefccf7..c831291b3 100644 --- a/lib/pages/main/view.dart +++ b/lib/pages/main/view.dart @@ -9,6 +9,8 @@ import 'package:PiliPlus/models/common/nav_bar_config.dart'; import 'package:PiliPlus/pages/home/view.dart'; import 'package:PiliPlus/pages/main/controller.dart'; import 'package:PiliPlus/pages/mine/controller.dart'; +import 'package:PiliPlus/plugin/pl_player/controller.dart'; +import 'package:PiliPlus/plugin/pl_player/models/play_status.dart'; import 'package:PiliPlus/utils/app_scheme.dart'; import 'package:PiliPlus/utils/context_ext.dart'; import 'package:PiliPlus/utils/extension.dart'; @@ -131,6 +133,7 @@ class _MainAppState extends State void onWindowClose() { if (_mainController.minimizeOnExit) { windowManager.hide(); + _onHideWindow(); } else { _onClose(); } @@ -144,11 +147,40 @@ class _MainAppState extends State } } + @override + void onWindowMinimize() { + _onHideWindow(); + } + + @override + void onWindowRestore() { + _onShowWindow(); + } + + void _onHideWindow() { + if (_mainController.pauseOnMinimize) { + _mainController.isPlaying = + PlPlayerController.instance?.playerStatus.status.value == + PlayerStatus.playing; + PlPlayerController.pauseIfExists(); + } + } + + void _onShowWindow() { + if (_mainController.pauseOnMinimize) { + if (_mainController.isPlaying) { + PlPlayerController.playIfExists(); + } + } + } + @override Future onTrayIconMouseDown() async { if (await windowManager.isVisible()) { + _onHideWindow(); windowManager.hide(); } else { + _onShowWindow(); windowManager.show(); } } diff --git a/lib/pages/setting/models/play_settings.dart b/lib/pages/setting/models/play_settings.dart index 15638553f..d6e922026 100644 --- a/lib/pages/setting/models/play_settings.dart +++ b/lib/pages/setting/models/play_settings.dart @@ -3,6 +3,7 @@ import 'dart:io'; import 'package:PiliPlus/common/widgets/custom_icon.dart'; import 'package:PiliPlus/models/common/settings_type.dart'; import 'package:PiliPlus/models/common/video/subtitle_pref_type.dart'; +import 'package:PiliPlus/pages/main/controller.dart'; import 'package:PiliPlus/pages/setting/models/model.dart'; import 'package:PiliPlus/pages/setting/widgets/select_dialog.dart'; import 'package:PiliPlus/plugin/pl_player/models/bottom_progress_behavior.dart'; @@ -130,6 +131,18 @@ List get playSettings => [ } }, ), + SettingsModel( + settingsType: SettingsType.sw1tch, + title: '最小化时暂停/还原时播放', + leading: const Icon(Icons.pause_circle_outline), + setKey: SettingBoxKey.pauseOnMinimize, + defaultVal: false, + onChanged: (value) { + try { + Get.find().pauseOnMinimize = value; + } catch (_) {} + }, + ), const SettingsModel( settingsType: SettingsType.sw1tch, title: '启用键盘控制', diff --git a/lib/utils/storage_key.dart b/lib/utils/storage_key.dart index 7f81b4047..41697fc8c 100644 --- a/lib/utils/storage_key.dart +++ b/lib/utils/storage_key.dart @@ -25,7 +25,8 @@ abstract class SettingBoxKey { enableAutoExit = 'enableAutoExit', enableOnlineTotal = 'enableOnlineTotal', showSuperChat = 'showSuperChat', - keyboardControl = 'keyboardControl'; + keyboardControl = 'keyboardControl', + pauseOnMinimize = 'pauseOnMinimize'; static const String enableVerticalExpand = 'enableVerticalExpand', feedBackEnable = 'feedBackEnable', diff --git a/lib/utils/storage_pref.dart b/lib/utils/storage_pref.dart index 5ca97d30d..88e066b6e 100644 --- a/lib/utils/storage_pref.dart +++ b/lib/utils/storage_pref.dart @@ -832,4 +832,7 @@ abstract class Pref { static bool get keyboardControl => _setting.get(SettingBoxKey.keyboardControl, defaultValue: true); + + static bool get pauseOnMinimize => + _setting.get(SettingBoxKey.pauseOnMinimize, defaultValue: false); }