diff --git a/lib/base.dart b/lib/base.dart
index 5869774..b2b593b 100644
--- a/lib/base.dart
+++ b/lib/base.dart
@@ -39,9 +39,10 @@ class _BaseState extends State with WidgetsBindingObserver {
WidgetsBinding.instance.addPostFrameCallback((_) async {
final appConfigProvider = Provider.of(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) {
diff --git a/lib/functions/app_update_download_link.dart b/lib/functions/app_update_download_link.dart
index 76c1a2d..48c798a 100644
--- a/lib/functions/app_update_download_link.dart
+++ b/lib/functions/app_update_download_link.dart
@@ -3,19 +3,23 @@ import 'dart:io';
import 'package:adguard_home_manager/models/github_release.dart';
String? getAppUpdateDownloadLink(GitHubRelease gitHubRelease) {
- 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
- }
- else if (Platform.isWindows) {
- return gitHubRelease.assets.firstWhere((item) => item.browserDownloadUrl.contains('exe')).browserDownloadUrl;
- }
- else if (Platform.isLinux) {
- return gitHubRelease.assets.firstWhere((item) => item.browserDownloadUrl.contains('deb')).browserDownloadUrl;
- }
- else {
+ 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;
+ }
+ else if (Platform.isWindows) {
+ return gitHubRelease.assets.firstWhere((item) => item.browserDownloadUrl.contains('exe')).browserDownloadUrl;
+ }
+ else if (Platform.isLinux) {
+ return gitHubRelease.assets.firstWhere((item) => item.browserDownloadUrl.contains('deb')).browserDownloadUrl;
+ }
+ else {
+ return null;
+ }
+ } catch (e) {
return null;
}
}
\ No newline at end of file
diff --git a/lib/functions/check_app_updates.dart b/lib/functions/check_app_updates.dart
index 2063f20..eb44177 100644
--- a/lib/functions/check_app_updates.dart
+++ b/lib/functions/check_app_updates.dart
@@ -7,17 +7,22 @@ import 'package:adguard_home_manager/models/github_release.dart';
import 'package:adguard_home_manager/services/http_requests.dart';
Future 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);
diff --git a/lib/functions/compare_versions.dart b/lib/functions/compare_versions.dart
index e10662a..4bdc178 100644
--- a/lib/functions/compare_versions.dart
+++ b/lib/functions/compare_versions.dart
@@ -149,52 +149,36 @@ bool serverVersionIsAhead({
}
}
-bool gitHubUpdateExists(String appVersion, List gitHubReleases) {
- if (appVersion.contains('beta')) {
- final gitHubVersion = gitHubReleases.firstWhere((release) => release.prerelease == true).tagName;
+bool gitHubUpdateExists({
+ required String currentBuildNumber,
+ required List gitHubReleases,
+ required bool isBeta
+}) {
+ final release = isBeta == true
+ ? gitHubReleases.firstWhere((release) => release.prerelease == true)
+ : gitHubReleases.firstWhere((release) => release.prerelease == false);
+
+ final versionNumberRegex = RegExp(r'\(\d+\)');
+ final releaseNumberExtracted = versionNumberRegex.allMatches(release.tagName).first.group(0);
- final appBetaSplit = appVersion.split('-');
- final gitHubBetaSplit = gitHubVersion.split('-');
-
- final List appVersionSplit = List.from(appBetaSplit[0].split('.').map((e) => int.parse(e)));
- final int appBetaNumber = int.parse(appBetaSplit[1].split('.')[1]);
-
- final List gitHubVersionSplit = List.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) {
- return true;
- }
- else {
+ 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;
+ }
+ } catch (e) {
+ Sentry.captureMessage("Invalid release number. Current release: $currentBuildNumber. New release: $releaseNumber");
return false;
}
}
else {
- final gitHubVersion = gitHubReleases.firstWhere((release) => release.prerelease == false).tagName;
-
- final List appVersionSplit = List.from(appVersion.split('.').map((e) => int.parse(e)));
- final List gitHubVersionSplit = List.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 {
- return false;
- }
+ Sentry.captureMessage("Invalid release number. Tagname: ${release.tagName}");
+ return false;
}
}
\ No newline at end of file
diff --git a/lib/screens/settings/general_settings.dart b/lib/screens/settings/general_settings.dart
index 718bda7..e68aae3 100644
--- a/lib/screens/settings/general_settings.dart
+++ b/lib/screens/settings/general_settings.dart
@@ -57,9 +57,10 @@ class _GeneralSettingsState extends State {
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) {
diff --git a/lib/widgets/update_modal.dart b/lib/widgets/update_modal.dart
index d8f164f..5b99b66 100644
--- a/lib/widgets/update_modal.dart
+++ b/lib/widgets/update_modal.dart
@@ -60,7 +60,7 @@ class _UpdateModalState extends State {
),
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 {
),
actions: [
Row(
- mainAxisAlignment: MainAxisAlignment.spaceBetween,
+ mainAxisAlignment: downloadLink != null
+ ? MainAxisAlignment.spaceBetween
+ : MainAxisAlignment.end,
children: [
if (downloadLink != null) TextButton(
onPressed: () {