mirror of
https://github.com/HChaZZY/PiliPlus.git
synced 2025-12-06 09:13:48 +08:00
skip segments with keyboard
Closes #1379 Signed-off-by: bggRGjQaUbCoE <githubaccount56556@proton.me>
This commit is contained in:
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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(
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user