mirror of
https://github.com/bggRGjQaUbCoE/PiliPlus.git
synced 2026-04-24 20:35:50 +08:00
refa player (#1848)
* tweak
* Reapply "opt: audio uri" (#1833)
This reverts commit 8e726f49b2.
* opt: player
* opt: player
* refa: create player
* refa: player
* opt: UaType
* fix: sb seek preview
* opt: setSub
* fix: screenshot
* opt: unnecessary final player state
* opt: player track
* opt FileSource constructor [skip ci]
* fixes
* fix: dispose player
* fix: quote
* update
* fix: multi ua & remove unused loop
* remove unneeded check [skip ci]
---------
Co-authored-by: dom <githubaccount56556@proton.me>
This commit is contained in:
committed by
GitHub
parent
6782bee11a
commit
7276cde48a
@@ -12,9 +12,9 @@ import 'package:PiliPlus/grpc/bilibili/app/listener/v1.pb.dart'
|
||||
ListOrder,
|
||||
DashItem,
|
||||
ResponseUrl;
|
||||
import 'package:PiliPlus/http/browser_ua.dart';
|
||||
import 'package:PiliPlus/http/constants.dart';
|
||||
import 'package:PiliPlus/http/loading_state.dart';
|
||||
import 'package:PiliPlus/http/ua_type.dart';
|
||||
import 'package:PiliPlus/pages/common/common_intro_controller.dart'
|
||||
show FavMixin;
|
||||
import 'package:PiliPlus/pages/dynamics_repost/view.dart';
|
||||
@@ -59,8 +59,9 @@ class AudioController extends GetxController
|
||||
@override
|
||||
late final bool isUgc = itemType == 1;
|
||||
|
||||
final Rx<DetailItem?> audioItem = Rx<DetailItem?>(null);
|
||||
final audioItem = Rxn<DetailItem>();
|
||||
|
||||
bool _hasInit = false;
|
||||
@override
|
||||
Player? player;
|
||||
late int cacheAudioQa;
|
||||
@@ -71,7 +72,7 @@ class AudioController extends GetxController
|
||||
|
||||
late final AnimationController animController;
|
||||
|
||||
Set<StreamSubscription>? _subscriptions;
|
||||
List<StreamSubscription>? _subscriptions;
|
||||
|
||||
int? index;
|
||||
List<DetailItem>? playlist;
|
||||
@@ -118,11 +119,7 @@ class AudioController extends GetxController
|
||||
final hasAudioUrl = audioUrl != null;
|
||||
if (hasAudioUrl) {
|
||||
_querySponsorBlock();
|
||||
_onOpenMedia(
|
||||
audioUrl,
|
||||
ua: UaType.pc.ua,
|
||||
referer: HttpString.baseUrl,
|
||||
);
|
||||
_onOpenMedia(audioUrl, ua: BrowserUa.pc, referer: HttpString.baseUrl);
|
||||
}
|
||||
Utils.isWiFi.then((isWiFi) {
|
||||
cacheAudioQa = isWiFi ? Pref.defaultAudioQa : Pref.defaultAudioQaCellular;
|
||||
@@ -155,7 +152,7 @@ class AudioController extends GetxController
|
||||
return player?.play();
|
||||
}
|
||||
|
||||
Future<void>? onPause() async {
|
||||
Future<void>? onPause() {
|
||||
return player?.pause();
|
||||
}
|
||||
|
||||
@@ -277,28 +274,33 @@ class AudioController extends GetxController
|
||||
}
|
||||
}
|
||||
|
||||
void _onOpenMedia(
|
||||
Future<void> _onOpenMedia(
|
||||
String url, {
|
||||
String? referer,
|
||||
String ua = Constants.userAgentApp,
|
||||
}) {
|
||||
_initPlayerIfNeeded();
|
||||
player!.open(
|
||||
Media(
|
||||
url,
|
||||
start: _start,
|
||||
httpHeaders: {
|
||||
'user-agent': ua,
|
||||
'referer': ?referer,
|
||||
},
|
||||
),
|
||||
);
|
||||
String? referer,
|
||||
}) async {
|
||||
await _initPlayerIfNeeded();
|
||||
player
|
||||
?..setMediaHeader(
|
||||
userAgent: ua,
|
||||
// mpv cannot clear referer option
|
||||
headers: {'Referer': ?referer},
|
||||
)
|
||||
..open(Media(url, start: _start));
|
||||
_start = null;
|
||||
}
|
||||
|
||||
void _initPlayerIfNeeded() {
|
||||
player ??= Player();
|
||||
_subscriptions ??= {
|
||||
Future<void> _initPlayerIfNeeded() async {
|
||||
if (_hasInit) return;
|
||||
_hasInit = true;
|
||||
assert(player == null, _subscriptions = null);
|
||||
player = await Player.create();
|
||||
if (isClosed) {
|
||||
player!.dispose();
|
||||
player = null;
|
||||
return;
|
||||
}
|
||||
_subscriptions = [
|
||||
player!.stream.position.listen((position) {
|
||||
if (isDragging) return;
|
||||
if (position.inSeconds != this.position.value.inSeconds) {
|
||||
@@ -307,11 +309,9 @@ class AudioController extends GetxController
|
||||
videoPlayerServiceHandler?.onPositionChange(position);
|
||||
}
|
||||
}),
|
||||
player!.stream.duration.listen((duration) {
|
||||
this.duration.value = duration;
|
||||
}),
|
||||
player!.stream.duration.listen(duration.call),
|
||||
player!.stream.playing.listen((playing) {
|
||||
PlayerStatus playerStatus;
|
||||
final PlayerStatus playerStatus;
|
||||
if (playing) {
|
||||
animController.forward();
|
||||
playerStatus = PlayerStatus.playing;
|
||||
@@ -339,14 +339,14 @@ class AudioController extends GetxController
|
||||
playNext(nextPart: true);
|
||||
break;
|
||||
case PlayRepeat.singleCycle:
|
||||
_replay();
|
||||
onPlay();
|
||||
break;
|
||||
case PlayRepeat.listCycle:
|
||||
if (!playNext(nextPart: true)) {
|
||||
if (index != null && index != 0 && playlist != null) {
|
||||
playIndex(0);
|
||||
} else {
|
||||
_replay();
|
||||
onPlay();
|
||||
}
|
||||
}
|
||||
break;
|
||||
@@ -356,11 +356,7 @@ class AudioController extends GetxController
|
||||
}
|
||||
}
|
||||
}),
|
||||
};
|
||||
}
|
||||
|
||||
void _replay() {
|
||||
player?.seek(Duration.zero).whenComplete(player!.play);
|
||||
];
|
||||
}
|
||||
|
||||
@override
|
||||
|
||||
Reference in New Issue
Block a user