precache static method
Implementation
static Future<Stream<PrecacheProgressEvent>?> precache(
String url, {
Map<String, Object>? headers,
int cacheSegments = 2,
bool downloadNow = true,
bool progressListen = false,
}) async {
final headerMap = headers?.map((k, v) => MapEntry(k, v.toString()));
if (!progressListen) {
await frb.videoCachingPrecache(
url: url,
headers: headerMap,
cacheSegments: cacheSegments,
downloadNow: downloadNow,
progressListen: false,
sink: null,
);
return null;
}
final sink = RustStreamSink<frb.PrecacheProgressInfo>();
final controller = StreamController<PrecacheProgressEvent>.broadcast();
unawaited(
frb
.videoCachingPrecache(
url: url,
headers: headerMap,
cacheSegments: cacheSegments,
downloadNow: downloadNow,
progressListen: true,
sink: sink,
)
.then((_) {
if (!controller.isClosed) {
controller.close();
}
})
.catchError((Object error, StackTrace stackTrace) {
if (!controller.isClosed) {
controller.addError(error, stackTrace);
controller.close();
}
}),
);
sink.stream.listen(
(info) {
if (controller.isClosed) return;
final event = PrecacheProgressEvent.fromInfo(info);
controller.add(event);
},
onError: (Object error, StackTrace stackTrace) {
if (!controller.isClosed) {
controller.addError(error, stackTrace);
controller.close();
}
},
);
return controller.stream;
}