diff --git a/lib/pages/video/controller.dart b/lib/pages/video/controller.dart index 07965b120..b664930ae 100644 --- a/lib/pages/video/controller.dart +++ b/lib/pages/video/controller.dart @@ -843,6 +843,11 @@ class VideoDetailController extends GetxController }); } + void cancelSkipTimer() { + skipTimer?.cancel(); + skipTimer = null; + } + void onRemoveItem(int index, item) { EasyThrottle.throttle( 'onRemoveItem', @@ -851,8 +856,7 @@ class VideoDetailController extends GetxController try { listData.removeAt(index); if (listData.isEmpty) { - skipTimer?.cancel(); - skipTimer = null; + cancelSkipTimer(); } listKey.currentState?.removeItem( index, @@ -1689,4 +1693,19 @@ class VideoDetailController extends GetxController ); } } + + bool onSkipSegment() { + try { + if (plPlayerController.enableSponsorBlock) { + if (listData.lastOrNull case SegmentModel item) { + onSkip(item); + onRemoveItem(listData.indexOf(item), item); + return true; + } + } + } catch (_) { + if (kDebugMode) rethrow; + } + return false; + } } diff --git a/lib/pages/video/view.dart b/lib/pages/video/view.dart index 28c9e48a7..2721dfb0b 100644 --- a/lib/pages/video/view.dart +++ b/lib/pages/video/view.dart @@ -323,8 +323,7 @@ class _VideoDetailPageVState extends State ..removePositionListener(positionListener); videoDetailController - ..skipTimer?.cancel() - ..skipTimer = null + ..cancelSkipTimer() ..positionSubscription?.cancel() ..cid.close() ..animController?.removeListener(animListener); @@ -1492,6 +1491,7 @@ class _VideoDetailPageVState extends State handlePlay(); return false; }, + onSkipSegment: videoDetailController.onSkipSegment, child: child, ); } @@ -1722,13 +1722,16 @@ class _VideoDetailPageVState extends State // videoDetailController.onAddItem( // SegmentModel( // UUID: '', - // segmentType: SegmentType.sponsor, + // segmentType: + // SegmentType.values[Utils.random.nextInt( + // SegmentType.values.length, + // )], // segment: Pair(first: 0, second: 0), // skipType: SkipType.alwaysSkip, // ), // ); // }, - // child: Text('skip'), + // child: const Text('skip'), // ), // ), // Positioned( @@ -1738,7 +1741,7 @@ class _VideoDetailPageVState extends State // onPressed: () { // videoDetailController.onAddItem(2); // }, - // child: Text('index'), + // child: const Text('index'), // ), // ), Obx( diff --git a/lib/pages/video/widgets/player_focus.dart b/lib/pages/video/widgets/player_focus.dart index 66f610702..8c718e77b 100644 --- a/lib/pages/video/widgets/player_focus.dart +++ b/lib/pages/video/widgets/player_focus.dart @@ -21,6 +21,7 @@ class PlayerFocus extends StatelessWidget { this.introController, required this.onSendDanmaku, this.canPlay, + this.onSkipSegment, }); final Widget child; @@ -28,6 +29,7 @@ class PlayerFocus extends StatelessWidget { final CommonIntroController? introController; final VoidCallback onSendDanmaku; final bool Function()? canPlay; + final bool Function()? onSkipSegment; static bool _shouldHandle(LogicalKeyboardKey logicalKey) { return logicalKey == LogicalKeyboardKey.tab || @@ -209,6 +211,9 @@ class PlayerFocus extends StatelessWidget { return true; case LogicalKeyboardKey.enter: + if (onSkipSegment?.call() ?? false) { + return true; + } onSendDanmaku(); return true; }