mirror of
https://github.com/JGeek00/adguard-home-manager.git
synced 2025-05-04 20:30:35 +00:00
Improved updater
This commit is contained in:
parent
39c871b72d
commit
a4ae8c2cdf
7 changed files with 66 additions and 64 deletions
|
@ -18,7 +18,6 @@ class UpdateAvailableData {
|
|||
final bool? canAutoupdate;
|
||||
final bool disabled;
|
||||
String? changelog;
|
||||
bool? updateAvailable;
|
||||
|
||||
UpdateAvailableData({
|
||||
required this.currentVersion,
|
||||
|
@ -28,7 +27,6 @@ class UpdateAvailableData {
|
|||
required this.canAutoupdate,
|
||||
required this.disabled,
|
||||
this.changelog,
|
||||
this.updateAvailable
|
||||
});
|
||||
|
||||
factory UpdateAvailableData.fromJson(Map<String, dynamic> json) => UpdateAvailableData(
|
||||
|
@ -39,7 +37,15 @@ class UpdateAvailableData {
|
|||
canAutoupdate: json["can_autoupdate"],
|
||||
disabled: json["disabled"],
|
||||
changelog: json["changelog"],
|
||||
updateAvailable: json['update_available']
|
||||
);
|
||||
|
||||
factory UpdateAvailableData.fromJsonUpdate(Map<String, dynamic> json) => UpdateAvailableData(
|
||||
currentVersion: json["current_version"],
|
||||
newVersion: json["new_version"],
|
||||
announcement: json["announcement"],
|
||||
announcementUrl: json["announcement_url"],
|
||||
canAutoupdate: json["can_autoupdate"],
|
||||
disabled: json["disabled"],
|
||||
);
|
||||
|
||||
Map<String, dynamic> toJson() => {
|
||||
|
@ -50,6 +56,5 @@ class UpdateAvailableData {
|
|||
"can_autoupdate": canAutoupdate,
|
||||
"disabled": disabled,
|
||||
"changelog": changelog,
|
||||
"update_available": updateAvailable
|
||||
};
|
||||
}
|
||||
|
|
|
@ -8,7 +8,6 @@ import 'package:adguard_home_manager/models/update_available.dart';
|
|||
import 'package:adguard_home_manager/services/http_requests.dart';
|
||||
import 'package:adguard_home_manager/functions/conversions.dart';
|
||||
import 'package:adguard_home_manager/services/db/queries.dart';
|
||||
import 'package:adguard_home_manager/functions/compare_versions.dart';
|
||||
import 'package:adguard_home_manager/constants/enums.dart';
|
||||
|
||||
class ServersProvider with ChangeNotifier {
|
||||
|
@ -18,6 +17,8 @@ class ServersProvider with ChangeNotifier {
|
|||
Server? _selectedServer;
|
||||
ApiClient? _apiClient;
|
||||
|
||||
bool _updatingServer = false;
|
||||
|
||||
final UpdateAvailable _updateAvailable = UpdateAvailable(
|
||||
loadStatus: LoadStatus.loading,
|
||||
data: null,
|
||||
|
@ -39,6 +40,10 @@ class ServersProvider with ChangeNotifier {
|
|||
return _updateAvailable;
|
||||
}
|
||||
|
||||
bool get updatingServer {
|
||||
return _updatingServer;
|
||||
}
|
||||
|
||||
void setDbInstance(Database db) {
|
||||
_dbInstance = db;
|
||||
}
|
||||
|
@ -70,6 +75,11 @@ class ServersProvider with ChangeNotifier {
|
|||
notifyListeners();
|
||||
}
|
||||
|
||||
void setUpdatingServer(bool status) {
|
||||
_updatingServer = status;
|
||||
notifyListeners();
|
||||
}
|
||||
|
||||
Future<dynamic> createServer(Server server) async {
|
||||
final saved = await saveServerQuery(_dbInstance!, server);
|
||||
if (saved == null) {
|
||||
|
@ -159,9 +169,8 @@ class ServersProvider with ChangeNotifier {
|
|||
|
||||
void checkServerUpdatesAvailable({
|
||||
required Server server,
|
||||
bool? setValues
|
||||
}) async {
|
||||
if (setValues == true) setUpdateAvailableLoadStatus(LoadStatus.loading, true);
|
||||
setUpdateAvailableLoadStatus(LoadStatus.loading, true);
|
||||
final result = await _apiClient!.checkServerUpdates();
|
||||
if (result['result'] == 'success') {
|
||||
UpdateAvailableData data = UpdateAvailableData.fromJson(result['data']);
|
||||
|
@ -169,40 +178,20 @@ class ServersProvider with ChangeNotifier {
|
|||
if (gitHubResult['result'] == 'success') {
|
||||
data.changelog = gitHubResult['body'];
|
||||
}
|
||||
data.updateAvailable = data.newVersion != null
|
||||
? compareVersions(
|
||||
currentVersion: data.currentVersion,
|
||||
newVersion: data.newVersion!,
|
||||
)
|
||||
: false;
|
||||
if (setValues == true) {
|
||||
setUpdateAvailableData(data);
|
||||
setUpdateAvailableLoadStatus(LoadStatus.loaded, true);
|
||||
}
|
||||
else {
|
||||
if (data.currentVersion == data.newVersion) setUpdateAvailableData(data);
|
||||
}
|
||||
if (setValues == true) setUpdateAvailableLoadStatus(LoadStatus.loaded, true);
|
||||
}
|
||||
else {
|
||||
if (setValues == true) setUpdateAvailableLoadStatus(LoadStatus.error, true);
|
||||
}
|
||||
}
|
||||
|
||||
void clearUpdateAvailable(Server server, String newCurrentVersion) {
|
||||
if (_updateAvailable.data != null) {
|
||||
_updateAvailable.data!.updateAvailable = null;
|
||||
_updateAvailable.data!.currentVersion = newCurrentVersion;
|
||||
notifyListeners();
|
||||
setUpdateAvailableLoadStatus(LoadStatus.error, true);
|
||||
}
|
||||
}
|
||||
|
||||
Future initializateServer(Server server) async {
|
||||
final serverStatus = await _apiClient!.getServerStatus();
|
||||
if (serverStatus['result'] == 'success') {
|
||||
checkServerUpdatesAvailable(
|
||||
checkServerUpdatesAvailable( // Do not await
|
||||
server: server,
|
||||
setValues: true
|
||||
); // Do not await
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -245,15 +234,33 @@ class ServersProvider with ChangeNotifier {
|
|||
|
||||
void recheckPeriodServerUpdated() {
|
||||
if (_selectedServer != null) {
|
||||
setUpdatingServer(true);
|
||||
Server server = _selectedServer!;
|
||||
Timer.periodic(
|
||||
const Duration(seconds: 2),
|
||||
(timer) {
|
||||
(timer) async {
|
||||
if (_selectedServer != null && _selectedServer == server) {
|
||||
checkServerUpdatesAvailable(server: server, setValues: false);
|
||||
final result = await _apiClient!.checkServerUpdates();
|
||||
if (result['result'] == 'success') {
|
||||
UpdateAvailableData data = UpdateAvailableData.fromJsonUpdate(result['data']);
|
||||
if (data.currentVersion == data.newVersion) {
|
||||
final gitHubResult = await _apiClient!.getUpdateChangelog(releaseTag: data.newVersion ?? data.currentVersion);
|
||||
if (gitHubResult['result'] == 'success') {
|
||||
data.changelog = gitHubResult['body'];
|
||||
}
|
||||
setUpdateAvailableData(data);
|
||||
timer.cancel();
|
||||
setUpdatingServer(false);
|
||||
}
|
||||
}
|
||||
else {
|
||||
timer.cancel();
|
||||
setUpdatingServer(false);
|
||||
}
|
||||
}
|
||||
else {
|
||||
timer.cancel();
|
||||
setUpdatingServer(false);
|
||||
}
|
||||
}
|
||||
);
|
||||
|
|
|
@ -188,8 +188,7 @@ class SettingsWidget extends StatelessWidget {
|
|||
title: AppLocalizations.of(context)!.updates,
|
||||
subtitle: AppLocalizations.of(context)!.updatesDescription,
|
||||
trailing: serversProvider.updateAvailable.data != null &&
|
||||
serversProvider.updateAvailable.data!.updateAvailable != null &&
|
||||
serversProvider.updateAvailable.data!.updateAvailable == true
|
||||
serversProvider.updateAvailable.data!.canAutoupdate == true
|
||||
? Container(
|
||||
width: 10,
|
||||
height: 10,
|
||||
|
|
|
@ -40,7 +40,6 @@ class UpdateScreen extends StatelessWidget {
|
|||
processModal.close();
|
||||
|
||||
if (result['result'] == 'success') {
|
||||
serversProvider.clearUpdateAvailable(serversProvider.selectedServer!, serversProvider.updateAvailable.data!.newVersion!);
|
||||
serversProvider.recheckPeriodServerUpdated();
|
||||
showSnacbkar(
|
||||
appConfigProvider: appConfigProvider,
|
||||
|
@ -82,7 +81,6 @@ class UpdateScreen extends StatelessWidget {
|
|||
tooltip: AppLocalizations.of(context)!.checkUpdates,
|
||||
onPressed: () => serversProvider.checkServerUpdatesAvailable(
|
||||
server: serversProvider.selectedServer!,
|
||||
setValues: true
|
||||
)
|
||||
),
|
||||
],
|
||||
|
@ -101,11 +99,9 @@ class UpdateScreen extends StatelessWidget {
|
|||
],
|
||||
)
|
||||
: Icon(
|
||||
serversProvider.updateAvailable.data!.updateAvailable != null
|
||||
? serversProvider.updateAvailable.data!.updateAvailable == true
|
||||
serversProvider.updateAvailable.data!.canAutoupdate == true
|
||||
? Icons.system_update_rounded
|
||||
: Icons.system_security_update_good_rounded
|
||||
: Icons.system_security_update_warning_rounded,
|
||||
: Icons.system_security_update_good_rounded,
|
||||
size: 40,
|
||||
color: Theme.of(context).colorScheme.primary,
|
||||
),
|
||||
|
@ -113,11 +109,9 @@ class UpdateScreen extends StatelessWidget {
|
|||
Text(
|
||||
serversProvider.updateAvailable.loadStatus == LoadStatus.loading
|
||||
? AppLocalizations.of(context)!.checkingUpdates
|
||||
: serversProvider.updateAvailable.data!.updateAvailable != null
|
||||
? serversProvider.updateAvailable.data!.updateAvailable == true
|
||||
: serversProvider.updateAvailable.data!.canAutoupdate == true
|
||||
? AppLocalizations.of(context)!.updateAvailable
|
||||
: AppLocalizations.of(context)!.serverUpdated
|
||||
: AppLocalizations.of(context)!.unknownStatus,
|
||||
: AppLocalizations.of(context)!.serverUpdated,
|
||||
style: const TextStyle(
|
||||
fontSize: 24,
|
||||
fontWeight: FontWeight.w400
|
||||
|
@ -131,7 +125,7 @@ class UpdateScreen extends StatelessWidget {
|
|||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Text(
|
||||
serversProvider.updateAvailable.data!.updateAvailable != null && serversProvider.updateAvailable.data!.updateAvailable == true
|
||||
serversProvider.updateAvailable.data!.canAutoupdate == true
|
||||
? AppLocalizations.of(context)!.newVersion
|
||||
: AppLocalizations.of(context)!.currentVersion,
|
||||
style: const TextStyle(
|
||||
|
@ -140,11 +134,9 @@ class UpdateScreen extends StatelessWidget {
|
|||
),
|
||||
const SizedBox(height: 4),
|
||||
Text(
|
||||
serversProvider.updateAvailable.data!.updateAvailable != null
|
||||
? serversProvider.updateAvailable.data!.updateAvailable == true
|
||||
serversProvider.updateAvailable.data!.canAutoupdate == true
|
||||
? serversProvider.updateAvailable.data!.newVersion ?? 'N/A'
|
||||
: serversProvider.updateAvailable.data!.currentVersion
|
||||
: "N/A",
|
||||
: serversProvider.updateAvailable.data!.currentVersion,
|
||||
style: TextStyle(
|
||||
fontSize: 12,
|
||||
fontWeight: FontWeight.w700,
|
||||
|
@ -157,7 +149,9 @@ class UpdateScreen extends StatelessWidget {
|
|||
FilledButton.icon(
|
||||
icon: const Icon(Icons.download_rounded),
|
||||
label: Text(AppLocalizations.of(context)!.updateNow),
|
||||
onPressed: serversProvider.updateAvailable.data!.updateAvailable != null && serversProvider.updateAvailable.data!.updateAvailable == true
|
||||
onPressed: serversProvider.updatingServer == true
|
||||
? null
|
||||
: serversProvider.updateAvailable.data!.canAutoupdate == true
|
||||
? serversProvider.updateAvailable.data!.canAutoupdate != null && serversProvider.updateAvailable.data!.canAutoupdate == true
|
||||
? () => update()
|
||||
: () => showAutoUpdateUnavailableModal()
|
||||
|
@ -178,7 +172,7 @@ class UpdateScreen extends StatelessWidget {
|
|||
Padding(
|
||||
padding: const EdgeInsets.symmetric(horizontal: 16),
|
||||
child: Text(
|
||||
"Changelog ${serversProvider.updateAvailable.data!.updateAvailable == true
|
||||
"Changelog ${serversProvider.updateAvailable.data!.canAutoupdate == true
|
||||
? serversProvider.updateAvailable.data!.newVersion
|
||||
: serversProvider.updateAvailable.data!.currentVersion}",
|
||||
style: TextStyle(
|
||||
|
|
|
@ -66,8 +66,7 @@ class BottomNavBar extends StatelessWidget {
|
|||
if (
|
||||
screen.name == 'settings' &&
|
||||
serversProvider.updateAvailable.data != null &&
|
||||
serversProvider.updateAvailable.data!.updateAvailable != null &&
|
||||
serversProvider.updateAvailable.data!.updateAvailable == true
|
||||
serversProvider.updateAvailable.data!.canAutoupdate == true
|
||||
) Positioned(
|
||||
bottom: 0,
|
||||
right: -12,
|
||||
|
|
|
@ -147,7 +147,6 @@ class _ServersListItemState extends State<ServersListItem> with SingleTickerProv
|
|||
);
|
||||
serversProvider.checkServerUpdatesAvailable(
|
||||
server: server,
|
||||
setValues: true
|
||||
);
|
||||
statusProvider.setServerStatusLoad(LoadStatus.loaded);
|
||||
}
|
||||
|
|
|
@ -114,7 +114,6 @@ class _ServersTileItemState extends State<ServersTileItem> with SingleTickerProv
|
|||
);
|
||||
serversProvider.checkServerUpdatesAvailable(
|
||||
server: server,
|
||||
setValues: true
|
||||
);
|
||||
statusProvider.setServerStatusLoad(LoadStatus.loaded);
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue