diff --git a/lib/http/user.dart b/lib/http/user.dart index 79c3e25c7..79a76f8d6 100644 --- a/lib/http/user.dart +++ b/lib/http/user.dart @@ -688,7 +688,7 @@ class UserHttp { // 稍后再看列表 static Future getMediaList({ required dynamic type, - required int bizId, + required bizId, required int ps, dynamic oid, int? otype, diff --git a/lib/pages/video/controller.dart b/lib/pages/video/controller.dart index 02c530b26..28fc084b2 100644 --- a/lib/pages/video/controller.dart +++ b/lib/pages/video/controller.dart @@ -220,11 +220,11 @@ class VideoDetailController extends GetxController late RxList mediaList = [].obs; late String watchLaterTitle = ''; bool get isPlayAll => - const ['watchLater', 'fav', 'archive'].contains(sourceType); + const ['watchLater', 'fav', 'archive', 'playlist'].contains(sourceType); int get _mediaType => switch (sourceType) { 'archive' => 1, 'watchLater' => 2, - 'fav' => 3, + 'fav' || 'playlist' => 3, _ => -1, }; diff --git a/lib/utils/app_scheme.dart b/lib/utils/app_scheme.dart index 4a9543f6f..752acfaff 100644 --- a/lib/utils/app_scheme.dart +++ b/lib/utils/app_scheme.dart @@ -25,7 +25,6 @@ class PiliScheme { listener?.cancel(); listener = appLinks.uriLinkStream.listen((uri) { - debugPrint('onAppLink: $uri'); routePush(uri); }); } @@ -66,6 +65,8 @@ class PiliScheme { int? businessId, int? oid, }) async { + // debugPrint('onAppLink: $uri'); + final String scheme = uri.scheme; final String host = uri.host; final String path = uri.path; @@ -624,12 +625,32 @@ class PiliScheme { } return hasMatch; case 'playlist': + // http://m.bilibili.com/playlist/pl12345678?bvid=BVxxxxxxxx&page_type=4 + String? mediaId = RegExp(r'/pl(\d+)', caseSensitive: false) + .firstMatch(path) + ?.group(1); String? bvid = uri.queryParameters['bvid'] ?? RegExp(r'/(BV[a-z\d]{10})', caseSensitive: false) .firstMatch(path) ?.group(1); if (bvid != null) { - videoPush(null, bvid, off: off); + if (mediaId != null) { + final int cid = await SearchHttp.ab2c(bvid: bvid); + PageUtils.toVideoPage( + 'bvid=$bvid&cid=$cid', + arguments: { + 'heroTag': Utils.makeHeroTag(bvid), + 'sourceType': 'playlist', + 'favTitle': '播放列表', + 'mediaId': mediaId, + 'mediaType': 3, + 'desc': true, + 'isContinuePlaying': true, + }, + ); + } else { + videoPush(null, bvid, off: off); + } return true; } launchURL();