checkServerForUpdate method
Future<UpdateManifest?>
checkServerForUpdate({
- required String channel,
- required String branch,
- required String runtimeFingerprint,
- required String deviceId,
override
Queries the update server for an available update manifest matching channel, branch, and runtimeFingerprint.
Implementation
@override
Future<UpdateManifest?> checkServerForUpdate({
required String channel,
required String branch,
required String runtimeFingerprint,
required String deviceId,
}) async {
final uri = Uri.parse('$baseUrl/api/v1/updates/check').replace(queryParameters: {
'channel': channel,
'branch': branch,
'fingerprint': runtimeFingerprint,
'device_id': deviceId,
});
logger.debug('BloomHttpUpdateAdapter: Checking update server at $uri');
try {
final response = await httpClient.get(
uri,
headers: {
'Accept': 'application/json',
'User-Agent': 'BloomOTA/1.0.0',
...defaultHeaders,
},
);
if (response.statusCode == 204 || response.statusCode == 404) {
// No update available
return null;
}
if (response.statusCode >= 200 && response.statusCode < 300) {
final data = jsonDecode(response.body);
if (data is Map<String, dynamic>) {
if (data['is_available'] == false || data['manifest'] == null && data['id'] == null) {
return null;
}
final manifestMap = data['manifest'] is Map<String, dynamic>
? data['manifest'] as Map<String, dynamic>
: data;
return UpdateManifest.fromJson(manifestMap);
}
}
logger.warn('BloomHttpUpdateAdapter: Server returned status ${response.statusCode}: ${response.body}');
return null;
} catch (e, st) {
logger.error('BloomHttpUpdateAdapter: Check failed: $e', e, st);
rethrow;
}
}