Resolves #389 Improve app registration checking

This commit is contained in:
estevez-dev
2019-06-21 12:39:58 +03:00
parent 11f565a9dc
commit c7fc5afbb8
3 changed files with 28 additions and 21 deletions

View File

@ -19,7 +19,6 @@ class Connection {
String _tempToken;
String oauthUrl;
String webhookId;
String registeredAppVersion;
bool useLovelace = true;
bool settingsLoaded = false;
bool get isAuthenticated => _token != null;
@ -45,7 +44,6 @@ class Connection {
_domain = prefs.getString('hassio-domain');
_port = prefs.getString('hassio-port');
webhookId = prefs.getString('app-webhook-id');
registeredAppVersion = prefs.getString('registered-app-version');
displayHostname = "$_domain:$_port";
_webSocketAPIEndpoint =
"${prefs.getString('hassio-protocol')}://$_domain:$_port/api/websocket";

View File

@ -100,7 +100,7 @@ class HomeAssistant {
};
}
Future checkAppRegistration({bool forceRegister: false, bool forceUpdate: false}) {
Future checkAppRegistration({bool forceRegister: false}) {
Completer completer = Completer();
if (Connection().webhookId == null || forceRegister) {
Logger.d("Mobile app was not registered yet or need to be reseted. Registering...");
@ -120,8 +120,6 @@ class HomeAssistant {
SharedPreferences.getInstance().then((prefs) {
prefs.setString("app-webhook-id", responseObject["webhook_id"]);
Connection().webhookId = responseObject["webhook_id"];
prefs.setString("registered-app-version", "$appVersion");
Connection().registeredAppVersion = "$appVersion";
completer.complete();
eventBus.fire(ShowDialogEvent(
title: "App was registered with your Home Assistant",
@ -138,8 +136,8 @@ class HomeAssistant {
Logger.e("Error registering the app: ${e.toString()}");
});
return completer.future;
} else if (Connection().registeredAppVersion != appVersion || forceUpdate) {
Logger.d("Registered app version is old. Registration need to be updated");
} else {
Logger.d("App was previously registered. Checking...");
var updateData = {
"type": "update_registration",
"data": _getAppRegistrationData()
@ -149,19 +147,30 @@ class HomeAssistant {
includeAuthHeader: false,
data: json.encode(updateData)
).then((response) {
Logger.d("App registration updated");
SharedPreferences.getInstance().then((prefs) {
prefs.setString("registered-app-version", "$appVersion");
completer.complete();
});
}).catchError((e) {
Logger.d("App registration works fine");
completer.complete();
}).catchError((e) {
if (e['code'] != null && e['code'] == 410) {
Logger.e("This integration was removed.");
eventBus.fire(ShowDialogEvent(
title: "App registration was removed or something went wrong",
body: "Looks like app integration was removed from your Home Assistant. HA Client needs to be registered on your Home Assistant server to make it possible to use notifications and other useful stuff.",
positiveText: "Register now",
negativeText: "Cancel",
onPositive: () {
SharedPreferences.getInstance().then((prefs) {
prefs.remove("app-webhook-id");
Connection().webhookId = null;
HomeAssistant().checkAppRegistration();
});
},
));
} else {
Logger.e("Error updating app registration: ${e.toString()}");
}
completer.complete();
Logger.e("Error updating app registering: ${e.toString()}");
});
return completer.future;
} else {
Logger.d("App is registered");
return Future.value();
}
}

View File

@ -106,9 +106,9 @@ class _ConfigPanelWidgetState extends State<ConfigPanelWidget> {
}
updateRegistration() {
HomeAssistant().checkAppRegistration(forceUpdate: true).then((_) {
Navigator.of(context).pop();
eventBus.fire(ShowDialogEvent(
HomeAssistant().checkAppRegistration().then((_) {
//Navigator.of(context).pop();
/*eventBus.fire(ShowDialogEvent(
title: "App registration updated",
body: "To start using notifications you need to restart your Home Assistant",
positiveText: "Restart now",
@ -116,7 +116,7 @@ class _ConfigPanelWidgetState extends State<ConfigPanelWidget> {
onPositive: () {
Connection().callService(domain: "homeassistant", service: "restart", entityId: null);
},
));
));*/
});
}