nc-photos/app/lib/update_checker.dart

54 lines
1.5 KiB
Dart
Raw Normal View History

2022-05-26 18:40:18 +08:00
import 'dart:convert';
import 'package:http/http.dart' as http;
import 'package:logging/logging.dart';
import 'package:nc_photos/k.dart' as k;
enum UpdateCheckerResult {
updateAvailable,
alreadyLatest,
error,
}
class UpdateChecker {
Future<UpdateCheckerResult> call() async {
try {
final uri = Uri.https("bit.ly", "3pb2oG9");
final req = http.Request("GET", uri);
final response =
await http.Response.fromStream(await http.Client().send(req));
if (response.statusCode != 200) {
_log.severe("[call] Failed GETing URL: ${response.statusCode}");
return UpdateCheckerResult.error;
}
final body = response.body;
final json = jsonDecode(body) as Map;
final data = json[_buildVariant] as Map;
_log.info("[call] Update data: ${jsonEncode(data)}");
final latest = data["v"];
_versionStr = data["vStr"];
_updateUrl = data["url"];
if (latest > k.version) {
return UpdateCheckerResult.updateAvailable;
} else {
return UpdateCheckerResult.alreadyLatest;
}
} catch (e, stackTrace) {
_log.severe("[call] Exception", e, stackTrace);
return UpdateCheckerResult.error;
}
}
/// Return the binary url (if available) after [call] returned with
/// [UpdateCheckerResult.updateAvailable]
String? get updateUrl => _updateUrl;
String? get versionStr => _versionStr;
String? _updateUrl;
String? _versionStr;
static const _buildVariant = "";
static final _log = Logger("update_checker.UpdateChecker");
}