diff --git a/lib/plugin/pl_player/controller.dart b/lib/plugin/pl_player/controller.dart index 4e459543a..441a988b4 100644 --- a/lib/plugin/pl_player/controller.dart +++ b/lib/plugin/pl_player/controller.dart @@ -17,7 +17,6 @@ import 'package:PiliPlus/models/user/danmaku_rule.dart'; import 'package:PiliPlus/models/video/play/url.dart'; import 'package:PiliPlus/models_new/video/video_shot/data.dart'; import 'package:PiliPlus/pages/danmaku/danmaku_model.dart'; -import 'package:PiliPlus/pages/mine/controller.dart'; import 'package:PiliPlus/pages/sponsor_block/block_mixin.dart'; import 'package:PiliPlus/plugin/pl_player/models/data_source.dart'; import 'package:PiliPlus/plugin/pl_player/models/data_status.dart'; @@ -1525,7 +1524,7 @@ class PlPlayerController with BlockConfigMixin { // 记录播放记录 Future? makeHeartBeat( int progress, { - HeartBeatType type = HeartBeatType.playing, + HeartBeatType type = .playing, bool isManual = false, dynamic aid, dynamic bvid, @@ -1535,22 +1534,12 @@ class PlPlayerController with BlockConfigMixin { dynamic pgcType, VideoType? videoType, }) { - if (isLive) { + if (isLive || + !enableHeart || + progress == 0 || + (playerStatus.isPaused && !isManual)) { return null; } - if (!enableHeart || MineController.anonymity.value || progress == 0) { - return null; - } else if (playerStatus.isPaused) { - if (!isManual) { - return null; - } - } - bool isComplete = - playerStatus.isCompleted || type == HeartBeatType.completed; - if ((duration.value - position).inMilliseconds > 1000) { - isComplete = false; - } - // 播放状态变化时,更新 Future send() { return VideoHttp.heartBeat( @@ -1566,18 +1555,21 @@ class PlPlayerController with BlockConfigMixin { } switch (type) { - case HeartBeatType.playing: + case .playing: if (progress - _heartDuration >= 5) { _heartDuration = progress; return send(); } - case HeartBeatType.status: + case .status: if (progress - _heartDuration >= 2) { _heartDuration = progress; return send(); } - case HeartBeatType.completed: - if (isComplete) progress = -1; + case .completed: + if (playerStatus.isCompleted && + (duration.value - position).inMilliseconds <= 1000) { + progress = -1; + } return send(); } return null; diff --git a/lib/services/shutdown_timer_service.dart b/lib/services/shutdown_timer_service.dart index 21ff07774..a169a37d7 100644 --- a/lib/services/shutdown_timer_service.dart +++ b/lib/services/shutdown_timer_service.dart @@ -90,7 +90,7 @@ class ShutdownTimerService { return; } } - exit(0); + _syncProgressAndExit(); } } @@ -101,10 +101,25 @@ class ShutdownTimerService { _durationInMinutes = 0; SmartDialog.showToast('定时时间已到,已暂停'); case _ShutdownType.exit: - exit(0); + _syncProgressAndExit(); } } + void _syncProgressAndExit() { + if (PlPlayerController.instance case final player?) { + final res = player.makeHeartBeat( + player.positionSeconds.value, + type: .completed, + isManual: true, + ); + if (res != null) { + res.whenComplete(() => exit(0)); + return; + } + } + exit(0); + } + static (int hour, int minute) _parseMinutes(int minutes) => (minutes ~/ 60, minutes % 60);