openAsset method

  1. @override
Future<AssetDownload> openAsset(
  1. String id, {
  2. ByteRange? range,
})
override

Opens the bytes of the asset with id, optionally restricted to range.

Always works, whatever the provider topology: a bucket read, a local file, or a relay across a node's control channel. Prefer downloadTarget when the caller can follow a redirect — that path costs the hub no bandwidth.

Implementation

@override
Future<AssetDownload> openAsset(String id, {ByteRange? range}) async {
  final opened = await _call(StoreProtocol.chunkOpen, {
    'id': id,
    ...StoreProtocol.encodeRange(range),
  });
  final readId = Json.requireString(opened, 'readId');
  final asset = Asset.fromJson(Json.asObject(opened['asset'], 'asset'));

  return AssetDownload(
    asset: asset,
    stream: _readChunks(readId),
    length: Json.requireInt(opened, 'length'),
    range: range,
    providerId: Json.optString(opened, 'providerId') ?? id,
  );
}