diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml
index 2e3896e1..97cef67a 100644
--- a/android/app/src/main/AndroidManifest.xml
+++ b/android/app/src/main/AndroidManifest.xml
@@ -65,13 +65,11 @@
/>
-
-
-
-
+
+
diff --git a/lib/utils/app_scheme.dart b/lib/utils/app_scheme.dart
index 5ac64a97..8055d512 100644
--- a/lib/utils/app_scheme.dart
+++ b/lib/utils/app_scheme.dart
@@ -12,7 +12,7 @@ class PiliSchame {
static AppScheme appScheme = AppSchemeImpl.getInstance() as AppScheme;
static void init() async {
///
- SchemeEntity? value = await appScheme.getInitScheme();
+ final SchemeEntity? value = await appScheme.getInitScheme();
if (value != null) {
_routePush(value);
}
@@ -34,9 +34,9 @@ class PiliSchame {
/// 路由跳转
static void _routePush(value) async {
- String scheme = value.scheme;
- String host = value.host;
- String path = value.path;
+ final String scheme = value.scheme;
+ final String host = value.host;
+ final String path = value.path;
if (scheme == 'bilibili') {
// bilibili://root
@@ -55,9 +55,19 @@ class PiliSchame {
// bilibili://video/{aid}
else if (host == 'video') {
- var pathQuery = path.split('/').last;
- int aid = int.parse(pathQuery);
- _videoPush(aid, null);
+ String pathQuery = path.split('/').last;
+ final numericRegex = RegExp(r'^[0-9]+$');
+ if (numericRegex.hasMatch(pathQuery)) {
+ pathQuery = 'AV$pathQuery';
+ }
+ Map map = IdUtils.matchAvorBv(input: pathQuery);
+ if (map.containsKey('AV')) {
+ _videoPush(map['AV'], null);
+ } else if (map.containsKey('BV')) {
+ _videoPush(null, map['BV']);
+ } else {
+ SmartDialog.showToast('投稿匹配失败');
+ }
}
// bilibili://live/{roomid}
@@ -74,6 +84,22 @@ class PiliSchame {
_bangumiPush(int.parse(seasonId));
}
}
+ // 专栏 bilibili://opus/detail/883089655985078289
+ else if (host == 'opus') {
+ if (path.startsWith('/detail')) {
+ var opusId = path.split('/').last;
+ Get.toNamed(
+ '/webview',
+ parameters: {
+ 'url': 'https://www.bilibili.com/opus/$opusId',
+ 'type': 'url',
+ 'pageTitle': '',
+ },
+ );
+ }
+ } else if (host == 'search') {
+ Get.toNamed('/searchResult', parameters: {'keyword': ''});
+ }
}
}
@@ -109,9 +135,9 @@ class PiliSchame {
var result = await SearchHttp.bangumiInfo(seasonId: seasonId, epId: null);
if (result['status']) {
var bangumiDetail = result['data'];
- int cid = bangumiDetail.episodes!.first.cid;
- String bvid = IdUtils.av2bv(bangumiDetail.episodes!.first.aid);
- String heroTag = Utils.makeHeroTag(cid);
+ final int cid = bangumiDetail.episodes!.first.cid;
+ final String bvid = IdUtils.av2bv(bangumiDetail.episodes!.first.aid);
+ final String heroTag = Utils.makeHeroTag(cid);
var epId = bangumiDetail.episodes!.first.id;
SmartDialog.dismiss().then(
(e) => Get.toNamed(
@@ -132,9 +158,9 @@ class PiliSchame {
static void _fullPathPush(value) async {
// https://m.bilibili.com/bangumi/play/ss39708
// https | m.bilibili.com | /bangumi/play/ss39708
- String scheme = value.scheme!;
- String host = value.host!;
- String? path = value.path;
+ final String scheme = value.scheme!;
+ final String host = value.host!;
+ final String? path = value.path;
// Map query = value.query!;
if (host.startsWith('live.bilibili')) {
int roomId = int.parse(path!.split('/').last);
@@ -148,11 +174,11 @@ class PiliSchame {
return;
}
if (path != null) {
- String area = path.split('/')[1];
+ final String area = path.split('/')[1];
switch (area) {
case 'bangumi':
// print('番剧');
- String seasonId = path.split('/').last;
+ final String seasonId = path.split('/').last;
_bangumiPush(matchNum(seasonId).first);
break;
case 'video':
@@ -177,9 +203,9 @@ class PiliSchame {
}
static List matchNum(String str) {
- RegExp regExp = RegExp(r'\d+');
- Iterable matches = regExp.allMatches(str);
+ final RegExp regExp = RegExp(r'\d+');
+ final Iterable matches = regExp.allMatches(str);
- return matches.map((match) => int.parse(match.group(0)!)).toList();
+ return matches.map((Match match) => int.parse(match.group(0)!)).toList();
}
}
diff --git a/lib/utils/id_utils.dart b/lib/utils/id_utils.dart
index 8e2e6d70..61e55737 100644
--- a/lib/utils/id_utils.dart
+++ b/lib/utils/id_utils.dart
@@ -66,7 +66,7 @@ class IdUtils {
result['BV'] = bvs[0].substring(0, 2).toUpperCase() + bvs[0].substring(2);
}
if (avs.isNotEmpty) {
- result['AV'] = avs[0].substring(2);
+ result['AV'] = int.parse(avs[0].substring(2));
}
return result;
}