mirror of
https://github.com/HChaZZY/PiliPlus.git
synced 2025-12-06 09:13:48 +08:00
opt: query dm
Closes #544 Signed-off-by: bggRGjQaUbCoE <githubaccount56556@proton.me>
This commit is contained in:
@@ -12,23 +12,10 @@ class PlDanmakuController {
|
||||
|
||||
Map<int, List<DanmakuElem>> dmSegMap = {};
|
||||
// 已请求的段落标记
|
||||
List<bool> requestedSeg = [];
|
||||
|
||||
bool get initiated => requestedSeg.isNotEmpty;
|
||||
Map requestedSeg = {};
|
||||
|
||||
static int segmentLength = 60 * 6 * 1000;
|
||||
|
||||
void initiate(int videoDuration, int progress) {
|
||||
if (videoDuration <= 0) {
|
||||
return;
|
||||
}
|
||||
if (requestedSeg.isEmpty) {
|
||||
int segCount = (videoDuration / segmentLength).ceil();
|
||||
requestedSeg = List<bool>.generate(segCount, (index) => false);
|
||||
}
|
||||
queryDanmaku(calcSegment(progress));
|
||||
}
|
||||
|
||||
void dispose() {
|
||||
dmSegMap.clear();
|
||||
requestedSeg.clear();
|
||||
@@ -39,34 +26,35 @@ class PlDanmakuController {
|
||||
}
|
||||
|
||||
void queryDanmaku(int segmentIndex) async {
|
||||
if (requestedSeg.length <= segmentIndex) {
|
||||
if (requestedSeg[segmentIndex] == true) {
|
||||
return;
|
||||
}
|
||||
assert(requestedSeg[segmentIndex] == false);
|
||||
requestedSeg[segmentIndex] = true;
|
||||
final DmSegMobileReply result = await DanmakuHttp.queryDanmaku(
|
||||
final Map result = await DanmakuHttp.queryDanmaku(
|
||||
cid: cid,
|
||||
segmentIndex: segmentIndex + 1,
|
||||
mergeDanmaku: plPlayerController.mergeDanmaku,
|
||||
);
|
||||
if (result.elems.isNotEmpty) {
|
||||
for (var element in result.elems) {
|
||||
int pos = element.progress ~/ 100; //每0.1秒存储一次
|
||||
if (dmSegMap[pos] == null) {
|
||||
dmSegMap[pos] = [];
|
||||
if (result['status']) {
|
||||
if (result['data'].elems.isNotEmpty) {
|
||||
for (var element in result['data'].elems) {
|
||||
int pos = element.progress ~/ 100; //每0.1秒存储一次
|
||||
if (dmSegMap[pos] == null) {
|
||||
dmSegMap[pos] = [];
|
||||
}
|
||||
dmSegMap[pos]!.add(element);
|
||||
}
|
||||
dmSegMap[pos]!.add(element);
|
||||
}
|
||||
} else {
|
||||
requestedSeg[segmentIndex] = false;
|
||||
}
|
||||
}
|
||||
|
||||
List<DanmakuElem>? getCurrentDanmaku(int progress) {
|
||||
int segmentIndex = calcSegment(progress);
|
||||
if (requestedSeg.length <= segmentIndex) {
|
||||
return <DanmakuElem>[];
|
||||
}
|
||||
if (!requestedSeg[segmentIndex]) {
|
||||
if (requestedSeg[segmentIndex] != true) {
|
||||
queryDanmaku(segmentIndex);
|
||||
return null;
|
||||
}
|
||||
if (plPlayerController.danmakuWeight == 0 &&
|
||||
plPlayerController.filters.count == 0) {
|
||||
|
||||
Reference in New Issue
Block a user