load method

Future<LoadResult> load(
  1. {required String url,
  2. ResponseType responseType = ResponseType.bodyBytes,
  3. String group = 'no_group'}
)

Load file from server or internal db.

Implementation

Future<LoadResult> load({
  required String url,
  ResponseType responseType = ResponseType.bodyBytes,
  String group = 'no_group',
}) async {
  final cache = await _db.getFile(url);
  if (cache != null) {
    return LoadResult.cached;
  }

  try {
    final uri = Uri.parse(url);
    final response = await http.get(uri);
    if (response.statusCode == 200) {
      String? filename;
      final disposition = response.headers['Content-Disposition']?.toString();
      if (disposition != null) {
        final reg = RegExp('''/filename[^;=\n]*=((['"]).*?2|[^;\n]*)/''');
        final match = reg.firstMatch(disposition);
        filename = match?[0];
      } else {
        filename = uri.pathSegments.last;
      }

      final entry = createEntity(
        url: url,
        group: group,
        bytes: switch (responseType) {
          ResponseType.bodyBytes => response.bodyBytes,
          ResponseType.bodyText => Uint8List.fromList(
              json.decode(response.body).cast<int>(),
            ),
        },
        filename: filename,
      );
      await _db.insertCache(entry);

      return LoadResult.load;
    }
  } on SocketException {
    return LoadResult.connectionError;
  } on HttpException {
    return LoadResult.urlError;
  } on FormatException {
    return LoadResult.formatError;
  }

  return LoadResult.failed;
}