opt: 字幕渲染逻辑

This commit is contained in:
guozhigq
2024-06-29 17:12:06 +08:00
parent 3c7189a260
commit 922b815ebd
6 changed files with 11 additions and 140 deletions

View File

@ -1,95 +0,0 @@
enum SubtitleType {
// 中文(中国)
zhCN,
// 中文(自动翻译)
aizh,
// 英语(自动生成)
aien,
// 中文(简体)
zhHans,
// 英文(美国)
enUS,
// 中文繁体
zhTW,
//
en,
//
pt,
//
es,
}
extension SubtitleTypeExtension on SubtitleType {
String get description {
switch (this) {
case SubtitleType.zhCN:
return '中文(中国)';
case SubtitleType.aizh:
return '中文(自动翻译)';
case SubtitleType.aien:
return '英语(自动生成)';
case SubtitleType.zhHans:
return '中文(简体)';
case SubtitleType.enUS:
return '英文(美国)';
case SubtitleType.zhTW:
return '中文(繁体)';
case SubtitleType.en:
return '英文';
case SubtitleType.pt:
return '葡萄牙语';
case SubtitleType.es:
return '西班牙语';
}
}
}
extension SubtitleIdExtension on SubtitleType {
String get id {
switch (this) {
case SubtitleType.zhCN:
return 'zh-CN';
case SubtitleType.aizh:
return 'ai-zh';
case SubtitleType.aien:
return 'ai-en';
case SubtitleType.zhHans:
return 'zh-Hans';
case SubtitleType.enUS:
return 'en-US';
case SubtitleType.zhTW:
return 'zh-TW';
case SubtitleType.en:
return 'en';
case SubtitleType.pt:
return 'pt';
case SubtitleType.es:
return 'es';
}
}
}
extension SubtitleCodeExtension on SubtitleType {
int get code {
switch (this) {
case SubtitleType.zhCN:
return 1;
case SubtitleType.aizh:
return 2;
case SubtitleType.aien:
return 3;
case SubtitleType.zhHans:
return 4;
case SubtitleType.enUS:
return 5;
case SubtitleType.zhTW:
return 6;
case SubtitleType.en:
return 7;
case SubtitleType.pt:
return 8;
case SubtitleType.es:
return 9;
}
}
}

View File

@ -1,6 +1,3 @@
import 'package:get/get.dart';
import '../../common/subtitle_type.dart';
class SubTitlteModel {
SubTitlteModel({
this.aid,
@ -78,11 +75,6 @@ class SubTitlteItemModel {
aiType: json["ai_type"],
aiStatus: json["ai_status"],
title: json["lan_doc"],
code: SubtitleType.values
.firstWhereOrNull(
(element) => element.id.toString() == json["lan"])
?.index ??
-1,
content: '',
body: [],
);

View File

@ -446,15 +446,6 @@ class VideoDetailController extends GetxController
}
}
// 获取字幕内容
// Future getSubtitleContent(String url) async {
// var res = await Request().get('https:$url');
// subtitleContents.value = res.data['body'].map<SubTitileContentModel>((e) {
// return SubTitileContentModel.fromJson(e);
// }).toList();
// setSubtitleContent();
// }
setSubtitleContent() {
plPlayerController.subtitleContent.value = '';
plPlayerController.subtitles.value = subtitles;

View File

@ -435,7 +435,8 @@ class VideoIntroController extends GetxController {
videoDetailCtr.danmakuCid.value = cid;
videoDetailCtr.cover.value = cover;
videoDetailCtr.queryVideoUrl();
videoDetailCtr.getSubtitle();
videoDetailCtr.clearSubtitleContent();
await videoDetailCtr.getSubtitle();
videoDetailCtr.setSubtitleContent();
// 重新请求评论
try {

View File

@ -426,7 +426,12 @@ class _HeaderControlState extends State<HeaderControl> {
/// 选择字幕
void showSubtitleDialog() async {
int tempThemeValue = widget.controller!.subTitleCode.value;
int len = widget.videoDetailCtr!.subtitles.length;
final List subtitles = widget.videoDetailCtr!.subtitles;
int len = subtitles.length;
if (subtitles.firstWhereOrNull((element) => element.id == tempThemeValue) ==
null) {
tempThemeValue = -1;
}
showDialog(
context: context,
builder: (BuildContext context) {
@ -458,7 +463,7 @@ class _HeaderControlState extends State<HeaderControl> {
),
...widget.videoDetailCtr!.subtitles
.map((e) => RadioListTile(
value: e.code,
value: e.id,
title: Text(e.title),
groupValue: tempThemeValue,
onChanged: (value) {

View File

@ -123,7 +123,7 @@ class PlPlayerController {
PreferredSizeWidget? headerControl;
PreferredSizeWidget? bottomControl;
Widget? danmuWidget;
late RxList subtitles;
RxList subtitles = [].obs;
String videoType = 'archive';
/// 数据加载监听
@ -660,10 +660,6 @@ class PlPlayerController {
const Duration(seconds: 1),
() => videoPlayerServiceHandler.onPositionChange(event));
}),
// onSubTitleOpenChanged.listen((bool event) {
// toggleSubtitle(event ? subTitleCode.value : -1);
// })
],
);
}
@ -1067,25 +1063,6 @@ class PlPlayerController {
void toggleSubtitle(int code) {
_subTitleOpen.value = code != -1;
_subTitleCode.value = code;
// if (code == -1) {
// // 关闭字幕
// _subTitleOpen.value = false;
// _subTitleCode.value = code;
// _videoPlayerController?.setSubtitleTrack(SubtitleTrack.no());
// return;
// }
// final SubTitlteItemModel? subtitle = subtitles?.firstWhereOrNull(
// (element) => element.code == code,
// );
// _subTitleOpen.value = true;
// _subTitleCode.value = code;
// _videoPlayerController?.setSubtitleTrack(
// SubtitleTrack.data(
// subtitle!.content!,
// title: subtitle.title,
// language: subtitle.lan,
// ),
// );
}
void querySubtitleContent(double progress) {
@ -1097,7 +1074,7 @@ class PlPlayerController {
return;
}
final SubTitlteItemModel? subtitle = subtitles.firstWhereOrNull(
(element) => element.code == subTitleCode.value,
(element) => element.id == subTitleCode.value,
);
if (subtitle != null && subtitle.body!.isNotEmpty) {
for (var content in subtitle.body!) {