diff --git a/lib/models/bangumi/info.dart b/lib/models/bangumi/info.dart index b71d327e..025eaafc 100644 --- a/lib/models/bangumi/info.dart +++ b/lib/models/bangumi/info.dart @@ -78,7 +78,7 @@ class BangumiInfoModel { String? title; int? total; int? type; - Map? userStatus; + UserStatus? userStatus; String? staff; BangumiInfoModel.fromJson(Map json) { @@ -121,7 +121,7 @@ class BangumiInfoModel { title = json['title']; total = json['total']; type = json['type']; - userStatus = json['user_status']; + userStatus = UserStatus.fromJson(json['user_status']); staff = json['staff']; } } @@ -138,6 +138,7 @@ class EpisodeItem { this.dimension, this.duration, this.enableVt, + this.epId, this.from, this.id, this.isViewHide, @@ -167,6 +168,7 @@ class EpisodeItem { Map? dimension; int? duration; bool? enableVt; + int? epId; String? from; int? id; bool? isViewHide; @@ -196,6 +198,7 @@ class EpisodeItem { dimension = json['dimension']; duration = json['duration']; enableVt = json['enable_vt']; + epId = json['ep_id']; from = json['from']; id = json['id']; isViewHide = json['is_view_hide']; @@ -215,3 +218,69 @@ class EpisodeItem { vid = json['vid']; } } +class UserStatus { + UserStatus({ + this.areaLimit, + this.banAreaShow, + this.follow, + this.followStatus, + this.login, + this.pay, + this.payPackPaid, + this.progress, + this.sponsor, + this.vipInfo, + }); + int? areaLimit; + int? banAreaShow; + int? follow; + int? followStatus; + int? login; + int? pay; + int? payPackPaid; + UserProgress? progress; + int? sponsor; + VipInfo? vipInfo; + UserStatus.fromJson(Map json) { + areaLimit = json['area_limit']; + banAreaShow = json['ban_area_show']; + follow = json['follow']; + followStatus = json['follow_status']; + login = json['login']; + pay = json['pay']; + payPackPaid = json['pay_pack_paid']; + progress = UserProgress.fromJson(json['progress']); + sponsor = json['sponsor']; + vipInfo = VipInfo.fromJson(json['vip_info']); + } +} +class UserProgress { + UserProgress({ + this.lastEpId, + this.lastEpIndex, + this.lastTime, + }); + int? lastEpId; + String? lastEpIndex; + int? lastTime; + UserProgress.fromJson(Map json) { + lastEpId = json['last_ep_id']; + lastEpIndex = json['last_ep_index']; + lastTime = json['last_time']; + } +} +class VipInfo { + VipInfo({ + this.dueDate, + this.status, + this.type, + }); + int? dueDate; + int? status; + int? type; + VipInfo.fromJson(Map json) { + dueDate = json['due_date']; + status = json['status']; + type = json['type']; + } +} \ No newline at end of file diff --git a/lib/pages/bangumi/widgets/bangumu_card_v.dart b/lib/pages/bangumi/widgets/bangumu_card_v.dart index b7f77c0d..19bde515 100644 --- a/lib/pages/bangumi/widgets/bangumu_card_v.dart +++ b/lib/pages/bangumi/widgets/bangumu_card_v.dart @@ -52,12 +52,25 @@ class BangumiCardV extends StatelessWidget { 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', + '/video?bvid=$bvid&cid=$cid&seasonId=$seasonId&epId=$epId', arguments: { 'pic': pic, 'heroTag': heroTag, diff --git a/lib/pages/dynamics/controller.dart b/lib/pages/dynamics/controller.dart index 374f84ad..ca33e40e 100644 --- a/lib/pages/dynamics/controller.dart +++ b/lib/pages/dynamics/controller.dart @@ -225,12 +225,23 @@ class DynamicsController extends GetxController { SmartDialog.dismiss(); 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=${res['data'].seasonId}', + '/video?bvid=$bvid&cid=$cid&seasonId=${res['data'].seasonId}&epid=$epId', arguments: { 'pic': pic, 'heroTag': heroTag, diff --git a/lib/pages/history/widgets/item.dart b/lib/pages/history/widgets/item.dart index 37a56468..d7f70a33 100644 --- a/lib/pages/history/widgets/item.dart +++ b/lib/pages/history/widgets/item.dart @@ -109,12 +109,18 @@ class HistoryItem extends StatelessWidget { 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}', + '/video?bvid=$bvid&cid=$cid&seasonId=${res['data'].seasonId}&epid=${episode.epId}', arguments: { 'pic': pic, 'heroTag': heroTag, diff --git a/lib/pages/search_panel/widgets/media_bangumi_panel.dart b/lib/pages/search_panel/widgets/media_bangumi_panel.dart index 9f376288..292a4199 100644 --- a/lib/pages/search_panel/widgets/media_bangumi_panel.dart +++ b/lib/pages/search_panel/widgets/media_bangumi_panel.dart @@ -125,12 +125,23 @@ Widget searchMbangumiPanel(BuildContext context, ctr, list) { 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}', + '/video?bvid=$bvid&cid=$cid&seasonId=${i.seasonId}&epid=$epId', arguments: { 'pic': pic, 'heroTag': heroTag,