mirror of
https://github.com/JGeek00/adguard-home-manager.git
synced 2025-05-03 11:54:47 +00:00
Update improvements
This commit is contained in:
parent
e02b598be9
commit
5edb302944
9 changed files with 79 additions and 16 deletions
|
@ -3,5 +3,5 @@ class Urls {
|
||||||
static const String gitHub = "https://github.com/JGeek00/adguard-home-manager";
|
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 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 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";
|
||||||
}
|
}
|
|
@ -596,5 +596,7 @@
|
||||||
"unknownStatus": "Unknown status",
|
"unknownStatus": "Unknown status",
|
||||||
"checkingUpdates": "Checking updates...",
|
"checkingUpdates": "Checking updates...",
|
||||||
"checkUpdates": "Check 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."
|
||||||
}
|
}
|
|
@ -596,5 +596,7 @@
|
||||||
"unknownStatus": "Estado desconocido",
|
"unknownStatus": "Estado desconocido",
|
||||||
"checkingUpdates": "Comprobando actualizaciones...",
|
"checkingUpdates": "Comprobando actualizaciones...",
|
||||||
"checkUpdates": "Comprobar 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."
|
||||||
}
|
}
|
|
@ -485,13 +485,13 @@ class ServersProvider with ChangeNotifier {
|
||||||
|
|
||||||
void checkServerUpdatesAvailable(Server server) async {
|
void checkServerUpdatesAvailable(Server server) async {
|
||||||
setUpdateAvailableLoadStatus(LoadStatus.loading, true);
|
setUpdateAvailableLoadStatus(LoadStatus.loading, true);
|
||||||
final result = await Future.wait([
|
final result = await checkServerUpdates(server: server);
|
||||||
checkServerUpdates(server: server),
|
if (result['result'] == 'success') {
|
||||||
getUpdateChangelog(server: server)
|
UpdateAvailableData data = result['data'];
|
||||||
]);
|
final gitHubResult = await getUpdateChangelog(server: server, releaseTag: data.newVersion);
|
||||||
if (result[0]['result'] == 'success') {
|
if (gitHubResult['result'] == 'success') {
|
||||||
UpdateAvailableData data = result[0]['data'];
|
data.changelog = gitHubResult['body'];
|
||||||
data.changelog = result[1]['body'];
|
}
|
||||||
data.updateAvailable = data.newVersion.contains('b')
|
data.updateAvailable = data.newVersion.contains('b')
|
||||||
? compareBetaVersions(
|
? compareBetaVersions(
|
||||||
currentVersion: data.currentVersion.replaceAll('v', ''),
|
currentVersion: data.currentVersion.replaceAll('v', ''),
|
||||||
|
|
|
@ -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/customization/customization.dart';
|
||||||
import 'package:adguard_home_manager/screens/settings/dhcp/dhcp.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/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/dns.dart';
|
||||||
import 'package:adguard_home_manager/screens/settings/dns_rewrites/dns_rewrites.dart';
|
import 'package:adguard_home_manager/screens/settings/dns_rewrites/dns_rewrites.dart';
|
||||||
import 'package:adguard_home_manager/screens/servers/servers.dart';
|
import 'package:adguard_home_manager/screens/servers/servers.dart';
|
||||||
|
|
|
@ -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)
|
||||||
|
),
|
||||||
|
],
|
||||||
|
)
|
||||||
|
],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,5 +1,7 @@
|
||||||
// ignore_for_file: use_build_context_synchronously
|
// 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/material.dart';
|
||||||
import 'package:flutter_html/flutter_html.dart';
|
import 'package:flutter_html/flutter_html.dart';
|
||||||
import 'package:html/parser.dart' as html;
|
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:provider/provider.dart';
|
||||||
import 'package:flutter_gen/gen_l10n/app_localizations.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/providers/app_config_provider.dart';
|
||||||
import 'package:adguard_home_manager/services/http_requests.dart';
|
import 'package:adguard_home_manager/services/http_requests.dart';
|
||||||
import 'package:adguard_home_manager/functions/snackbar.dart';
|
import 'package:adguard_home_manager/functions/snackbar.dart';
|
||||||
|
@ -25,6 +25,13 @@ class UpdateScreen extends StatelessWidget {
|
||||||
final serversProvider = Provider.of<ServersProvider>(context);
|
final serversProvider = Provider.of<ServersProvider>(context);
|
||||||
final appConfigProvider = Provider.of<AppConfigProvider>(context);
|
final appConfigProvider = Provider.of<AppConfigProvider>(context);
|
||||||
|
|
||||||
|
void showAutoUpdateUnavailableModal() {
|
||||||
|
showModal(
|
||||||
|
context: context,
|
||||||
|
builder: (context) => const AutoUpdateUnavailableModal()
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
void update() async {
|
void update() async {
|
||||||
ProcessModal processModal = ProcessModal(context: context);
|
ProcessModal processModal = ProcessModal(context: context);
|
||||||
processModal.open(AppLocalizations.of(context)!.requestingUpdate);
|
processModal.open(AppLocalizations.of(context)!.requestingUpdate);
|
||||||
|
@ -149,7 +156,9 @@ class UpdateScreen extends StatelessWidget {
|
||||||
icon: const Icon(Icons.download_rounded),
|
icon: const Icon(Icons.download_rounded),
|
||||||
label: Text(AppLocalizations.of(context)!.updateNow),
|
label: Text(AppLocalizations.of(context)!.updateNow),
|
||||||
onPressed: serversProvider.updateAvailable.data!.updateAvailable != null && serversProvider.updateAvailable.data!.updateAvailable == true
|
onPressed: serversProvider.updateAvailable.data!.updateAvailable != null && serversProvider.updateAvailable.data!.updateAvailable == true
|
||||||
|
? serversProvider.updateAvailable.data!.canAutoupdate == true
|
||||||
? () => update()
|
? () => update()
|
||||||
|
: () => showAutoUpdateUnavailableModal()
|
||||||
: null
|
: null
|
||||||
)
|
)
|
||||||
],
|
],
|
||||||
|
@ -259,7 +268,9 @@ class UpdateScreen extends StatelessWidget {
|
||||||
icon: const Icon(Icons.download_rounded),
|
icon: const Icon(Icons.download_rounded),
|
||||||
label: Text(AppLocalizations.of(context)!.updateNow),
|
label: Text(AppLocalizations.of(context)!.updateNow),
|
||||||
onPressed: serversProvider.updateAvailable.data!.updateAvailable != null && serversProvider.updateAvailable.data!.updateAvailable == true
|
onPressed: serversProvider.updateAvailable.data!.updateAvailable != null && serversProvider.updateAvailable.data!.updateAvailable == true
|
||||||
|
? serversProvider.updateAvailable.data!.canAutoupdate == true
|
||||||
? () => update()
|
? () => update()
|
||||||
|
: () => showAutoUpdateUnavailableModal()
|
||||||
: null
|
: null
|
||||||
)
|
)
|
||||||
],
|
],
|
|
@ -2026,10 +2026,11 @@ Future checkServerUpdates({
|
||||||
|
|
||||||
Future getUpdateChangelog({
|
Future getUpdateChangelog({
|
||||||
required Server server,
|
required Server server,
|
||||||
|
required String releaseTag
|
||||||
}) async {
|
}) async {
|
||||||
try {
|
try {
|
||||||
HttpClient httpClient = HttpClient();
|
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();
|
HttpClientResponse response = await request.close();
|
||||||
String reply = await response.transform(utf8.decoder).join();
|
String reply = await response.transform(utf8.decoder).join();
|
||||||
httpClient.close();
|
httpClient.close();
|
||||||
|
|
|
@ -117,6 +117,7 @@ class _ServersListState extends State<ServersList> with SingleTickerProviderStat
|
||||||
final serverStatus = await getServerStatus(server);
|
final serverStatus = await getServerStatus(server);
|
||||||
if (serverStatus['result'] == 'success') {
|
if (serverStatus['result'] == 'success') {
|
||||||
serversProvider.setServerStatusData(serverStatus['data']);
|
serversProvider.setServerStatusData(serverStatus['data']);
|
||||||
|
serversProvider.checkServerUpdatesAvailable(server);
|
||||||
serversProvider.setServerStatusLoad(1);
|
serversProvider.setServerStatusLoad(1);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
|
Loading…
Add table
Reference in a new issue