opt: view to-view video

Signed-off-by: bggRGjQaUbCoE <githubaccount56556@proton.me>
This commit is contained in:
bggRGjQaUbCoE
2025-01-05 14:37:01 +08:00
parent 1a3f5414c6
commit e4b8dfcada
4 changed files with 31 additions and 6 deletions

View File

@@ -77,6 +77,20 @@ class VideoCardH extends StatelessWidget {
SmartDialog.showToast('课堂视频暂不支持播放');
return;
}
if (videoItem.pgcLabel?.isNotEmpty == true &&
videoItem.redirectUrl?.isNotEmpty == true) {
String? id = RegExp(r'(ep|ss)\d+')
.firstMatch(videoItem.redirectUrl)
?.group(0);
if (id != null) {
Utils.viewBangumi(
seasonId:
id.startsWith('ss') ? id.replaceFirst('ss', '') : null,
epId: id.startsWith('ep') ? id.replaceFirst('ep', '') : null,
);
}
return;
}
try {
final int cid =
videoItem.cid ?? await SearchHttp.ab2c(aid: aid, bvid: bvid);
@@ -114,6 +128,12 @@ class VideoCardH extends StatelessWidget {
width: maxWidth,
height: maxHeight,
),
if (videoItem.pgcLabel?.isNotEmpty == true)
PBadge(
text: videoItem.pgcLabel,
top: 6.0,
right: 6.0,
),
if (videoItem.duration != 0)
PBadge(
text: Utils.timeFormat(videoItem.duration!),

View File

@@ -28,6 +28,8 @@ class HotVideoItemModel {
this.isOgv,
this.rcmdReason,
required this.checked,
this.pgcLabel,
this.redirectUrl,
});
int? aid;
@@ -56,6 +58,8 @@ class HotVideoItemModel {
bool? isOgv;
RcmdReason? rcmdReason;
late bool checked;
String? pgcLabel;
String? redirectUrl;
HotVideoItemModel.fromJson(Map<String, dynamic> json) {
aid = json["aid"];
@@ -86,6 +90,8 @@ class HotVideoItemModel {
? RcmdReason.fromJson(json['rcmd_reason'])
: null;
checked = false;
pgcLabel = json['pgc_label'];
redirectUrl = json['redirect_url'];
}
}

View File

@@ -171,7 +171,7 @@ class LaterController extends MultiSelectController {
List<HotVideoItemModel> list = List<HotVideoItemModel>.from(
(loadingState.value as Success).response);
for (HotVideoItemModel item in list) {
if (item.cid == null) {
if (item.cid == null || item.pgcLabel?.isNotEmpty == true) {
continue;
} else {
if (item.bvid != list.first.bvid) {

View File

@@ -401,12 +401,11 @@ class Utils {
// epId episode -> progress episode -> first episode
EpisodeItem? episode;
if (epId != null) {
EpisodeItem? e = (result['data'].episodes as List).firstWhereOrNull(
(item) => item.epId == epId,
episode = (result['data'].episodes as List).firstWhereOrNull(
(item) {
return item.epId.toString() == epId.toString();
},
);
if (e != null) {
episode = e;
}
}
episode ??= (result['data'].episodes as List).firstWhereOrNull(
(item) =>