From 593f659a733d9c3b3f00bf42d918f331a1f451fa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BCllner?= Date: Fri, 9 Jun 2023 15:41:03 +0200 Subject: [PATCH] parentalControlsManager: Don't log error when disabled We currently special-case the DISABLED error when initializing filtering, but not on app filter changes. While it seems reasonable that Malcontent.Manager wouldn't emit the signal while disabled, that's not actually true: It is emitted when any user account information tracked by AccountsServices changes. Even if the signal were limited to changes of the ParentalControls extension, it would still get emitted when app filtering *becomes* disabled. So regardless of potential improvements in libmalcontent itself, we should filter out the DISABLED consistently, both when creating the initial filter and when updating it. https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/6749 Part-of: --- js/misc/parentalControlsManager.js | 38 ++++++++++++++++++------------ 1 file changed, 23 insertions(+), 15 deletions(-) diff --git a/js/misc/parentalControlsManager.js b/js/misc/parentalControlsManager.js index e2192caea..48f0ca2dd 100644 --- a/js/misc/parentalControlsManager.js +++ b/js/misc/parentalControlsManager.js @@ -74,18 +74,10 @@ var ParentalControlsManager = GObject.registerClass({ try { const connection = await Gio.DBus.get(Gio.BusType.SYSTEM, null); this._manager = new Malcontent.Manager({ connection }); - this._appFilter = await this._manager.get_app_filter_async( - Shell.util_get_uid(), - Malcontent.ManagerGetValueFlags.NONE, - null); + this._appFilter = await this._getAppFilter(); } catch (e) { - if (e.matches(Malcontent.ManagerError, Malcontent.ManagerError.DISABLED)) { - console.debug('Parental controls globally disabled'); - this._disabled = true; - } else { - logError(e, 'Failed to get parental controls settings'); - return; - } + logError(e, 'Failed to get parental controls settings'); + return; } this._manager.connect('app-filter-changed', this._onAppFilterChanged.bind(this)); @@ -95,6 +87,25 @@ var ParentalControlsManager = GObject.registerClass({ this.emit('app-filter-changed'); } + async _getAppFilter() { + let appFilter = null; + + try { + appFilter = await this._manager.get_app_filter_async( + Shell.util_get_uid(), + Malcontent.ManagerGetValueFlags.NONE, + null); + } catch (e) { + if (!e.matches(Malcontent.ManagerError, Malcontent.ManagerError.DISABLED)) + throw e; + + console.debug('Parental controls globally disabled'); + this._disabled = true; + } + + return appFilter; + } + async _onAppFilterChanged(manager, uid) { // Emit 'changed' signal only if app-filter is changed for currently logged-in user. let currentUid = Shell.util_get_uid(); @@ -102,10 +113,7 @@ var ParentalControlsManager = GObject.registerClass({ return; try { - this._appFilter = await this._manager.get_app_filter_async( - currentUid, - Malcontent.ManagerGetValueFlags.NONE, - null); + this._appFilter = await this._getAppFilter(); this.emit('app-filter-changed'); } catch (e) { // Log an error and keep the old app filter.