From 9bbd934f8e5ddb83a35c4fa5132558c6ca1cbee1 Mon Sep 17 00:00:00 2001 From: bggRGjQaUbCoE Date: Wed, 2 Apr 2025 15:45:12 +0800 Subject: [PATCH] fix: episode panel Signed-off-by: bggRGjQaUbCoE --- lib/common/widgets/episode_panel.dart | 8 +++++++ lib/models/video_detail_res.dart | 6 ++--- .../video/detail/introduction/controller.dart | 1 - .../detail/introduction/widgets/page.dart | 10 +++++++-- lib/pages/video/detail/view_v.dart | 22 ++++++++++++++----- 5 files changed, 36 insertions(+), 11 deletions(-) diff --git a/lib/common/widgets/episode_panel.dart b/lib/common/widgets/episode_panel.dart index c11d8b48..0263766d 100644 --- a/lib/common/widgets/episode_panel.dart +++ b/lib/common/widgets/episode_panel.dart @@ -13,6 +13,7 @@ import 'package:PiliPlus/http/video.dart'; import 'package:PiliPlus/models/bangumi/info.dart' as bangumi; import 'package:PiliPlus/models/video_detail_res.dart' as video; import 'package:PiliPlus/pages/common/common_slide_page.dart'; +import 'package:PiliPlus/pages/video/detail/controller.dart'; import 'package:PiliPlus/pages/video/detail/introduction/controller.dart'; import 'package:PiliPlus/pages/video/detail/introduction/widgets/page.dart'; import 'package:PiliPlus/utils/id_utils.dart'; @@ -385,6 +386,13 @@ class _EpisodePanelState extends CommonSlidePageState : widget.aid, cover, ); + if (widget.type == EpisodeType.season) { + try { + Get.find( + tag: widget.videoIntroController.heroTag) + .seasonCid = episode.cid; + } catch (_) {} + } }, onLongPress: () { if (cover?.isNotEmpty == true) { diff --git a/lib/models/video_detail_res.dart b/lib/models/video_detail_res.dart index fcb968d5..eafa532b 100644 --- a/lib/models/video_detail_res.dart +++ b/lib/models/video_detail_res.dart @@ -70,7 +70,6 @@ class VideoDetailData { String? epId; List? staff; late bool isPageReversed; - late bool isSeasonReversed; VideoDetailData({ this.bvid, @@ -110,7 +109,6 @@ class VideoDetailData { this.epId, this.staff, this.isPageReversed = false, - this.isSeasonReversed = false, }); VideoDetailData.fromJson(Map json) { @@ -163,7 +161,6 @@ class VideoDetailData { epId = resolveEpId(json['redirect_url']); } isPageReversed = false; - isSeasonReversed = false; } String resolveEpId(url) { @@ -670,6 +667,7 @@ class SectionItem { this.title, this.type, this.episodes, + this.isReversed = false, }); int? epCount; @@ -678,6 +676,7 @@ class SectionItem { String? title; int? type; List? episodes; + late bool isReversed; SectionItem.fromJson(Map json) { epCount = json['ep_count']; @@ -688,6 +687,7 @@ class SectionItem { episodes = (json['episodes'] as List?) ?.map((e) => EpisodeItem.fromJson(e)) .toList(); + isReversed = false; } } diff --git a/lib/pages/video/detail/introduction/controller.dart b/lib/pages/video/detail/introduction/controller.dart index 93b66e07..bdd73a98 100644 --- a/lib/pages/video/detail/introduction/controller.dart +++ b/lib/pages/video/detail/introduction/controller.dart @@ -143,7 +143,6 @@ class VideoIntroController extends GetxController if (videoDetail.value.ugcSeason?.id == data.ugcSeason?.id) { // keep reversed season data.ugcSeason = videoDetail.value.ugcSeason; - data.isSeasonReversed = videoDetail.value.isSeasonReversed; } if (videoDetail.value.cid == data.cid) { // keep reversed pages diff --git a/lib/pages/video/detail/introduction/widgets/page.dart b/lib/pages/video/detail/introduction/widgets/page.dart index b5accacc..1365e35a 100644 --- a/lib/pages/video/detail/introduction/widgets/page.dart +++ b/lib/pages/video/detail/introduction/widgets/page.dart @@ -45,10 +45,10 @@ class _PagesPanelState extends State { @override void initState() { super.initState(); + _videoDetailController = + Get.find(tag: widget.heroTag); if (widget.list == null) { cid = widget.videoIntroController.lastPlayCid.value; - _videoDetailController = - Get.find(tag: widget.heroTag); pageIndex = pages.indexWhere((Part e) => e.cid == cid); _listener = _videoDetailController.cid.listen((int cid) { this.cid = cid; @@ -158,6 +158,12 @@ class _PagesPanelState extends State { IdUtils.bv2av(widget.bvid), widget.cover, ); + if (widget.list != null && + widget.videoIntroController.videoDetail.value + .ugcSeason != + null) { + _videoDetailController.seasonCid = pages.first.cid; + } }, child: Padding( padding: const EdgeInsets.symmetric( diff --git a/lib/pages/video/detail/view_v.dart b/lib/pages/video/detail/view_v.dart index 4a1d024e..6820d11e 100644 --- a/lib/pages/video/detail/view_v.dart +++ b/lib/pages/video/detail/view_v.dart @@ -2149,8 +2149,12 @@ class _VideoDetailPageVState extends State bvid: videoDetailController.bvid, aid: IdUtils.bv2av(videoDetailController.bvid), cid: videoDetailController.seasonCid ?? 0, - isReversed: - videoIntroController.videoDetail.value.isSeasonReversed, + isReversed: videoIntroController + .videoDetail + .value + .ugcSeason! + .sections![videoDetailController.seasonIndex.value] + .isReversed, changeFucCall: videoDetailController.videoType == SearchType.media_bangumi ? bangumiIntroController.changeSeasonOrbangu @@ -2279,7 +2283,12 @@ class _VideoDetailPageVState extends State videoDetailController.videoType == SearchType.media_bangumi ? null : season != null - ? videoIntroController.videoDetail.value.isSeasonReversed + ? videoIntroController + .videoDetail + .value + .ugcSeason! + .sections![videoDetailController.seasonIndex.value] + .isReversed : videoIntroController.videoDetail.value.isPageReversed, isSupportReverse: videoDetailController.videoType != SearchType.media_bangumi, @@ -2335,8 +2344,10 @@ class _VideoDetailPageVState extends State if (isSeason) { // reverse season - videoIntroController.videoDetail.value.isSeasonReversed = - !videoIntroController.videoDetail.value.isSeasonReversed; + videoIntroController.videoDetail.value.ugcSeason! + .sections![videoDetailController.seasonIndex.value].isReversed = + !videoIntroController.videoDetail.value.ugcSeason! + .sections![videoDetailController.seasonIndex.value].isReversed; videoIntroController.videoDetail.value.ugcSeason! .sections![videoDetailController.seasonIndex.value].episodes = videoIntroController @@ -2358,6 +2369,7 @@ class _VideoDetailPageVState extends State .sections![videoDetailController.seasonIndex.value].episodes!.first; if (episode.cid != videoDetailController.cid.value) { changeEpisode(episode); + videoDetailController.seasonCid = episode.cid; } else { videoDetailController.seasonIndex.refresh(); videoDetailController.cid.refresh();