Update improvements

This commit is contained in:
Juan Gilsanz Polo 2023-04-07 16:48:58 +02:00
parent e02b598be9
commit 5edb302944
9 changed files with 79 additions and 16 deletions

View file

@ -3,5 +3,5 @@ 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 checkLatestReleaseUrl = "https://api.github.com/repos/JGeek00/adguard-home-manager/releases/latest";
static const String adGuardHomeLatestRelease = "https://api.github.com/repos/AdGuardTeam/AdGuardHome/releases/latest";
static const String adGuardHomeReleasesTags = "https://api.github.com/repos/AdGuardTeam/AdGuardHome/releases/tags";
}

View file

@ -596,5 +596,7 @@
"unknownStatus": "Unknown status",
"checkingUpdates": "Checking updates...",
"checkUpdates": "Check updates",
"requestingUpdate": "Requesting update..."
"requestingUpdate": "Requesting update...",
"autoupdateUnavailable": "Autoupdate unavailable",
"autoupdateUnavailableDescription": "The autoupdate service is not available for this server. It could be because the server is running on a Docker container. You have to update your server manually."
}

View file

@ -596,5 +596,7 @@
"unknownStatus": "Estado desconocido",
"checkingUpdates": "Comprobando actualizaciones...",
"checkUpdates": "Comprobar actualizaciones",
"requestingUpdate": "Solicitando actualización..."
"requestingUpdate": "Solicitando actualización...",
"autoupdateUnavailable": "Autoactualización no disponible",
"autoupdateUnavailableDescription": "El servicio de actualización automática del servidor no está disponible. Puede ser porque el servidor se esté ejecutando en un contenedor Docker. Tienes que actualizar tu servidor manualmente."
}

View file

@ -485,13 +485,13 @@ class ServersProvider with ChangeNotifier {
void checkServerUpdatesAvailable(Server server) async {
setUpdateAvailableLoadStatus(LoadStatus.loading, true);
final result = await Future.wait([
checkServerUpdates(server: server),
getUpdateChangelog(server: server)
]);
if (result[0]['result'] == 'success') {
UpdateAvailableData data = result[0]['data'];
data.changelog = result[1]['body'];
final result = await checkServerUpdates(server: server);
if (result['result'] == 'success') {
UpdateAvailableData data = result['data'];
final gitHubResult = await getUpdateChangelog(server: server, releaseTag: data.newVersion);
if (gitHubResult['result'] == 'success') {
data.changelog = gitHubResult['body'];
}
data.updateAvailable = data.newVersion.contains('b')
? compareBetaVersions(
currentVersion: data.currentVersion.replaceAll('v', ''),

View file

@ -9,7 +9,7 @@ import 'package:adguard_home_manager/screens/settings/access_settings/access_set
import 'package:adguard_home_manager/screens/settings/customization/customization.dart';
import 'package:adguard_home_manager/screens/settings/dhcp/dhcp.dart';
import 'package:adguard_home_manager/widgets/section_label.dart';
import 'package:adguard_home_manager/screens/settings/update.dart';
import 'package:adguard_home_manager/screens/settings/update_server/update.dart';
import 'package:adguard_home_manager/screens/settings/dns/dns.dart';
import 'package:adguard_home_manager/screens/settings/dns_rewrites/dns_rewrites.dart';
import 'package:adguard_home_manager/screens/servers/servers.dart';

View file

@ -0,0 +1,46 @@
import 'package:flutter/material.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
class AutoUpdateUnavailableModal extends StatelessWidget {
const AutoUpdateUnavailableModal({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return AlertDialog(
title: Column(
children: [
Icon(
Icons.error_rounded,
size: 24,
color: Theme.of(context).listTileTheme.iconColor
),
const SizedBox(height: 16),
Text(
AppLocalizations.of(context)!.autoupdateUnavailable,
textAlign: TextAlign.center,
style: TextStyle(
color: Theme.of(context).colorScheme.onSurface
),
)
],
),
content: Text(
AppLocalizations.of(context)!.autoupdateUnavailableDescription,
style: TextStyle(
color: Theme.of(context).colorScheme.onSurface
),
),
actions: [
Row(
mainAxisAlignment: MainAxisAlignment.end,
children: [
TextButton(
onPressed: () => Navigator.pop(context),
child: Text(AppLocalizations.of(context)!.close)
),
],
)
],
);
}
}

View file

@ -1,5 +1,7 @@
// ignore_for_file: use_build_context_synchronously
import 'package:adguard_home_manager/screens/settings/update_server/autoupdate_unavailable.dart';
import 'package:animations/animations.dart';
import 'package:flutter/material.dart';
import 'package:flutter_html/flutter_html.dart';
import 'package:html/parser.dart' as html;
@ -7,8 +9,6 @@ import 'package:markdown/markdown.dart' as md;
import 'package:provider/provider.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
import 'package:adguard_home_manager/functions/compare_versions.dart';
import 'package:adguard_home_manager/providers/app_config_provider.dart';
import 'package:adguard_home_manager/services/http_requests.dart';
import 'package:adguard_home_manager/functions/snackbar.dart';
@ -24,6 +24,13 @@ class UpdateScreen extends StatelessWidget {
Widget build(BuildContext context) {
final serversProvider = Provider.of<ServersProvider>(context);
final appConfigProvider = Provider.of<AppConfigProvider>(context);
void showAutoUpdateUnavailableModal() {
showModal(
context: context,
builder: (context) => const AutoUpdateUnavailableModal()
);
}
void update() async {
ProcessModal processModal = ProcessModal(context: context);
@ -149,7 +156,9 @@ class UpdateScreen extends StatelessWidget {
icon: const Icon(Icons.download_rounded),
label: Text(AppLocalizations.of(context)!.updateNow),
onPressed: serversProvider.updateAvailable.data!.updateAvailable != null && serversProvider.updateAvailable.data!.updateAvailable == true
? () => update()
? serversProvider.updateAvailable.data!.canAutoupdate == true
? () => update()
: () => showAutoUpdateUnavailableModal()
: null
)
],
@ -259,7 +268,9 @@ class UpdateScreen extends StatelessWidget {
icon: const Icon(Icons.download_rounded),
label: Text(AppLocalizations.of(context)!.updateNow),
onPressed: serversProvider.updateAvailable.data!.updateAvailable != null && serversProvider.updateAvailable.data!.updateAvailable == true
? () => update()
? serversProvider.updateAvailable.data!.canAutoupdate == true
? () => update()
: () => showAutoUpdateUnavailableModal()
: null
)
],

View file

@ -2026,10 +2026,11 @@ Future checkServerUpdates({
Future getUpdateChangelog({
required Server server,
required String releaseTag
}) async {
try {
HttpClient httpClient = HttpClient();
HttpClientRequest request = await httpClient.getUrl(Uri.parse(Urls.adGuardHomeLatestRelease));
HttpClientRequest request = await httpClient.getUrl(Uri.parse("${Urls.adGuardHomeReleasesTags}/$releaseTag"));
HttpClientResponse response = await request.close();
String reply = await response.transform(utf8.decoder).join();
httpClient.close();

View file

@ -117,6 +117,7 @@ class _ServersListState extends State<ServersList> with SingleTickerProviderStat
final serverStatus = await getServerStatus(server);
if (serverStatus['result'] == 'success') {
serversProvider.setServerStatusData(serverStatus['data']);
serversProvider.checkServerUpdatesAvailable(server);
serversProvider.setServerStatusLoad(1);
}
else {