opt: get bangumiInfo

This commit is contained in:
bggRGjQaUbCoE
2024-10-05 08:45:39 +08:00
parent 6c84b0c6cb
commit 052e8f905e
8 changed files with 269 additions and 180 deletions

View File

@@ -1,5 +1,6 @@
import 'dart:async';
import 'package:PiliPalaX/models/bangumi/info.dart';
import 'package:PiliPalaX/models/common/reply_type.dart';
import 'package:PiliPalaX/pages/video/detail/reply/widgets/reply_item.dart';
import 'package:app_links/app_links.dart';
@@ -270,28 +271,41 @@ class PiliScheme {
// 番剧跳转
static Future<void> bangumiPush(int? seasonId, int? epId) async {
print('seasonId: $seasonId, epId: $epId');
SmartDialog.showLoading<dynamic>(msg: '获取中...');
// SmartDialog.showLoading<dynamic>(msg: '获取中...');
try {
var result = await SearchHttp.bangumiInfo(seasonId: seasonId, epId: epId);
if (result['status']) {
var bangumiDetail = result['data'];
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) => Utils.toDupNamed(
'/video?bvid=$bvid&cid=$cid&seasonId=$seasonId&epId=$epId',
arguments: <String, dynamic>{
'pic': bangumiDetail.cover,
'heroTag': heroTag,
'videoType': SearchType.media_bangumi,
},
),
);
} else {
SmartDialog.showToast(result['msg']);
}
Utils.viewBangumi(seasonId: seasonId, epId: epId);
// var result = await SearchHttp.bangumiInfo(seasonId: seasonId, epId: epId);
// if (result['status']) {
// var bangumiDetail = result['data'];
// EpisodeItem episode = result['data'].episodes.first;
// int? epId = result['data'].userStatus?.progress?.lastEpId;
// if (epId == null) {
// epId = episode.epId;
// } else {
// for (var item in result['data'].episodes) {
// if (item.epId == epId) {
// episode = item;
// break;
// }
// }
// }
// String bvid = episode.bvid!;
// int cid = episode.cid!;
// dynamic pic = episode.cover;
// final String heroTag = Utils.makeHeroTag(cid);
// SmartDialog.dismiss().then(
// (e) => Utils.toDupNamed(
// '/video?bvid=$bvid&cid=$cid&seasonId=${bangumiDetail.seasonId}&epId=$epId',
// arguments: <String, dynamic>{
// 'pic': pic,
// 'heroTag': heroTag,
// 'videoType': SearchType.media_bangumi,
// },
// ),
// );
// } else {
// SmartDialog.showToast(result['msg']);
// }
} catch (e) {
SmartDialog.showToast('番剧获取失败:$e');
}

View File

@@ -5,6 +5,9 @@ import 'dart:async';
import 'dart:convert';
import 'dart:io';
import 'dart:math';
import 'package:PiliPalaX/http/search.dart';
import 'package:PiliPalaX/models/bangumi/info.dart';
import 'package:PiliPalaX/models/common/search_type.dart';
import 'package:PiliPalaX/utils/storage.dart';
import 'package:crypto/crypto.dart';
import 'package:device_info_plus/device_info_plus.dart';
@@ -22,6 +25,51 @@ import '../models/github/latest.dart';
class Utils {
static final Random random = Random();
static void viewBangumi({
dynamic seasonId,
dynamic epId,
}) async {
SmartDialog.showLoading(msg: '资源获取中');
var result = await SearchHttp.bangumiInfo(seasonId: seasonId, epId: epId);
SmartDialog.dismiss();
if (result['status']) {
if (result['data'].episodes.isEmpty) {
SmartDialog.showToast('资源加载失败');
return;
}
// epId episode -> progress episode -> first episode
EpisodeItem? episode;
if (epId != null) {
EpisodeItem? e = (result['data'].episodes as List).firstWhereOrNull(
(item) => item.epId == epId,
);
if (e != null) {
episode = e;
}
}
episode ??= (result['data'].episodes as List).firstWhereOrNull(
(item) =>
item.epId == result['data'].userStatus?.progress?.lastEpId,
) ??
result['data'].episodes.first;
dynamic bvid = episode?.bvid;
dynamic cid = episode?.cid;
dynamic pic = episode?.cover;
dynamic heroTag = Utils.makeHeroTag(cid);
Utils.toDupNamed(
'/video?bvid=$bvid&cid=$cid&seasonId=${result['data'].seasonId}&epId=${episode?.epId}',
arguments: {
'pic': pic,
'heroTag': heroTag,
'videoType': SearchType.media_bangumi,
'bangumiItem': result['data'],
},
);
} else {
SmartDialog.showToast(result['msg']);
}
}
static void toDupNamed(
String page, {
dynamic arguments,