mirror of
https://github.com/bggRGjQaUbCoE/PiliPlus.git
synced 2026-04-21 19:28:27 +08:00
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user