mod: seek from dm

Closes #208

Signed-off-by: bggRGjQaUbCoE <githubaccount56556@proton.me>
This commit is contained in:
bggRGjQaUbCoE
2025-02-23 10:42:21 +08:00
parent 6a615c408b
commit 09cebd70ae
2 changed files with 37 additions and 7 deletions

View File

@@ -1070,7 +1070,12 @@ class VideoDetailController extends GetxController
if (data.dash == null && data.durl != null) { if (data.dash == null && data.durl != null) {
videoUrl = data.durl!.first.url!; videoUrl = data.durl!.first.url!;
audioUrl = ''; audioUrl = '';
this.defaultST = defaultST ?? Duration.zero; if (Get.arguments['progress'] != null) {
this.defaultST = Duration(milliseconds: Get.arguments['progress']);
Get.arguments['progress'] = null;
} else {
this.defaultST = defaultST ?? Duration.zero;
}
// 实际为FLV/MP4格式但已被淘汰这里仅做兜底处理 // 实际为FLV/MP4格式但已被淘汰这里仅做兜底处理
firstVideo = VideoItem( firstVideo = VideoItem(
id: data.quality!, id: data.quality!,
@@ -1188,7 +1193,13 @@ class VideoDetailController extends GetxController
audioUrl = ''; audioUrl = '';
} }
// //
this.defaultST = defaultST ?? Duration(milliseconds: data.lastPlayTime!); if (Get.arguments['progress'] != null) {
this.defaultST = Duration(milliseconds: Get.arguments['progress']);
Get.arguments['progress'] = null;
} else {
this.defaultST =
defaultST ?? Duration(milliseconds: data.lastPlayTime!);
}
if (autoPlay.value) { if (autoPlay.value) {
isShowCover.value = false; isShowCover.value = false;
await playerInit(); await playerInit();

View File

@@ -86,6 +86,7 @@ class PiliScheme {
} }
return false; return false;
case 'video': case 'video':
// bilibili://video/12345678?dm_progress=123000&cid=12345678&dmid=12345678
if (uri.queryParameters['comment_root_id'] != null) { if (uri.queryParameters['comment_root_id'] != null) {
// to check // to check
// to video reply // to video reply
@@ -130,11 +131,27 @@ class PiliScheme {
.firstMatch(path) .firstMatch(path)
?.group(1); ?.group(1);
if (aid != null || bvid != null) { if (aid != null || bvid != null) {
videoPush( if (uri.queryParameters['cid'] != null) {
aid != null ? int.parse(aid) : null, bvid ??= IdUtils.av2bv(int.parse(aid!));
bvid, Utils.toDupNamed(
off: off, '/video?bvid=$bvid&cid=${uri.queryParameters['cid']}',
); arguments: {
'pic': null,
'heroTag': Utils.makeHeroTag(aid),
if (uri.queryParameters['dm_progress'] != null)
'progress':
int.tryParse(uri.queryParameters['dm_progress']!),
},
off: off,
);
} else {
videoPush(
aid != null ? int.parse(aid) : null,
bvid,
off: off,
progress: uri.queryParameters['dm_progress'],
);
}
return true; return true;
} }
return false; return false;
@@ -529,6 +546,7 @@ class PiliScheme {
String? bvid, { String? bvid, {
bool showDialog = true, bool showDialog = true,
bool off = false, bool off = false,
String? progress,
}) async { }) async {
try { try {
aid ??= IdUtils.bv2av(bvid!); aid ??= IdUtils.bv2av(bvid!);
@@ -545,6 +563,7 @@ class PiliScheme {
arguments: { arguments: {
'pic': null, 'pic': null,
'heroTag': Utils.makeHeroTag(aid), 'heroTag': Utils.makeHeroTag(aid),
if (progress != null) 'progress': int.tryParse(progress),
}, },
off: off, off: off,
); );