load method
Future<LoadResult>
load(
- {required String url,
- ResponseType responseType = ResponseType.bodyBytes,
- 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;
}