diff --git a/src/domain/session/settings/SettingsViewModel.js b/src/domain/session/settings/SettingsViewModel.js index ec171eea..221e39da 100644 --- a/src/domain/session/settings/SettingsViewModel.js +++ b/src/domain/session/settings/SettingsViewModel.js @@ -22,6 +22,8 @@ class PushNotificationStatus { this.supported = null; this.enabled = false; this.updating = false; + this.enabledOnServer = null; + this.serverError = null; } } @@ -129,6 +131,8 @@ export class SettingsViewModel extends ViewModel { async togglePushNotifications() { this.pushNotifications.updating = true; + this.pushNotifications.enabledOnServer = null; + this.pushNotifications.serverError = null; this.emitChange("pushNotifications.updating"); try { if (await this._session.enablePushNotifications(!this.pushNotifications.enabled)) { @@ -142,5 +146,17 @@ export class SettingsViewModel extends ViewModel { this.emitChange("pushNotifications.updating"); } } + + async checkPushEnabledOnServer() { + this.pushNotifications.enabledOnServer = null; + this.pushNotifications.serverError = null; + try { + this.pushNotifications.enabledOnServer = await this._session.checkPusherEnabledOnHomeServer(); + this.emitChange("pushNotifications.enabledOnServer"); + } catch (err) { + this.pushNotifications.serverError = err; + this.emitChange("pushNotifications.serverError"); + } + } } diff --git a/src/platform/web/ui/session/settings/SettingsView.js b/src/platform/web/ui/session/settings/SettingsView.js index 4d4b2aba..b4a47bea 100644 --- a/src/platform/web/ui/session/settings/SettingsView.js +++ b/src/platform/web/ui/session/settings/SettingsView.js @@ -66,6 +66,27 @@ export class SettingsView extends TemplateView { } else { return t.p(vm.i18n`Push notifications are not supported on this browser`); } + }), + t.if(vm => vm.pushNotifications.supported && vm.pushNotifications.enabled, t => { + return t.div([ + t.p([ + "If you think push notifications are not being delivered, ", + t.button({className: "link", onClick: () => vm.checkPushEnabledOnServer()}, "check"), + " if they got disabled on the server" + ]), + t.map(vm => vm.pushNotifications.enabledOnServer, (enabled, t) => { + if (enabled === true) { + return t.p("Push notifications are still enabled on the server, so everything should be working. Sometimes notifications can get dropped if they can't be delivered within a given time."); + } else if (enabled === false) { + return t.p("Push notifications have been disabled on the server, likely due to a bug. Please re-enable them by clicking Disable and then Enable again above."); + } + }), + t.map(vm => vm.pushNotifications.serverError, (err, t) => { + if (err) { + return t.p("Couln't not check on server: " + err.message); + } + }) + ]); }) );