fix: episode panel

Signed-off-by: bggRGjQaUbCoE <githubaccount56556@proton.me>
This commit is contained in:
bggRGjQaUbCoE
2025-04-02 15:45:12 +08:00
parent 6ab72b65aa
commit 9bbd934f8e
5 changed files with 36 additions and 11 deletions

View File

@@ -13,6 +13,7 @@ import 'package:PiliPlus/http/video.dart';
import 'package:PiliPlus/models/bangumi/info.dart' as bangumi; import 'package:PiliPlus/models/bangumi/info.dart' as bangumi;
import 'package:PiliPlus/models/video_detail_res.dart' as video; import 'package:PiliPlus/models/video_detail_res.dart' as video;
import 'package:PiliPlus/pages/common/common_slide_page.dart'; 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/controller.dart';
import 'package:PiliPlus/pages/video/detail/introduction/widgets/page.dart'; import 'package:PiliPlus/pages/video/detail/introduction/widgets/page.dart';
import 'package:PiliPlus/utils/id_utils.dart'; import 'package:PiliPlus/utils/id_utils.dart';
@@ -385,6 +386,13 @@ class _EpisodePanelState extends CommonSlidePageState<EpisodePanel>
: widget.aid, : widget.aid,
cover, cover,
); );
if (widget.type == EpisodeType.season) {
try {
Get.find<VideoDetailController>(
tag: widget.videoIntroController.heroTag)
.seasonCid = episode.cid;
} catch (_) {}
}
}, },
onLongPress: () { onLongPress: () {
if (cover?.isNotEmpty == true) { if (cover?.isNotEmpty == true) {

View File

@@ -70,7 +70,6 @@ class VideoDetailData {
String? epId; String? epId;
List<Staff>? staff; List<Staff>? staff;
late bool isPageReversed; late bool isPageReversed;
late bool isSeasonReversed;
VideoDetailData({ VideoDetailData({
this.bvid, this.bvid,
@@ -110,7 +109,6 @@ class VideoDetailData {
this.epId, this.epId,
this.staff, this.staff,
this.isPageReversed = false, this.isPageReversed = false,
this.isSeasonReversed = false,
}); });
VideoDetailData.fromJson(Map<String, dynamic> json) { VideoDetailData.fromJson(Map<String, dynamic> json) {
@@ -163,7 +161,6 @@ class VideoDetailData {
epId = resolveEpId(json['redirect_url']); epId = resolveEpId(json['redirect_url']);
} }
isPageReversed = false; isPageReversed = false;
isSeasonReversed = false;
} }
String resolveEpId(url) { String resolveEpId(url) {
@@ -670,6 +667,7 @@ class SectionItem {
this.title, this.title,
this.type, this.type,
this.episodes, this.episodes,
this.isReversed = false,
}); });
int? epCount; int? epCount;
@@ -678,6 +676,7 @@ class SectionItem {
String? title; String? title;
int? type; int? type;
List<EpisodeItem>? episodes; List<EpisodeItem>? episodes;
late bool isReversed;
SectionItem.fromJson(Map<String, dynamic> json) { SectionItem.fromJson(Map<String, dynamic> json) {
epCount = json['ep_count']; epCount = json['ep_count'];
@@ -688,6 +687,7 @@ class SectionItem {
episodes = (json['episodes'] as List?) episodes = (json['episodes'] as List?)
?.map<EpisodeItem>((e) => EpisodeItem.fromJson(e)) ?.map<EpisodeItem>((e) => EpisodeItem.fromJson(e))
.toList(); .toList();
isReversed = false;
} }
} }

View File

@@ -143,7 +143,6 @@ class VideoIntroController extends GetxController
if (videoDetail.value.ugcSeason?.id == data.ugcSeason?.id) { if (videoDetail.value.ugcSeason?.id == data.ugcSeason?.id) {
// keep reversed season // keep reversed season
data.ugcSeason = videoDetail.value.ugcSeason; data.ugcSeason = videoDetail.value.ugcSeason;
data.isSeasonReversed = videoDetail.value.isSeasonReversed;
} }
if (videoDetail.value.cid == data.cid) { if (videoDetail.value.cid == data.cid) {
// keep reversed pages // keep reversed pages

View File

@@ -45,10 +45,10 @@ class _PagesPanelState extends State<PagesPanel> {
@override @override
void initState() { void initState() {
super.initState(); super.initState();
_videoDetailController =
Get.find<VideoDetailController>(tag: widget.heroTag);
if (widget.list == null) { if (widget.list == null) {
cid = widget.videoIntroController.lastPlayCid.value; cid = widget.videoIntroController.lastPlayCid.value;
_videoDetailController =
Get.find<VideoDetailController>(tag: widget.heroTag);
pageIndex = pages.indexWhere((Part e) => e.cid == cid); pageIndex = pages.indexWhere((Part e) => e.cid == cid);
_listener = _videoDetailController.cid.listen((int cid) { _listener = _videoDetailController.cid.listen((int cid) {
this.cid = cid; this.cid = cid;
@@ -158,6 +158,12 @@ class _PagesPanelState extends State<PagesPanel> {
IdUtils.bv2av(widget.bvid), IdUtils.bv2av(widget.bvid),
widget.cover, widget.cover,
); );
if (widget.list != null &&
widget.videoIntroController.videoDetail.value
.ugcSeason !=
null) {
_videoDetailController.seasonCid = pages.first.cid;
}
}, },
child: Padding( child: Padding(
padding: const EdgeInsets.symmetric( padding: const EdgeInsets.symmetric(

View File

@@ -2149,8 +2149,12 @@ class _VideoDetailPageVState extends State<VideoDetailPageV>
bvid: videoDetailController.bvid, bvid: videoDetailController.bvid,
aid: IdUtils.bv2av(videoDetailController.bvid), aid: IdUtils.bv2av(videoDetailController.bvid),
cid: videoDetailController.seasonCid ?? 0, cid: videoDetailController.seasonCid ?? 0,
isReversed: isReversed: videoIntroController
videoIntroController.videoDetail.value.isSeasonReversed, .videoDetail
.value
.ugcSeason!
.sections![videoDetailController.seasonIndex.value]
.isReversed,
changeFucCall: videoDetailController.videoType == changeFucCall: videoDetailController.videoType ==
SearchType.media_bangumi SearchType.media_bangumi
? bangumiIntroController.changeSeasonOrbangu ? bangumiIntroController.changeSeasonOrbangu
@@ -2279,7 +2283,12 @@ class _VideoDetailPageVState extends State<VideoDetailPageV>
videoDetailController.videoType == SearchType.media_bangumi videoDetailController.videoType == SearchType.media_bangumi
? null ? null
: season != null : season != null
? videoIntroController.videoDetail.value.isSeasonReversed ? videoIntroController
.videoDetail
.value
.ugcSeason!
.sections![videoDetailController.seasonIndex.value]
.isReversed
: videoIntroController.videoDetail.value.isPageReversed, : videoIntroController.videoDetail.value.isPageReversed,
isSupportReverse: isSupportReverse:
videoDetailController.videoType != SearchType.media_bangumi, videoDetailController.videoType != SearchType.media_bangumi,
@@ -2335,8 +2344,10 @@ class _VideoDetailPageVState extends State<VideoDetailPageV>
if (isSeason) { if (isSeason) {
// reverse season // reverse season
videoIntroController.videoDetail.value.isSeasonReversed = videoIntroController.videoDetail.value.ugcSeason!
!videoIntroController.videoDetail.value.isSeasonReversed; .sections![videoDetailController.seasonIndex.value].isReversed =
!videoIntroController.videoDetail.value.ugcSeason!
.sections![videoDetailController.seasonIndex.value].isReversed;
videoIntroController.videoDetail.value.ugcSeason! videoIntroController.videoDetail.value.ugcSeason!
.sections![videoDetailController.seasonIndex.value].episodes = .sections![videoDetailController.seasonIndex.value].episodes =
videoIntroController videoIntroController
@@ -2358,6 +2369,7 @@ class _VideoDetailPageVState extends State<VideoDetailPageV>
.sections![videoDetailController.seasonIndex.value].episodes!.first; .sections![videoDetailController.seasonIndex.value].episodes!.first;
if (episode.cid != videoDetailController.cid.value) { if (episode.cid != videoDetailController.cid.value) {
changeEpisode(episode); changeEpisode(episode);
videoDetailController.seasonCid = episode.cid;
} else { } else {
videoDetailController.seasonIndex.refresh(); videoDetailController.seasonIndex.refresh();
videoDetailController.cid.refresh(); videoDetailController.cid.refresh();