Adapted version checker to new tag name

This commit is contained in:
Juan Gilsanz Polo 2023-05-28 03:08:25 +02:00
parent 15147bf16d
commit 6fcd03f899
6 changed files with 62 additions and 65 deletions

View file

@ -39,9 +39,10 @@ class _BaseState extends State<Base> with WidgetsBindingObserver {
WidgetsBinding.instance.addPostFrameCallback((_) async {
final appConfigProvider = Provider.of<AppConfigProvider>(context, listen: false);
final result = await checkAppUpdates(
appVersion: appConfigProvider.getAppInfo!.version,
currentBuildNumber: appConfigProvider.getAppInfo!.buildNumber,
installationSource: appConfigProvider.installationSource,
setUpdateAvailable: appConfigProvider.setAppUpdatesAvailable
setUpdateAvailable: appConfigProvider.setAppUpdatesAvailable,
isBeta: appConfigProvider.getAppInfo!.version.contains('beta'),
);
if (result != null && appConfigProvider.doNotRememberVersion != result.tagName) {

View file

@ -3,11 +3,12 @@ import 'dart:io';
import 'package:adguard_home_manager/models/github_release.dart';
String? getAppUpdateDownloadLink(GitHubRelease gitHubRelease) {
try {
if (Platform.isAndroid) {
return gitHubRelease.assets.firstWhere((item) => item.browserDownloadUrl.contains('apk')).browserDownloadUrl;
}
else if (Platform.isMacOS) {
return gitHubRelease.assets.firstWhere((item) => item.browserDownloadUrl.contains('macOS')).browserDownloadUrl; // macOS package is a zip
return gitHubRelease.assets.firstWhere((item) => item.browserDownloadUrl.contains('macOS')).browserDownloadUrl;
}
else if (Platform.isWindows) {
return gitHubRelease.assets.firstWhere((item) => item.browserDownloadUrl.contains('exe')).browserDownloadUrl;
@ -18,4 +19,7 @@ String? getAppUpdateDownloadLink(GitHubRelease gitHubRelease) {
else {
return null;
}
} catch (e) {
return null;
}
}

View file

@ -7,17 +7,22 @@ import 'package:adguard_home_manager/models/github_release.dart';
import 'package:adguard_home_manager/services/http_requests.dart';
Future<GitHubRelease?> checkAppUpdates({
required String appVersion,
required String currentBuildNumber,
required void Function(GitHubRelease?) setUpdateAvailable,
required Source installationSource
required Source installationSource,
required bool isBeta
}) async {
final result = await checkAppUpdatesGitHub();
if (result['result'] == 'success') {
final update = gitHubUpdateExists(appVersion, result['body']);
final update = gitHubUpdateExists(
currentBuildNumber: currentBuildNumber,
gitHubReleases: result['body'],
isBeta: isBeta
);
if (update == true) {
final release = appVersion.contains('beta')
final release = isBeta == true
? result['body'].firstWhere((release) => release.prerelease == true)
: result['body'].firstWhere((release) => release.prerelease == false);

View file

@ -149,52 +149,36 @@ bool serverVersionIsAhead({
}
}
bool gitHubUpdateExists(String appVersion, List<GitHubRelease> gitHubReleases) {
if (appVersion.contains('beta')) {
final gitHubVersion = gitHubReleases.firstWhere((release) => release.prerelease == true).tagName;
bool gitHubUpdateExists({
required String currentBuildNumber,
required List<GitHubRelease> gitHubReleases,
required bool isBeta
}) {
final release = isBeta == true
? gitHubReleases.firstWhere((release) => release.prerelease == true)
: gitHubReleases.firstWhere((release) => release.prerelease == false);
final appBetaSplit = appVersion.split('-');
final gitHubBetaSplit = gitHubVersion.split('-');
final versionNumberRegex = RegExp(r'\(\d+\)');
final releaseNumberExtracted = versionNumberRegex.allMatches(release.tagName).first.group(0);
final List<int> appVersionSplit = List<int>.from(appBetaSplit[0].split('.').map((e) => int.parse(e)));
final int appBetaNumber = int.parse(appBetaSplit[1].split('.')[1]);
final List<int> gitHubVersionSplit = List<int>.from(gitHubBetaSplit[0].split('.').map((e) => int.parse(e)));
final int gitHubBetaNumber = int.parse(gitHubBetaSplit[1].split('.')[1]);
if (gitHubVersionSplit[0] > appVersionSplit[0]) {
return true;
}
else if (gitHubVersionSplit[0] == appVersionSplit[0] && gitHubVersionSplit[1] > appVersionSplit[1]) {
return true;
}
else if (gitHubVersionSplit[0] == appVersionSplit[0] && gitHubVersionSplit[1] == appVersionSplit[1] && gitHubVersionSplit[2] > appVersionSplit[2]) {
return true;
}
else if (gitHubVersionSplit[0] == appVersionSplit[0] && gitHubVersionSplit[1] == appVersionSplit[1] && gitHubVersionSplit[2] == appVersionSplit[2] && gitHubBetaNumber > appBetaNumber) {
if (releaseNumberExtracted != null) {
final releaseNumber = releaseNumberExtracted.replaceAll(RegExp(r'\(|\)'), '');
try {
final newReleaseParsed = int.parse(releaseNumber);
final currentReleaseParsed = int.parse(currentBuildNumber);
if (newReleaseParsed > currentReleaseParsed) {
return true;
}
else {
return false;
}
}
else {
final gitHubVersion = gitHubReleases.firstWhere((release) => release.prerelease == false).tagName;
final List<int> appVersionSplit = List<int>.from(appVersion.split('.').map((e) => int.parse(e)));
final List<int> gitHubVersionSplit = List<int>.from(gitHubVersion.split('.').map((e) => int.parse(e)));
if (gitHubVersionSplit[0] > appVersionSplit[0]) {
return true;
}
else if (gitHubVersionSplit[0] == appVersionSplit[0] && gitHubVersionSplit[1] > appVersionSplit[1]) {
return true;
}
else if (gitHubVersionSplit[0] == appVersionSplit[0] && gitHubVersionSplit[1] == appVersionSplit[1] && gitHubVersionSplit[2] > appVersionSplit[2]) {
return true;
}
else {
} catch (e) {
Sentry.captureMessage("Invalid release number. Current release: $currentBuildNumber. New release: $releaseNumber");
return false;
}
}
else {
Sentry.captureMessage("Invalid release number. Tagname: ${release.tagName}");
return false;
}
}

View file

@ -57,9 +57,10 @@ class _GeneralSettingsState extends State<GeneralSettings> {
setState(() => appUpdatesStatus = AppUpdatesStatus.checking);
final res = await checkAppUpdates(
appVersion: appConfigProvider.getAppInfo!.version,
currentBuildNumber: appConfigProvider.getAppInfo!.buildNumber,
setUpdateAvailable: appConfigProvider.setAppUpdatesAvailable,
installationSource: appConfigProvider.installationSource
installationSource: appConfigProvider.installationSource,
isBeta: appConfigProvider.getAppInfo!.version.contains('beta'),
);
if (res != null) {

View file

@ -60,7 +60,7 @@ class _UpdateModalState extends State<UpdateModal> {
),
const SizedBox(height: 10),
Text(
"${AppLocalizations.of(context)!.newVersion}: ${widget.gitHubRelease.tagName}",
"${AppLocalizations.of(context)!.newVersion}: ${widget.gitHubRelease.name.replaceAll('v', '')}",
style: TextStyle(
color: Theme.of(context).colorScheme.onSurfaceVariant
),
@ -101,7 +101,9 @@ class _UpdateModalState extends State<UpdateModal> {
),
actions: [
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
mainAxisAlignment: downloadLink != null
? MainAxisAlignment.spaceBetween
: MainAxisAlignment.end,
children: [
if (downloadLink != null) TextButton(
onPressed: () {