fix: 弹幕控制器获取不到视频时间时异常

This commit is contained in:
orz12
2024-03-02 15:09:42 +08:00
parent 1209a8641a
commit 0d46ebb7a3

View File

@@ -13,6 +13,9 @@ class PlDanmakuController {
static int segmentLength = 60 * 6 * 1000; static int segmentLength = 60 * 6 * 1000;
void initiate(int videoDuration, int progress) { void initiate(int videoDuration, int progress) {
if (videoDuration <= 0) {
return;
}
if (requestedSeg.isEmpty) { if (requestedSeg.isEmpty) {
int segCount = (videoDuration / segmentLength).ceil(); int segCount = (videoDuration / segmentLength).ceil();
requestedSeg = List<bool>.generate(segCount, (index) => false); requestedSeg = List<bool>.generate(segCount, (index) => false);
@@ -30,6 +33,9 @@ class PlDanmakuController {
} }
void queryDanmaku(int segmentIndex) async { void queryDanmaku(int segmentIndex) async {
if (requestedSeg.length <= segmentIndex) {
return;
}
assert(requestedSeg[segmentIndex] == false); assert(requestedSeg[segmentIndex] == false);
requestedSeg[segmentIndex] = true; requestedSeg[segmentIndex] = true;
final DmSegMobileReply result = await DanmakaHttp.queryDanmaku( final DmSegMobileReply result = await DanmakaHttp.queryDanmaku(
@@ -47,6 +53,9 @@ class PlDanmakuController {
List<DanmakuElem>? getCurrentDanmaku(int progress) { List<DanmakuElem>? getCurrentDanmaku(int progress) {
int segmentIndex = calcSegment(progress); int segmentIndex = calcSegment(progress);
if (requestedSeg.length <= segmentIndex) {
return <DanmakuElem>[];
}
if (!requestedSeg[segmentIndex]) { if (!requestedSeg[segmentIndex]) {
queryDanmaku(segmentIndex); queryDanmaku(segmentIndex);
} }