feat: cellular video/audio qa

Closes #52

Signed-off-by: bggRGjQaUbCoE <githubaccount56556@proton.me>
This commit is contained in:
bggRGjQaUbCoE
2024-12-26 13:35:35 +08:00
parent ed3036cc43
commit 5d1c1494dd
8 changed files with 185 additions and 99 deletions

View File

@@ -18,6 +18,7 @@ import 'package:PiliPalaX/pages/video/detail/related/controller.dart';
import 'package:PiliPalaX/pages/video/detail/reply/controller.dart';
import 'package:PiliPalaX/utils/extension.dart';
import 'package:canvas_danmaku/models/danmaku_content_item.dart';
import 'package:connectivity_plus/connectivity_plus.dart';
import 'package:dio/dio.dart';
import 'package:floating/floating.dart';
import 'package:flutter/material.dart';
@@ -206,7 +207,7 @@ class VideoDetailController extends GetxController
late PreferredSizeWidget headerControl;
// late bool enableCDN;
late int? cacheVideoQa;
int? cacheVideoQa;
late String cacheDecode;
late String cacheSecondDecode;
late int cacheAudioQa;
@@ -303,16 +304,11 @@ class VideoDetailController extends GetxController
// CDN优化
// enableCDN = setting.get(SettingBoxKey.enableCDN, defaultValue: true);
// 预设的画质
cacheVideoQa = setting.get(SettingBoxKey.defaultVideoQa,
defaultValue: VideoQuality.values.last.code);
// 预设的解码格式
cacheDecode = setting.get(SettingBoxKey.defaultDecode,
defaultValue: VideoDecodeFormats.values.last.code);
cacheSecondDecode = setting.get(SettingBoxKey.secondDecode,
defaultValue: VideoDecodeFormats.values[1].code);
cacheAudioQa = setting.get(SettingBoxKey.defaultAudioQa,
defaultValue: AudioQuality.hiRes.code);
oid.value = IdUtils.bv2av(Get.parameters['bvid']!);
enableSponsorBlock =
setting.get(SettingBoxKey.enableSponsorBlock, defaultValue: false);
@@ -1013,6 +1009,21 @@ class VideoDetailController extends GetxController
// 视频链接
Future queryVideoUrl() async {
if (cacheVideoQa == null) {
await Utils.checkConnectivity().then((res) {
cacheVideoQa = res == ConnectivityResult.mobile
? setting.get(SettingBoxKey.defaultVideoQaCellular,
defaultValue: VideoQuality.high1080.code)
: setting.get(SettingBoxKey.defaultVideoQa,
defaultValue: VideoQuality.values.last.code);
cacheAudioQa = res == ConnectivityResult.mobile
? setting.get(SettingBoxKey.defaultAudioQaCellular,
defaultValue: AudioQuality.k192.code)
: setting.get(SettingBoxKey.defaultAudioQa,
defaultValue: AudioQuality.hiRes.code);
});
}
var result = await VideoHttp.videoUrl(cid: cid.value, bvid: bvid);
if (result['status']) {
data = result['data'];

View File

@@ -808,21 +808,21 @@ class _HeaderControlState extends State<HeaderControl> {
videoFormat[i].quality) {
return;
}
Get.back();
final int quality = videoFormat[i].quality!;
widget.videoDetailCtr!.currentVideoQa =
VideoQualityCode.fromCode(quality)!;
String oldQualityDesc =
VideoQualityCode.fromCode(setting.get(
SettingBoxKey.defaultVideoQa,
defaultValue:
VideoQuality.values.last.code))!
.description;
setting.put(
SettingBoxKey.defaultVideoQa, quality);
SmartDialog.showToast(
"默认画质由:$oldQualityDesc 变为:${VideoQualityCode.fromCode(quality)!.description}");
widget.videoDetailCtr!.updatePlayer();
Get.back();
// String oldQualityDesc =
// VideoQualityCode.fromCode(setting.get(
// SettingBoxKey.defaultVideoQa,
// defaultValue:
// VideoQuality.values.last.code))!
// .description;
// setting.put(
// SettingBoxKey.defaultVideoQa, quality);
// SmartDialog.showToast(
// "默认画质由:$oldQualityDesc 变为:${VideoQualityCode.fromCode(quality)!.description}");
},
// 可能包含会员解锁画质
enabled: i >= totalQaSam - userfulQaSam,
@@ -897,20 +897,20 @@ class _HeaderControlState extends State<HeaderControl> {
if (currentAudioQa.code == i.id) {
return;
}
Get.back();
final int quality = i.id!;
widget.videoDetailCtr!.currentAudioQa =
AudioQualityCode.fromCode(quality)!;
String oldQualityDesc = AudioQualityCode.fromCode(
setting.get(SettingBoxKey.defaultAudioQa,
defaultValue:
AudioQuality.values.last.code))!
.description;
setting.put(
SettingBoxKey.defaultAudioQa, quality);
SmartDialog.showToast(
"默认音质由:$oldQualityDesc 变为:${AudioQualityCode.fromCode(quality)!.description}");
widget.videoDetailCtr!.updatePlayer();
Get.back();
// String oldQualityDesc = AudioQualityCode.fromCode(
// setting.get(SettingBoxKey.defaultAudioQa,
// defaultValue:
// AudioQuality.values.last.code))!
// .description;
// setting.put(
// SettingBoxKey.defaultAudioQa, quality);
// SmartDialog.showToast(
// "默认音质由:$oldQualityDesc 变为:${AudioQualityCode.fromCode(quality)!.description}");
},
contentPadding:
const EdgeInsets.only(left: 20, right: 20),
@@ -1763,11 +1763,15 @@ class _HeaderControlState extends State<HeaderControl> {
icon: Stack(
alignment: Alignment.center,
children: [
Icon(Icons.shield, size: 18),
Icon(
Icons.shield_outlined,
size: 19,
color: Colors.white,
),
Icon(
Icons.play_arrow_rounded,
size: 17,
color: Colors.black87,
size: 13,
color: Colors.white,
),
],
),