audio block

Signed-off-by: dom <githubaccount56556@proton.me>
This commit is contained in:
dom
2026-02-08 21:01:38 +08:00
parent 0c65605ac0
commit 0cb07aef1c
10 changed files with 687 additions and 556 deletions

View File

@@ -19,6 +19,7 @@ import 'package:PiliPlus/pages/common/common_intro_controller.dart'
show FavMixin;
import 'package:PiliPlus/pages/dynamics_repost/view.dart';
import 'package:PiliPlus/pages/main_reply/view.dart';
import 'package:PiliPlus/pages/sponsor_block/block_mixin.dart';
import 'package:PiliPlus/pages/video/controller.dart';
import 'package:PiliPlus/pages/video/introduction/ugc/widgets/triple_mixin.dart';
import 'package:PiliPlus/pages/video/pay_coins/view.dart';
@@ -43,17 +44,24 @@ import 'package:get/get.dart';
import 'package:media_kit/media_kit.dart';
class AudioController extends GetxController
with GetTickerProviderStateMixin, TripleMixin, FavMixin {
with
GetTickerProviderStateMixin,
TripleMixin,
FavMixin,
BlockConfigMixin,
BlockMixin {
late Int64 id;
late Int64 oid;
late List<Int64> subId;
late int itemType;
Int64? extraId;
late final PlaylistSource from;
late final isVideo = itemType == 1;
@override
late final bool isUgc = itemType == 1;
final Rx<DetailItem?> audioItem = Rx<DetailItem?>(null);
@override
Player? player;
late int cacheAudioQa;
@@ -109,6 +117,7 @@ class AudioController extends GetxController
final String? audioUrl = args['audioUrl'];
final hasAudioUrl = audioUrl != null;
if (hasAudioUrl) {
_querySponsorBlock();
_onOpenMedia(
audioUrl,
ua: UaType.pc.ua,
@@ -130,6 +139,16 @@ class AudioController extends GetxController
vsync: this,
duration: const Duration(milliseconds: 200),
);
if (shutdownTimerService.isActive) {
shutdownTimerService
..onPause = onPause
..isPlaying = isPlaying;
}
}
bool isPlaying() {
return player?.state.playing ?? false;
}
Future<void>? onPlay() {
@@ -203,7 +222,19 @@ class AudioController extends GetxController
}
}
@pragma('vm:notify-debugger-on-exception')
void _querySponsorBlock() {
if (isUgc && enableSponsorBlock) {
try {
final bvid = IdUtils.av2bv(oid.toInt());
final cid = subId.first.toInt();
querySponsorBlock(bvid: bvid, cid: cid);
} catch (_) {}
}
}
Future<bool> _queryPlayUrl() async {
_querySponsorBlock();
final res = await AudioGrpc.audioPlayUrl(
itemType: itemType,
oid: oid,
@@ -475,12 +506,12 @@ class AudioController extends GetxController
void showReply() {
MainReplyPage.toMainReplyPage(
oid: oid.toInt(),
replyType: isVideo ? 1 : 14,
replyType: isUgc ? 1 : 14,
);
}
void actionShareVideo(BuildContext context) {
final audioUrl = isVideo
final audioUrl = isUgc
? '${HttpString.baseUrl}/video/${IdUtils.av2bv(oid.toInt())}'
: '${HttpString.baseUrl}/audio/au$oid';
showDialog(
@@ -552,7 +583,7 @@ class AudioController extends GetxController
useSafeArea: true,
builder: (context) => RepostPanel(
rid: oid.toInt(),
dynType: isVideo ? 8 : 256,
dynType: isUgc ? 8 : 256,
pic: arc.cover,
title: arc.title,
uname: owner.name,
@@ -561,7 +592,7 @@ class AudioController extends GetxController
}
},
),
if (isVideo)
if (isUgc)
ListTile(
dense: true,
title: const Text(
@@ -679,7 +710,7 @@ class AudioController extends GetxController
}
@override
(Object, int) get getFavRidType => (oid, isVideo ? 2 : 12);
(Object, int) get getFavRidType => (oid, isUgc ? 2 : 12);
@override
void updateFavCount(int count) {
@@ -716,6 +747,25 @@ class AudioController extends GetxController
}
}
@override
BlockConfigMixin get blockConfig => this;
@override
int get currPosInMilliseconds => position.value.inMilliseconds;
@override
Future<void>? seekTo(Duration duration, {required bool isSeek}) =>
onSeek(duration);
@override
int? get timeLength => duration.value.inMilliseconds;
@override
bool get autoPlay => true;
@override
bool get preInitPlayer => true;
@override
void onClose() {
shutdownTimerService