From fefc2997cd797a21e3663274bd3ce2b769982736 Mon Sep 17 00:00:00 2001 From: bggRGjQaUbCoE Date: Sat, 30 Nov 2024 16:59:37 +0800 Subject: [PATCH] opt: heartbeat Signed-off-by: bggRGjQaUbCoE --- lib/pages/video/detail/view.dart | 12 ++++++++++++ lib/plugin/pl_player/controller.dart | 28 ++++++++++++++++++---------- 2 files changed, 30 insertions(+), 10 deletions(-) diff --git a/lib/pages/video/detail/view.dart b/lib/pages/video/detail/view.dart index 8076b5560..198574ca5 100644 --- a/lib/pages/video/detail/view.dart +++ b/lib/pages/video/detail/view.dart @@ -286,6 +286,16 @@ class _VideoDetailPageState extends State // ); // } + void _makeHeartBeat() { + plPlayerController!.makeHeartBeat( + plPlayerController!.positionSeconds.value, + type: 'status', + isManual: true, + bvid: videoDetailController.bvid, + cid: videoDetailController.cid.value, + ); + } + @override void dispose() { WidgetsBinding.instance.removeObserver(this); @@ -306,6 +316,7 @@ class _VideoDetailPageState extends State shutdownTimerService.handleWaitingFinished(); // _bufferedListener?.cancel(); if (plPlayerController != null) { + _makeHeartBeat(); plPlayerController!.removeStatusLister(playerListener); plPlayerController!.dispose(); } else { @@ -338,6 +349,7 @@ class _VideoDetailPageState extends State videoDetailController.brightness = plPlayerController?.brightness.value; } if (plPlayerController != null) { + _makeHeartBeat(); videoDetailController.defaultST = plPlayerController!.position.value; plPlayerController!.removeStatusLister(playerListener); plPlayerController!.pause(); diff --git a/lib/plugin/pl_player/controller.dart b/lib/plugin/pl_player/controller.dart index 91df8e758..7c4b91af4 100644 --- a/lib/plugin/pl_player/controller.dart +++ b/lib/plugin/pl_player/controller.dart @@ -5,6 +5,7 @@ import 'dart:io'; import 'dart:typed_data'; import 'package:PiliPalaX/common/widgets/segment_progress_bar.dart'; +import 'package:PiliPalaX/utils/extension.dart'; import 'package:easy_debounce/easy_throttle.dart'; import 'package:flutter/material.dart'; import 'package:flutter_smart_dialog/flutter_smart_dialog.dart'; @@ -1243,12 +1244,19 @@ class PlPlayerController { } // 记录播放记录 - Future makeHeartBeat(int progress, {type = 'playing'}) async { - if (!_enableHeart || - MineController.anonymity || - progress == 0 || - playerStatus.status.value == PlayerStatus.paused) { - return false; + Future makeHeartBeat( + int progress, { + type = 'playing', + bool isManual = false, + dynamic bvid, + dynamic cid, + }) async { + if (!_enableHeart || MineController.anonymity || progress == 0) { + return; + } else if (playerStatus.status.value == PlayerStatus.paused) { + if (isManual.not) { + return; + } } if (videoType.value == 'live') { return; @@ -1259,8 +1267,8 @@ class PlPlayerController { if (type == 'status' || type == 'completed') { await VideoHttp.heartBeat( - bvid: _bvid, - cid: _cid, + bvid: bvid ?? _bvid, + cid: cid ?? _cid, progress: isComplete ? -1 : progress, ); return; @@ -1269,8 +1277,8 @@ class PlPlayerController { else if (progress - _heartDuration >= 5) { _heartDuration = progress; await VideoHttp.heartBeat( - bvid: _bvid, - cid: _cid, + bvid: bvid ?? _bvid, + cid: cid ?? _cid, progress: progress, ); }