From 329eb31387d87ad4d87d072badba9596098ce76b Mon Sep 17 00:00:00 2001 From: bggRGjQaUbCoE Date: Fri, 27 Dec 2024 11:24:56 +0800 Subject: [PATCH] fix: play all Signed-off-by: bggRGjQaUbCoE --- lib/http/user.dart | 3 +- lib/pages/fav_detail/controller.dart | 40 +++++++++++-------- lib/pages/later/controller.dart | 33 +++++++++------ lib/pages/video/detail/controller.dart | 3 +- .../detail}/widgets/watch_later_list.dart | 10 ++++- 5 files changed, 58 insertions(+), 31 deletions(-) rename lib/{common => pages/video/detail}/widgets/watch_later_list.dart (95%) diff --git a/lib/http/user.dart b/lib/http/user.dart index 7649412f..2704ab89 100644 --- a/lib/http/user.dart +++ b/lib/http/user.dart @@ -517,6 +517,7 @@ class UserHttp { required int bizId, required int ps, int? oid, + int otype = 2, }) async { var res = await Request().get( Api.mediaList, @@ -525,7 +526,7 @@ class UserHttp { 'type': type, 'biz_id': bizId, 'oid': oid ?? '', - 'otype': 2, + 'otype': otype, // video:2 // bangumi: 24 'ps': ps, 'direction': false, 'desc': true, diff --git a/lib/pages/fav_detail/controller.dart b/lib/pages/fav_detail/controller.dart index bc719764..10adafd6 100644 --- a/lib/pages/fav_detail/controller.dart +++ b/lib/pages/fav_detail/controller.dart @@ -127,22 +127,30 @@ class FavDetailController extends MultiSelectController { Future toViewPlayAll() async { if (loadingState.value is Success) { - final FavDetailItemData firstItem = - (loadingState.value as Success).response.first; - final String heroTag = Utils.makeHeroTag(firstItem.bvid); - Get.toNamed( - '/video?bvid=${firstItem.bvid}&cid=${firstItem.cid}', - arguments: { - 'videoItem': firstItem, - 'heroTag': heroTag, - 'sourceType': 'fav', - 'mediaId': item.value.id, - 'oid': firstItem.id, - 'favTitle': item.value.title, - // 'favInfo': favInfo, - 'count': item.value.mediaCount, - }, - ); + List list = (loadingState.value as Success).response; + for (FavDetailItemData element in list) { + if (element.cid == null) { + continue; + } else { + if (element.bvid != list.first.bvid) { + SmartDialog.showToast('已跳过不支持播放的视频'); + } + final String heroTag = Utils.makeHeroTag(element.bvid); + Get.toNamed( + '/video?bvid=${element.bvid}&cid=${element.cid}', + arguments: { + 'videoItem': element, + 'heroTag': heroTag, + 'sourceType': 'fav', + 'mediaId': item.value.id, + 'oid': element.id, + 'favTitle': item.value.title, + 'count': item.value.mediaCount, + }, + ); + break; + } + } } } } diff --git a/lib/pages/later/controller.dart b/lib/pages/later/controller.dart index 51ccde23..3306ddea 100644 --- a/lib/pages/later/controller.dart +++ b/lib/pages/later/controller.dart @@ -167,18 +167,27 @@ class LaterController extends MultiSelectController { // 稍后再看播放全部 Future toViewPlayAll() async { if (loadingState.value is Success) { - final HotVideoItemModel firstItem = - (loadingState.value as Success).response.first; - final String heroTag = Utils.makeHeroTag(firstItem.bvid); - Get.toNamed( - '/video?bvid=${firstItem.bvid}&cid=${firstItem.cid}', - arguments: { - 'videoItem': firstItem, - 'heroTag': heroTag, - 'sourceType': 'watchLater', - 'count': (loadingState.value as Success).response.length, - }, - ); + List list = (loadingState.value as Success).response; + for (HotVideoItemModel item in list) { + if (item.cid == null) { + continue; + } else { + if (item.bvid != list.first.bvid) { + SmartDialog.showToast('已跳过不支持播放的视频'); + } + final String heroTag = Utils.makeHeroTag(item.bvid); + Get.toNamed( + '/video?bvid=${item.bvid}&cid=${item.cid}', + arguments: { + 'videoItem': item, + 'heroTag': heroTag, + 'sourceType': 'watchLater', + 'count': (loadingState.value as Success).response.length, + }, + ); + break; + } + } } } } diff --git a/lib/pages/video/detail/controller.dart b/lib/pages/video/detail/controller.dart index 122864f2..a789c8ec 100644 --- a/lib/pages/video/detail/controller.dart +++ b/lib/pages/video/detail/controller.dart @@ -6,7 +6,6 @@ import 'package:PiliPalaX/common/widgets/icon_button.dart'; import 'package:PiliPalaX/common/widgets/loading_widget.dart'; import 'package:PiliPalaX/common/widgets/pair.dart'; import 'package:PiliPalaX/common/widgets/segment_progress_bar.dart'; -import 'package:PiliPalaX/common/widgets/watch_later_list.dart'; import 'package:PiliPalaX/http/danmaku.dart'; import 'package:PiliPalaX/http/init.dart'; import 'package:PiliPalaX/http/user.dart'; @@ -16,6 +15,7 @@ import 'package:PiliPalaX/models/video_detail_res.dart'; import 'package:PiliPalaX/pages/video/detail/introduction/controller.dart'; import 'package:PiliPalaX/pages/video/detail/related/controller.dart'; import 'package:PiliPalaX/pages/video/detail/reply/controller.dart'; +import 'package:PiliPalaX/pages/video/detail/widgets/watch_later_list.dart'; import 'package:PiliPalaX/utils/extension.dart'; import 'package:canvas_danmaku/models/danmaku_content_item.dart'; import 'package:connectivity_plus/connectivity_plus.dart'; @@ -346,6 +346,7 @@ class VideoDetailController extends GetxController bizId: Get.arguments['mediaId'] ?? -1, ps: 20, oid: mediaList.last.id, + otype: mediaList.last.type ?? 2, ); if (res['status']) { if (res['data'].isNotEmpty) { diff --git a/lib/common/widgets/watch_later_list.dart b/lib/pages/video/detail/widgets/watch_later_list.dart similarity index 95% rename from lib/common/widgets/watch_later_list.dart rename to lib/pages/video/detail/widgets/watch_later_list.dart index 3e0b0f56..ff0ddf82 100644 --- a/lib/common/widgets/watch_later_list.dart +++ b/lib/pages/video/detail/widgets/watch_later_list.dart @@ -1,6 +1,7 @@ import 'package:PiliPalaX/common/widgets/stat/danmu.dart'; import 'package:PiliPalaX/common/widgets/stat/view.dart'; import 'package:flutter/material.dart'; +import 'package:flutter_smart_dialog/flutter_smart_dialog.dart'; import 'package:get/get.dart'; import 'package:PiliPalaX/common/constants.dart'; import 'package:PiliPalaX/common/widgets/badge.dart'; @@ -77,6 +78,9 @@ class _MediaListPanelState extends State { () => ScrollablePositionedList.builder( itemScrollController: _scrollController, itemCount: widget.mediaList.length, + padding: EdgeInsets.only( + bottom: MediaQuery.paddingOf(context).bottom + 25, + ), itemBuilder: ((context, index) { var item = widget.mediaList[index]; if (index == widget.mediaList.length - 1 && @@ -85,11 +89,15 @@ class _MediaListPanelState extends State { } return InkWell( onTap: () async { + if (item.type != 2) { + SmartDialog.showToast('不支持播放该类型视频'); + return; + } Get.back(); String bvid = item.bvid!; int? aid = item.id; String cover = item.cover ?? ''; - final int cid = + final int cid = item.cid ?? await SearchHttp.ab2c(aid: aid, bvid: bvid); widget.changeMediaList?.call(bvid, cid, aid, cover); },