skip segments with keyboard

Closes #1379

Signed-off-by: bggRGjQaUbCoE <githubaccount56556@proton.me>
This commit is contained in:
bggRGjQaUbCoE
2025-09-30 22:15:50 +08:00
parent 15b05cc454
commit 929c51e059
3 changed files with 34 additions and 7 deletions

View File

@@ -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;
}
}

View File

@@ -323,8 +323,7 @@ class _VideoDetailPageVState extends State<VideoDetailPageV>
..removePositionListener(positionListener);
videoDetailController
..skipTimer?.cancel()
..skipTimer = null
..cancelSkipTimer()
..positionSubscription?.cancel()
..cid.close()
..animController?.removeListener(animListener);
@@ -1492,6 +1491,7 @@ class _VideoDetailPageVState extends State<VideoDetailPageV>
handlePlay();
return false;
},
onSkipSegment: videoDetailController.onSkipSegment,
child: child,
);
}
@@ -1722,13 +1722,16 @@ class _VideoDetailPageVState extends State<VideoDetailPageV>
// 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<VideoDetailPageV>
// onPressed: () {
// videoDetailController.onAddItem(2);
// },
// child: Text('index'),
// child: const Text('index'),
// ),
// ),
Obx(

View File

@@ -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;
}