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/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<EpisodePanel>
: widget.aid,
cover,
);
if (widget.type == EpisodeType.season) {
try {
Get.find<VideoDetailController>(
tag: widget.videoIntroController.heroTag)
.seasonCid = episode.cid;
} catch (_) {}
}
},
onLongPress: () {
if (cover?.isNotEmpty == true) {

View File

@@ -70,7 +70,6 @@ class VideoDetailData {
String? epId;
List<Staff>? 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<String, dynamic> 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<EpisodeItem>? episodes;
late bool isReversed;
SectionItem.fromJson(Map<String, dynamic> json) {
epCount = json['ep_count'];
@@ -688,6 +687,7 @@ class SectionItem {
episodes = (json['episodes'] as List?)
?.map<EpisodeItem>((e) => EpisodeItem.fromJson(e))
.toList();
isReversed = false;
}
}

View File

@@ -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

View File

@@ -45,10 +45,10 @@ class _PagesPanelState extends State<PagesPanel> {
@override
void initState() {
super.initState();
_videoDetailController =
Get.find<VideoDetailController>(tag: widget.heroTag);
if (widget.list == null) {
cid = widget.videoIntroController.lastPlayCid.value;
_videoDetailController =
Get.find<VideoDetailController>(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<PagesPanel> {
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(

View File

@@ -2149,8 +2149,12 @@ class _VideoDetailPageVState extends State<VideoDetailPageV>
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<VideoDetailPageV>
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<VideoDetailPageV>
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<VideoDetailPageV>
.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();