ente/lib/services/update_service.dart

80 lines
1.9 KiB
Dart
Raw Normal View History

2021-05-22 15:46:04 +00:00
import 'dart:io';
import 'package:flutter/foundation.dart';
import 'package:logging/logging.dart';
2021-05-22 15:46:04 +00:00
import 'package:package_info_plus/package_info_plus.dart';
import 'package:photos/core/network.dart';
class UpdateService {
UpdateService._privateConstructor();
static final UpdateService instance = UpdateService._privateConstructor();
LatestVersionInfo _latestVersion;
2021-05-22 18:29:09 +00:00
PackageInfo _packageInfo;
Future<void> init() async {
_packageInfo = await PackageInfo.fromPlatform();
}
2021-05-22 15:46:04 +00:00
Future<bool> shouldUpdate() async {
2021-05-22 18:29:09 +00:00
Logger("UpdateService").info(_packageInfo.packageName);
if (!isIndependent()) {
return false;
}
2021-05-22 15:46:04 +00:00
_latestVersion = await _getLatestVersionInfo();
2021-05-22 18:29:09 +00:00
final currentVersionCode = int.parse(_packageInfo.buildNumber);
2021-05-22 15:46:04 +00:00
return currentVersionCode < _latestVersion.code;
}
LatestVersionInfo getLatestVersionInfo() {
return _latestVersion;
}
Future<LatestVersionInfo> _getLatestVersionInfo() async {
final response = await Network.instance
.getDio()
2021-05-22 18:00:20 +00:00
.get("https://static.ente.io/independent-release-info.json");
2021-05-22 15:46:04 +00:00
return LatestVersionInfo.fromMap(response.data["latestVersion"]);
}
2021-05-22 18:29:09 +00:00
bool isIndependent() {
if (Platform.isIOS) {
return false;
}
if (!kDebugMode &&
_packageInfo.packageName != "io.ente.photos.independent") {
return false;
}
return true;
}
2021-05-22 15:46:04 +00:00
}
class LatestVersionInfo {
final String name;
final int code;
final List<String> changelog;
final bool shouldForceUpdate;
final String url;
final int size;
LatestVersionInfo(
this.name,
this.code,
this.changelog,
this.shouldForceUpdate,
this.url,
this.size,
);
factory LatestVersionInfo.fromMap(Map<String, dynamic> map) {
return LatestVersionInfo(
map['name'],
map['code'],
List<String>.from(map['changelog']),
map['shouldForceUpdate'],
map['url'],
map['size'],
);
}
}