diff --git a/lib/pages/episode_panel/view.dart b/lib/pages/episode_panel/view.dart index 384f7d957..5697c7065 100644 --- a/lib/pages/episode_panel/view.dart +++ b/lib/pages/episode_panel/view.dart @@ -29,7 +29,6 @@ import 'package:PiliPlus/utils/date_util.dart'; import 'package:PiliPlus/utils/duration_util.dart'; import 'package:PiliPlus/utils/id_utils.dart'; import 'package:PiliPlus/utils/storage.dart'; -import 'package:PiliPlus/utils/utils.dart'; import 'package:flutter/foundation.dart' show kDebugMode; import 'package:flutter/material.dart' hide TabBarView; import 'package:flutter_smart_dialog/flutter_smart_dialog.dart'; @@ -366,14 +365,7 @@ class _EpisodePanelState extends CommonSlidePageState { break; case pgc.EpisodeItem item: bvid = item.bvid; - if (item.longTitle != null && item.longTitle != "") { - dynamic leading = item.title ?? index + 1; - title = - "${Utils.isStringNumeric(leading) ? '第$leading话' : leading} ${episode.longTitle!}"; - } else { - title = item.title!; - } - + title = item.showTitle ?? item.title!; cover = item.cover; duration = item.duration == null ? null : item.duration! ~/ 1000; pubdate = item.pubTime; diff --git a/lib/pages/save_panel/view.dart b/lib/pages/save_panel/view.dart index 5ad4e6870..23b6347c4 100644 --- a/lib/pages/save_panel/view.dart +++ b/lib/pages/save_panel/view.dart @@ -5,7 +5,9 @@ import 'package:PiliPlus/common/widgets/button/icon_button.dart'; import 'package:PiliPlus/common/widgets/image/network_img_layer.dart'; import 'package:PiliPlus/grpc/bilibili/main/community/reply/v1.pb.dart' show ReplyInfo; +import 'package:PiliPlus/models/common/search_type.dart'; import 'package:PiliPlus/models/dynamics/result.dart'; +import 'package:PiliPlus/pages/common/common_intro_controller.dart'; import 'package:PiliPlus/pages/dynamics/widgets/dynamic_panel.dart'; import 'package:PiliPlus/pages/video/introduction/pgc/controller.dart'; import 'package:PiliPlus/pages/video/introduction/ugc/controller.dart'; @@ -88,8 +90,13 @@ class _SavePanelState extends State { if (currentRoute.startsWith('/video')) { try { - final heroTag = Get.arguments?['heroTag']; - late final ctr = Get.find(tag: heroTag); + final heroTag = Get.arguments['heroTag']; + CommonIntroController ctr; + if (Get.arguments['videoType'] == SearchType.media_bangumi) { + ctr = Get.find(tag: heroTag); + } else { + ctr = Get.find(tag: heroTag); + } final videoDetail = ctr.videoDetail.value; cover = videoDetail.pic; title = videoDetail.title; @@ -100,7 +107,7 @@ class _SavePanelState extends State { 'bilibili://video/${reply.oid}?comment_root_id=${hasRoot ? reply.root : reply.id}${hasRoot ? '&comment_secondary_id=${reply.id}' : ''}'; try { - final heroTag = Get.arguments?['heroTag']; + final heroTag = Get.arguments['heroTag']; late final ctr = Get.find(tag: heroTag); final type = reply.type.toInt(); late final oid = reply.oid; diff --git a/lib/pages/video/introduction/pgc/controller.dart b/lib/pages/video/introduction/pgc/controller.dart index 61dd8abf1..61d7c0114 100644 --- a/lib/pages/video/introduction/pgc/controller.dart +++ b/lib/pages/video/introduction/pgc/controller.dart @@ -10,7 +10,6 @@ import 'package:PiliPlus/models/pgc_lcf.dart'; import 'package:PiliPlus/models_new/pgc/pgc_info_model/episode.dart'; import 'package:PiliPlus/models_new/pgc/pgc_info_model/result.dart'; import 'package:PiliPlus/models_new/triple/pgc_triple.dart'; -import 'package:PiliPlus/models_new/video/video_detail/data.dart'; import 'package:PiliPlus/models_new/video/video_detail/stat_detail.dart'; import 'package:PiliPlus/pages/common/common_intro_controller.dart'; import 'package:PiliPlus/pages/dynamics_repost/view.dart'; @@ -289,6 +288,7 @@ class PgcIntroController extends CommonIntroController { queryPgcLikeCoinFav(); } + hasLater.value = false; this.cid.value = cid; queryVideoIntro(); queryOnlineTotal(); @@ -457,11 +457,15 @@ class PgcIntroController extends CommonIntroController { @override Future queryVideoIntro() async { - var res = await VideoHttp.videoIntro(bvid: bvid); - if (res.isSuccess) { - VideoDetailData data = res.data; - videoPlayerServiceHandler.onVideoDetailChange(data, data.cid!, heroTag); - videoDetail.value = data; - } + final episode = pgcItem.episodes!.firstWhere((e) => e.cid == cid.value); + videoPlayerServiceHandler.onVideoDetailChange( + episode, + cid.value, + heroTag, + artist: pgcItem.title, + ); + videoDetail + ..value.title = episode.showTitle + ..refresh(); } } diff --git a/lib/pages/video/introduction/pgc/widgets/intro_detail.dart b/lib/pages/video/introduction/pgc/widgets/intro_detail.dart index 0b252d5e7..1a348c699 100644 --- a/lib/pages/video/introduction/pgc/widgets/intro_detail.dart +++ b/lib/pages/video/introduction/pgc/widgets/intro_detail.dart @@ -145,26 +145,30 @@ class _IntroDetailState extends CommonCollapseSlidePageState { ), ], ), - const SizedBox(height: 20), - Text( - '简介:', - style: theme.textTheme.titleMedium, - ), - const SizedBox(height: 4), - Text( - widget.item.evaluate!, - style: textStyle, - ), - const SizedBox(height: 20), - Text( - '演职人员:', - style: theme.textTheme.titleMedium, - ), - const SizedBox(height: 4), - Text( - widget.item.actors!, - style: textStyle, - ), + if (widget.item.evaluate?.isNotEmpty == true) ...[ + const SizedBox(height: 20), + Text( + '简介:', + style: theme.textTheme.titleMedium, + ), + const SizedBox(height: 4), + Text( + widget.item.evaluate!, + style: textStyle, + ), + ], + if (widget.item.actors?.isNotEmpty == true) ...[ + const SizedBox(height: 20), + Text( + '演职人员:', + style: theme.textTheme.titleMedium, + ), + const SizedBox(height: 4), + Text( + widget.item.actors!, + style: textStyle, + ), + ], if (widget.videoTags?.isNotEmpty == true) ...[ const SizedBox(height: 10), Wrap( diff --git a/lib/plugin/pl_player/view.dart b/lib/plugin/pl_player/view.dart index 0bb63a672..fbfa32736 100644 --- a/lib/plugin/pl_player/view.dart +++ b/lib/plugin/pl_player/view.dart @@ -468,7 +468,6 @@ class _PLVideoPlayerState extends State int currentCid = plPlayerController.cid; String bvid = plPlayerController.bvid; List episodes = []; - final videoDetail = introController.videoDetail.value; if (isSeason) { final List sections = videoDetail.ugcSeason!.sections!; diff --git a/lib/services/audio_handler.dart b/lib/services/audio_handler.dart index ba724fd0d..31df49c5e 100644 --- a/lib/services/audio_handler.dart +++ b/lib/services/audio_handler.dart @@ -1,5 +1,5 @@ import 'package:PiliPlus/models_new/live/live_room_info_h5/data.dart'; -import 'package:PiliPlus/models_new/pgc/pgc_info_model/result.dart'; +import 'package:PiliPlus/models_new/pgc/pgc_info_model/episode.dart'; import 'package:PiliPlus/models_new/video/video_detail/data.dart'; import 'package:PiliPlus/plugin/pl_player/controller.dart'; import 'package:PiliPlus/plugin/pl_player/models/play_status.dart'; @@ -113,7 +113,12 @@ class VideoPlayerServiceHandler extends BaseAudioHandler with SeekHandler { setPlaybackState(status, isBuffering, isLive); } - void onVideoDetailChange(dynamic data, int cid, String herotag) { + void onVideoDetailChange( + dynamic data, + int cid, + String herotag, { + String? artist, + }) { if (!enableBackgroundPlay) return; // if (kDebugMode) { // debugPrint('当前调用栈为:'); @@ -131,37 +136,33 @@ class VideoPlayerServiceHandler extends BaseAudioHandler with SeekHandler { ); mediaItem = MediaItem( id: id, - title: current?.pagePart ?? "", - artist: data.title ?? "", - album: data.title ?? "", + title: current?.pagePart ?? '', + artist: data.owner?.name, duration: Duration(seconds: current?.duration ?? 0), - artUri: Uri.parse(data.pic ?? ""), + artUri: Uri.parse(data.pic ?? ''), ); } else { mediaItem = MediaItem( id: id, - title: data.title ?? "", - artist: data.owner?.name ?? "", + title: data.title ?? '', + artist: data.owner?.name, duration: Duration(seconds: data.duration ?? 0), - artUri: Uri.parse(data.pic ?? ""), + artUri: Uri.parse(data.pic ?? ''), ); } - } else if (data is PgcInfoModel) { - final current = data.episodes?.firstWhereOrNull( - (element) => element.cid == cid, - ); + } else if (data is EpisodeItem) { mediaItem = MediaItem( id: id, - title: current?.longTitle ?? "", - artist: data.title ?? "", - duration: Duration(milliseconds: current?.duration ?? 0), - artUri: Uri.parse(data.cover ?? ""), + title: data.showTitle ?? data.title ?? '', + artist: artist, + duration: Duration(milliseconds: data.duration ?? 0), + artUri: Uri.parse(data.cover ?? ''), ); } else if (data is RoomInfoH5Data) { mediaItem = MediaItem( id: id, title: data.roomInfo?.title ?? '', - artist: data.anchorInfo?.baseInfo?.uname ?? '', + artist: data.anchorInfo?.baseInfo?.uname, artUri: Uri.parse(data.roomInfo?.cover ?? ''), isLive: true, );