From 052e8f905eb7fa99b470f86ef17c164ecfc02896 Mon Sep 17 00:00:00 2001 From: bggRGjQaUbCoE Date: Sat, 5 Oct 2024 08:45:39 +0800 Subject: [PATCH] opt: get bangumiInfo --- lib/common/widgets/video_card_v.dart | 54 +++++++----- .../bangumi/introduction/controller.dart | 2 +- lib/pages/bangumi/widgets/bangumi_card_v.dart | 79 +++++++++--------- lib/pages/dynamics/controller.dart | 63 +++++++------- lib/pages/history/widgets/item.dart | 64 +++++++------- .../widgets/media_bangumi_panel.dart | 83 ++++++++++--------- lib/utils/app_scheme.dart | 56 ++++++++----- lib/utils/utils.dart | 48 +++++++++++ 8 files changed, 269 insertions(+), 180 deletions(-) diff --git a/lib/common/widgets/video_card_v.dart b/lib/common/widgets/video_card_v.dart index a0590464..77e21c0a 100644 --- a/lib/common/widgets/video_card_v.dart +++ b/lib/common/widgets/video_card_v.dart @@ -1,3 +1,4 @@ +import 'package:PiliPalaX/models/bangumi/info.dart'; import 'package:flutter/material.dart'; import 'package:flutter/rendering.dart'; import 'package:flutter_smart_dialog/flutter_smart_dialog.dart'; @@ -43,25 +44,40 @@ class VideoCardV extends StatelessWidget { return; } int epId = videoItem.param; - SmartDialog.showLoading(msg: '资源获取中'); - var result = await SearchHttp.bangumiInfo(seasonId: null, epId: epId); - SmartDialog.dismiss(); - if (result['status']) { - var bangumiDetail = result['data']; - int cid = bangumiDetail.episodes!.first.cid; - String bvid = IdUtils.av2bv(bangumiDetail.episodes!.first.aid); - String seasonId = bangumiDetail.seasonId; - Get.toNamed( - '/video?bvid=$bvid&cid=$cid&seasonId=$seasonId&epId=$epId', - arguments: { - 'pic': videoItem.pic, - 'heroTag': heroTag, - 'videoType': SearchType.media_bangumi, - }, - ); - } else { - SmartDialog.showToast(result['msg']); - } + Utils.viewBangumi(epId: epId); + // SmartDialog.showLoading(msg: '资源获取中'); + // var result = await SearchHttp.bangumiInfo(seasonId: null, epId: epId); + // SmartDialog.dismiss(); + // 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!; + // String pic = episode.cover!; + // String seasonId = bangumiDetail.seasonId; + // dynamic heroTag = Utils.makeHeroTag(cid); + // Get.toNamed( + // '/video?bvid=$bvid&cid=$cid&seasonId=$seasonId&epId=$epId', + // arguments: { + // 'pic': pic, + // 'heroTag': heroTag, + // 'videoType': SearchType.media_bangumi, + // }, + // ); + // } else { + // SmartDialog.showToast(result['msg']); + // } break; case 'av': String bvid = videoItem.bvid ?? IdUtils.av2bv(videoItem.aid); diff --git a/lib/pages/bangumi/introduction/controller.dart b/lib/pages/bangumi/introduction/controller.dart index 5b4c5f8d..9e93c4da 100644 --- a/lib/pages/bangumi/introduction/controller.dart +++ b/lib/pages/bangumi/introduction/controller.dart @@ -31,7 +31,7 @@ class BangumiIntroController extends CommonController { // 视频bvid String bvid = Get.parameters['bvid'] ?? ''; var seasonId = Get.parameters['seasonId'] != null - ? int.parse(Get.parameters['seasonId']!) + ? int.tryParse(Get.parameters['seasonId']!) : null; var epId = Get.parameters['epId'] != null ? int.tryParse(Get.parameters['epId']!) diff --git a/lib/pages/bangumi/widgets/bangumi_card_v.dart b/lib/pages/bangumi/widgets/bangumi_card_v.dart index 062a2a20..d439c847 100644 --- a/lib/pages/bangumi/widgets/bangumi_card_v.dart +++ b/lib/pages/bangumi/widgets/bangumi_card_v.dart @@ -42,45 +42,46 @@ class BangumiCardV extends StatelessWidget { child: InkWell( onTap: () async { final int seasonId = bangumiItem.seasonId; - SmartDialog.showLoading(msg: '获取中...'); - final res = await SearchHttp.bangumiInfo(seasonId: seasonId); - SmartDialog.dismiss().then((value) { - if (res['status']) { - if (res['data'].episodes.isEmpty) { - SmartDialog.showToast('资源加载失败'); - return; - } - EpisodeItem episode = res['data'].episodes.first; - int? epId = res['data'].userStatus?.progress?.lastEpId; - if (epId == null) { - epId = episode.epId; - } else { - for (var item in res['data'].episodes) { - if (item.epId == epId) { - episode = item; - break; - } - } - } - String bvid = episode.bvid!; - int cid = episode.cid!; - String pic = episode.cover!; - print('epId'); - print(epId); - String heroTag = Utils.makeHeroTag(cid); - Get.toNamed( - '/video?bvid=$bvid&cid=$cid&seasonId=$seasonId&epId=$epId', - arguments: { - 'pic': pic, - 'heroTag': heroTag, - 'videoType': SearchType.media_bangumi, - 'bangumiItem': res['data'], - }, - ); - } else { - SmartDialog.showToast(res['msg']); - } - }); + Utils.viewBangumi(seasonId: seasonId); + // SmartDialog.showLoading(msg: '获取中...'); + // final res = await SearchHttp.bangumiInfo(seasonId: seasonId); + // SmartDialog.dismiss().then((value) { + // if (res['status']) { + // if (res['data'].episodes.isEmpty) { + // SmartDialog.showToast('资源加载失败'); + // return; + // } + // EpisodeItem episode = res['data'].episodes.first; + // int? epId = res['data'].userStatus?.progress?.lastEpId; + // if (epId == null) { + // epId = episode.epId; + // } else { + // for (var item in res['data'].episodes) { + // if (item.epId == epId) { + // episode = item; + // break; + // } + // } + // } + // String bvid = episode.bvid!; + // int cid = episode.cid!; + // String pic = episode.cover!; + // // print('epId'); + // // print(epId); + // String heroTag = Utils.makeHeroTag(cid); + // Get.toNamed( + // '/video?bvid=$bvid&cid=$cid&seasonId=$seasonId&epId=$epId', + // arguments: { + // 'pic': pic, + // 'heroTag': heroTag, + // 'videoType': SearchType.media_bangumi, + // 'bangumiItem': res['data'], + // }, + // ); + // } else { + // SmartDialog.showToast(res['msg']); + // } + // }); }, child: Column( children: [ diff --git a/lib/pages/dynamics/controller.dart b/lib/pages/dynamics/controller.dart index f47ddb05..5757700d 100644 --- a/lib/pages/dynamics/controller.dart +++ b/lib/pages/dynamics/controller.dart @@ -178,37 +178,38 @@ class DynamicsController extends GetxController print('DYNAMIC_TYPE_PGC_UNION 番剧'); DynamicArchiveModel pgc = item.modules.moduleDynamic.major.pgc; if (pgc.epid != null) { - SmartDialog.showLoading(msg: '获取中...'); - var res = await SearchHttp.bangumiInfo(epId: pgc.epid); - SmartDialog.dismiss(); - if (res['status']) { - // dynamic episode -> progress episode -> first episode - EpisodeItem episode = (res['data'].episodes as List) - .firstWhereOrNull( - (item) => item.epId == pgc.epid, - ) ?? - (res['data'].episodes as List).firstWhereOrNull( - (item) => - item.epId == res['data'].userStatus?.progress?.lastEpId, - ) ?? - res['data'].episodes.first; - dynamic epId = episode.epId; - 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=${res['data'].seasonId}&epId=$epId', - arguments: { - 'pic': pic, - 'heroTag': heroTag, - 'videoType': SearchType.media_bangumi, - 'bangumiItem': res['data'], - }, - ); - } else { - SmartDialog.showToast(res['msg']); - } + Utils.viewBangumi(epId: pgc.epid); + // SmartDialog.showLoading(msg: '获取中...'); + // var res = await SearchHttp.bangumiInfo(epId: pgc.epid); + // SmartDialog.dismiss(); + // if (res['status']) { + // // dynamic episode -> progress episode -> first episode + // EpisodeItem episode = (res['data'].episodes as List) + // .firstWhereOrNull( + // (item) => item.epId == pgc.epid, + // ) ?? + // (res['data'].episodes as List).firstWhereOrNull( + // (item) => + // item.epId == res['data'].userStatus?.progress?.lastEpId, + // ) ?? + // res['data'].episodes.first; + // dynamic epId = episode.epId; + // 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=${res['data'].seasonId}&epId=$epId', + // arguments: { + // 'pic': pic, + // 'heroTag': heroTag, + // 'videoType': SearchType.media_bangumi, + // 'bangumiItem': res['data'], + // }, + // ); + // } else { + // SmartDialog.showToast(res['msg']); + // } } break; } diff --git a/lib/pages/history/widgets/item.dart b/lib/pages/history/widgets/item.dart index f6e5c7ca..74af94ec 100644 --- a/lib/pages/history/widgets/item.dart +++ b/lib/pages/history/widgets/item.dart @@ -106,34 +106,42 @@ class HistoryItem extends StatelessWidget { } } else { if (videoItem.history.epid != '') { - SmartDialog.showLoading(msg: '获取中...'); - var res = - await SearchHttp.bangumiInfo(epId: videoItem.history.epid); - SmartDialog.dismiss(); - if (res['status']) { - EpisodeItem episode = res['data'].episodes.first; - for (EpisodeItem i in res['data'].episodes) { - if (i.epId == videoItem.history.epid) { - episode = i; - break; - } - } - String bvid = episode.bvid!; - int cid = episode.cid!; - String pic = episode.cover!; - String heroTag = Utils.makeHeroTag(cid); - Get.toNamed( - '/video?bvid=$bvid&cid=$cid&seasonId=${res['data'].seasonId}&epId=${episode.epId}', - arguments: { - 'pic': pic, - 'heroTag': heroTag, - 'videoType': SearchType.media_bangumi, - 'bangumiItem': res['data'], - }, - ); - } else { - SmartDialog.showToast(res['msg']); - } + Utils.viewBangumi(epId: videoItem.history.epid); + // SmartDialog.showLoading(msg: '获取中...'); + // var res = + // await SearchHttp.bangumiInfo(epId: videoItem.history.epid); + // SmartDialog.dismiss(); + // if (res['status']) { + // var bangumiDetail = res['data']; + // EpisodeItem episode = res['data'].episodes.first; + // int? epId = res['data'].userStatus?.progress?.lastEpId; + // if (epId == null) { + // epId = episode.epId; + // } else { + // for (var item in res['data'].episodes) { + // if (item.epId == epId) { + // episode = item; + // break; + // } + // } + // } + // String bvid = episode.bvid!; + // int cid = episode.cid!; + // String pic = episode.cover!; + // String seasonId = bangumiDetail.seasonId; + // dynamic heroTag = Utils.makeHeroTag(cid); + // Get.toNamed( + // '/video?bvid=$bvid&cid=$cid&seasonId=$seasonId&epId=$epId', + // arguments: { + // 'pic': pic, + // 'heroTag': heroTag, + // 'videoType': SearchType.media_bangumi, + // 'bangumiItem': res['data'], + // }, + // ); + // } else { + // SmartDialog.showToast(res['msg']); + // } } } } else { diff --git a/lib/pages/search_panel/widgets/media_bangumi_panel.dart b/lib/pages/search_panel/widgets/media_bangumi_panel.dart index ad60fb83..e9488e4e 100644 --- a/lib/pages/search_panel/widgets/media_bangumi_panel.dart +++ b/lib/pages/search_panel/widgets/media_bangumi_panel.dart @@ -137,47 +137,48 @@ Widget searchBangumiPanel(BuildContext context, ctr, loadingState) { height: 32, child: ElevatedButton( onPressed: () async { - SmartDialog.showLoading(msg: '获取中...'); - var res = await SearchHttp.bangumiInfo( - seasonId: i.seasonId); - SmartDialog.dismiss().then((value) { - if (res['status']) { - EpisodeItem episode = - res['data'].episodes.first; - int? epId = res['data'] - .userStatus - ?.progress - ?.lastEpId; - if (epId == null) { - epId = episode.epId; - } else { - for (var item - in res['data'].episodes) { - if (item.epId == epId) { - episode = item; - break; - } - } - } - String bvid = episode.bvid!; - int cid = episode.cid!; - String pic = episode.cover!; - String heroTag = - Utils.makeHeroTag(cid); - Get.toNamed( - '/video?bvid=$bvid&cid=$cid&seasonId=${i.seasonId}&epId=$epId', - arguments: { - 'pic': pic, - 'heroTag': heroTag, - 'videoType': - SearchType.media_bangumi, - 'bangumiItem': res['data'], - }, - ); - } else { - SmartDialog.showToast(res['msg']); - } - }); + Utils.viewBangumi(seasonId: i.seasonId); + // SmartDialog.showLoading(msg: '获取中...'); + // var res = await SearchHttp.bangumiInfo( + // seasonId: i.seasonId); + // SmartDialog.dismiss().then((value) { + // if (res['status']) { + // EpisodeItem episode = + // res['data'].episodes.first; + // int? epId = res['data'] + // .userStatus + // ?.progress + // ?.lastEpId; + // if (epId == null) { + // epId = episode.epId; + // } else { + // for (var item + // in res['data'].episodes) { + // if (item.epId == epId) { + // episode = item; + // break; + // } + // } + // } + // String bvid = episode.bvid!; + // int cid = episode.cid!; + // String pic = episode.cover!; + // String heroTag = + // Utils.makeHeroTag(cid); + // Get.toNamed( + // '/video?bvid=$bvid&cid=$cid&seasonId=${i.seasonId}&epId=$epId', + // arguments: { + // 'pic': pic, + // 'heroTag': heroTag, + // 'videoType': + // SearchType.media_bangumi, + // 'bangumiItem': res['data'], + // }, + // ); + // } else { + // SmartDialog.showToast(res['msg']); + // } + // }); }, child: const Text('观看'), ), diff --git a/lib/utils/app_scheme.dart b/lib/utils/app_scheme.dart index b47a82c9..f727b307 100644 --- a/lib/utils/app_scheme.dart +++ b/lib/utils/app_scheme.dart @@ -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 bangumiPush(int? seasonId, int? epId) async { print('seasonId: $seasonId, epId: $epId'); - SmartDialog.showLoading(msg: '获取中...'); + // SmartDialog.showLoading(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: { - '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: { + // 'pic': pic, + // 'heroTag': heroTag, + // 'videoType': SearchType.media_bangumi, + // }, + // ), + // ); + // } else { + // SmartDialog.showToast(result['msg']); + // } } catch (e) { SmartDialog.showToast('番剧获取失败:$e'); } diff --git a/lib/utils/utils.dart b/lib/utils/utils.dart index 0c89ce06..50c3b5b8 100644 --- a/lib/utils/utils.dart +++ b/lib/utils/utils.dart @@ -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,