Fixed GitHub update notifier

This commit is contained in:
Juan Gilsanz Polo 2023-10-27 14:39:07 +02:00
parent 211a0b0298
commit 80b3c004d6
4 changed files with 92 additions and 18 deletions

View file

@ -3,6 +3,7 @@ class Urls {
static const String gitHub = "https://github.com/JGeek00/adguard-home-manager";
static const String customRuleDocs = "https://kb.adguard.com/en/general/how-to-create-your-own-ad-filters";
static const String getReleasesGitHub = "https://api.github.com/repos/JGeek00/adguard-home-manager/releases";
static const String getLatestReleaseGitHub = "https://api.github.com/repos/JGeek00/adguard-home-manager/releases/latest";
static const String adGuardHomeReleasesTags = "https://api.github.com/repos/AdGuardTeam/AdGuardHome/releases/tags";
static const String googleSearchUrl = "https://www.google.com/search";
static const String connectionInstructions = "https://github.com/JGeek00/adguard-home-manager/wiki/Create-a-connection";

View file

@ -12,21 +12,27 @@ Future<GitHubRelease?> checkAppUpdates({
required Source installationSource,
required bool isBeta
}) async {
final result = await checkAppUpdatesGitHub();
var result = isBeta
? await getReleasesGitHub()
: await getLatestReleaseGitHub();
if (result['result'] == 'success') {
late GitHubRelease gitHubRelease;
if (isBeta) {
gitHubRelease = (result['body'] as List<GitHubRelease>).firstWhere((r) => r.prerelease == true);
}
else {
gitHubRelease = result['body'] as GitHubRelease;
}
final update = gitHubUpdateExists(
currentBuildNumber: currentBuildNumber,
gitHubReleases: result['body'],
gitHubRelease: gitHubRelease,
isBeta: isBeta
);
if (update == true) {
final release = isBeta == true
? result['body'].firstWhere((release) => release.prerelease == true)
: result['body'].firstWhere((release) => release.prerelease == false);
setUpdateAvailable(release);
setUpdateAvailable(gitHubRelease);
if (Platform.isAndroid) {
if (
@ -34,7 +40,7 @@ Future<GitHubRelease?> checkAppUpdates({
installationSource == Source.IS_INSTALLED_FROM_PLAY_PACKAGE_INSTALLER ||
installationSource == Source.UNKNOWN
) {
return release;
return gitHubRelease;
}
else {
return null;
@ -44,7 +50,7 @@ Future<GitHubRelease?> checkAppUpdates({
return null;
}
else {
return release;
return gitHubRelease;
}
}
else {

View file

@ -151,15 +151,11 @@ bool serverVersionIsAhead({
bool gitHubUpdateExists({
required String currentBuildNumber,
required List<GitHubRelease> gitHubReleases,
required GitHubRelease gitHubRelease,
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 releaseNumberExtractedMatches = versionNumberRegex.allMatches(release.tagName);
final releaseNumberExtractedMatches = versionNumberRegex.allMatches(gitHubRelease.tagName);
if (releaseNumberExtractedMatches.isNotEmpty) {
final releaseNumberExtracted = releaseNumberExtractedMatches.first.group(0);
@ -181,12 +177,12 @@ bool gitHubUpdateExists({
}
}
else {
Sentry.captureMessage("Invalid release number. Tagname: ${release.tagName}");
Sentry.captureMessage("Invalid release number. Tagname: ${gitHubRelease.tagName}");
return false;
}
}
else {
Sentry.captureMessage("No matches. ${release.tagName}");
Sentry.captureMessage("No matches. ${gitHubRelease.tagName}");
return false;
}
}

View file

@ -2322,7 +2322,7 @@ class ApiClient {
}
}
Future checkAppUpdatesGitHub() async {
Future getReleasesGitHub() async {
try {
HttpClient httpClient = HttpClient();
HttpClientRequest request = await httpClient.getUrl(Uri.parse(Urls.getReleasesGitHub));
@ -2391,4 +2391,75 @@ Future checkAppUpdatesGitHub() async {
)
};
}
}
Future getLatestReleaseGitHub() async {
try {
HttpClient httpClient = HttpClient();
HttpClientRequest request = await httpClient.getUrl(Uri.parse(Urls.getLatestReleaseGitHub));
HttpClientResponse response = await request.close();
String reply = await response.transform(utf8.decoder).join();
httpClient.close();
if (response.statusCode == 200) {
return {
'result': 'success',
'hasResponse': true,
'error': false,
'statusCode': response.statusCode,
'body': GitHubRelease.fromJson(jsonDecode(reply))
};
}
else {
return {
'result': 'error',
'log': AppLog(
type: 'update_encryption_settings',
dateTime: DateTime.now(),
message: 'error_code_not_expected',
statusCode: response.statusCode.toString(),
resBody: reply,
)
};
}
} on SocketException {
return {
'result': 'no_connection',
'message': 'SocketException',
'log': AppLog(
type: 'check_latest_release_github',
dateTime: DateTime.now(),
message: 'SocketException'
)
};
} on TimeoutException {
return {
'result': 'no_connection',
'message': 'TimeoutException',
'log': AppLog(
type: 'check_latest_release_github',
dateTime: DateTime.now(),
message: 'TimeoutException'
)
};
} on HandshakeException {
return {
'result': 'ssl_error',
'message': 'HandshakeException',
'log': AppLog(
type: 'check_latest_release_github',
dateTime: DateTime.now(),
message: 'HandshakeException'
)
};
} catch (e) {
return {
'result': 'error',
'message': e.toString(),
'log': AppLog(
type: 'check_latest_release_github',
dateTime: DateTime.now(),
message: e.toString()
)
};
}
}