mod: view pgc section as normal video

Signed-off-by: bggRGjQaUbCoE <githubaccount56556@proton.me>
This commit is contained in:
bggRGjQaUbCoE
2025-01-10 15:32:43 +08:00
parent ae88700b96
commit a1bfe1f4ee
2 changed files with 83 additions and 35 deletions

View File

@@ -80,6 +80,7 @@ class BangumiInfoModel {
int? type; int? type;
UserStatus? userStatus; UserStatus? userStatus;
String? staff; String? staff;
List<Section>? section;
BangumiInfoModel.fromJson(Map<String, dynamic> json) { BangumiInfoModel.fromJson(Map<String, dynamic> json) {
activity = json['activity']; activity = json['activity'];
@@ -89,8 +90,8 @@ class BangumiInfoModel {
bkgCover = json['bkg_cover']; bkgCover = json['bkg_cover'];
cover = json['cover']; cover = json['cover'];
enableVt = json['enableVt']; enableVt = json['enableVt'];
episodes = json['episodes'] episodes = (json['episodes'] as List?)
.map<EpisodeItem>((e) => EpisodeItem.fromJson(e)) ?.map<EpisodeItem>((e) => EpisodeItem.fromJson(e))
.toList(); .toList();
evaluate = json['evaluate']; evaluate = json['evaluate'];
freya = json['freya']; freya = json['freya'];
@@ -125,6 +126,22 @@ class BangumiInfoModel {
userStatus = UserStatus.fromJson(json['user_status']); userStatus = UserStatus.fromJson(json['user_status']);
} }
staff = json['staff']; staff = json['staff'];
section = (json['section'] as List?)
?.map((item) => Section.fromJson(item))
.toList();
}
}
class Section {
Section({
this.episodes,
});
List<EpisodeItem>? episodes;
Section.fromJson(Map<String, dynamic> json) {
episodes = (json['episodes'] as List?)
?.map<EpisodeItem>((e) => EpisodeItem.fromJson(e))
.toList();
} }
} }

View File

@@ -426,43 +426,74 @@ class Utils {
dynamic seasonId, dynamic seasonId,
dynamic epId, dynamic epId,
}) async { }) async {
try {
SmartDialog.showLoading(msg: '资源获取中'); SmartDialog.showLoading(msg: '资源获取中');
var result = await SearchHttp.bangumiInfo(seasonId: seasonId, epId: epId); var result = await SearchHttp.bangumiInfo(seasonId: seasonId, epId: epId);
SmartDialog.dismiss(); SmartDialog.dismiss();
if (result['status']) { if (result['status']) {
if (result['data'].episodes.isEmpty) { BangumiInfoModel data = result['data'];
SmartDialog.showToast('资源加载失败');
return;
}
// epId episode -> progress episode -> first episode // epId episode -> progress episode -> first episode
EpisodeItem? episode; EpisodeItem? episode;
if (epId != null) { if (epId != null) {
episode = (result['data'].episodes as List).firstWhereOrNull( if (data.episodes?.isNotEmpty == true) {
episode = data.episodes!.firstWhereOrNull(
(item) { (item) {
return item.epId.toString() == epId.toString(); return item.epId.toString() == epId.toString();
}, },
); );
} }
episode ??= (result['data'].episodes as List).firstWhereOrNull( if (episode == null && data.section?.isNotEmpty == true) {
(item) => for (Section item in data.section!) {
item.epId == result['data'].userStatus?.progress?.lastEpId, if (item.episodes?.isNotEmpty == true) {
) ?? for (EpisodeItem item in item.episodes!) {
result['data'].episodes.first; if (item.epId.toString() == epId.toString()) {
dynamic bvid = episode?.bvid; // view as normal video
dynamic cid = episode?.cid;
dynamic pic = episode?.cover;
Utils.toDupNamed( Utils.toDupNamed(
'/video?bvid=$bvid&cid=$cid&seasonId=${result['data'].seasonId}&epId=${episode?.epId}&type=${result['data'].type}', '/video?bvid=${item.bvid}&cid=${item.cid}',
arguments: { arguments: {
'pic': pic, 'pic': item.cover,
'heroTag': Utils.makeHeroTag(cid), 'heroTag': Utils.makeHeroTag(item.cid),
'videoType': SearchType.video,
},
);
return;
}
}
}
}
}
}
if (data.episodes?.isEmpty == true) {
SmartDialog.showToast('资源加载失败');
return;
}
episode ??= data.userStatus?.progress?.lastEpId != null
? data.episodes!.firstWhereOrNull(
(item) => item.epId == data.userStatus?.progress?.lastEpId,
) ??
data.episodes!.first
: data.episodes!.first;
Utils.toDupNamed(
'/video?bvid=${episode.bvid}&cid=${episode.cid}&seasonId=${data.seasonId}&epId=${episode.epId}&type=${data.type}',
arguments: {
'pic': episode.cover,
'heroTag': Utils.makeHeroTag(episode.cid),
'videoType': SearchType.media_bangumi, 'videoType': SearchType.media_bangumi,
'bangumiItem': result['data'], 'bangumiItem': data,
}, },
); );
} else { } else {
SmartDialog.showToast(result['msg']); SmartDialog.showToast(result['msg']);
} }
} catch (e) {
SmartDialog.dismiss();
SmartDialog.showToast('$e');
debugPrint('$e');
}
} }
static void toDupNamed( static void toDupNamed(