[gnome-shell/issue369: 676/676] endSessionDialog: Check for PackageKit before considering updates/upgrades
- From: Mario Sanchez Prada <msanchez src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-shell/issue369: 676/676] endSessionDialog: Check for PackageKit before considering updates/upgrades
- Date: Tue, 2 Apr 2019 09:26:57 +0000 (UTC)
commit 1d7721f94d05ddf6ccd52a19dcf205cb054fe75a
Author: Mario Sanchez Prada <mario endlessm com>
Date: Wed Jun 20 16:17:18 2018 +0100
endSessionDialog: Check for PackageKit before considering updates/upgrades
GNOME Shell is spitting out some errors in the journal due to its attempts
to speak to PackageKit, which is not present on Endless OS, so let's add
some runtime checks to make sure that PackageKit is actually available
before assuming so and using its proxy to decide which kind of UI to
show to the user when ending the session.
https://gitlab.gnome.org/GNOME/gnome-shell/issues/369
js/ui/endSessionDialog.js | 58 +++++++++++++++++++++++++++++++++++++----------
1 file changed, 46 insertions(+), 12 deletions(-)
---
diff --git a/js/ui/endSessionDialog.js b/js/ui/endSessionDialog.js
index 0d4aa9d4d..6751d92bc 100644
--- a/js/ui/endSessionDialog.js
+++ b/js/ui/endSessionDialog.js
@@ -234,13 +234,32 @@ var EndSessionDialog = class EndSessionDialog extends ModalDialog.ModalDialog {
this._loginManager = LoginManager.getLoginManager();
this._userManager = AccountsService.UserManager.get_default();
this._user = this._userManager.get_user(GLib.get_user_name());
+ this._updatesPermission = false;
this._pkOfflineProxy = new PkOfflineProxy(Gio.DBus.system,
'org.freedesktop.PackageKit',
'/org/freedesktop/PackageKit',
(proxy, error) => {
- if (error)
- log(error.message);
+ if (error) {
+ log(error.message);
+ return;
+ }
+
+ // Creating a D-Bus proxy won't propagate
SERVICE_UNKNOWN or NAME_HAS_NO_OWNER
+ // errors if PackageKit is not available, but the GIO
implementation will make
+ // sure in that case that the proxy's g-name-owner is
set to null, so check that.
+ if (this._pkOfflineProxy.g_name_owner === null) {
+ this._pkOfflineProxy = null;
+ return;
+ }
+
+ // It only makes sense to check for this permission if
PackageKit is available.
+ try {
+ this._updatesPermission =
+
Polkit.Permission.new_sync("org.freedesktop.packagekit.trigger-offline-update", null, null);
+ } catch(e) {
+ log('No permission to trigger offline updates:
%s'.format(e.toString()));
+ }
});
this._powerProxy = new UPowerProxy(Gio.DBus.system,
'org.freedesktop.UPower',
@@ -336,12 +355,6 @@ var EndSessionDialog = class EndSessionDialog extends ModalDialog.ModalDialog {
this._inhibitorSection.add_actor(this._sessionHeader);
this._inhibitorSection.add_actor(this._sessionList);
- try {
- this._updatesPermission =
Polkit.Permission.new_sync("org.freedesktop.packagekit.trigger-offline-update", null, null);
- } catch(e) {
- log('No permission to trigger offline updates: %s'.format(e.toString()));
- }
-
this._dbusImpl = Gio.DBusExportedObject.wrapJSObject(EndSessionDialogIface, this);
this._dbusImpl.export(Gio.DBus.session, '/org/gnome/SessionManager/EndSessionDialog');
}
@@ -390,7 +403,8 @@ var EndSessionDialog = class EndSessionDialog extends ModalDialog.ModalDialog {
}
// Use a different description when we are installing a system upgrade
- if (dialogContent.upgradeDescription) {
+ // if the PackageKit proxy is available (i.e. PackageKit is available).
+ if (this._pkOfflineProxy && dialogContent.upgradeDescription) {
let name = this._pkOfflineProxy.PreparedUpgrade['name'].deep_unpack();
let version = this._pkOfflineProxy.PreparedUpgrade['version'].deep_unpack();
@@ -499,6 +513,12 @@ var EndSessionDialog = class EndSessionDialog extends ModalDialog.ModalDialog {
}
_triggerOfflineUpdateReboot(callback) {
+ // Handle this gracefully if PackageKit is not available.
+ if (!this._pkOfflineProxy) {
+ callback();
+ return;
+ }
+
this._pkOfflineProxy.TriggerRemote('reboot', (result, error) => {
if (error)
log(error.message);
@@ -508,6 +528,12 @@ var EndSessionDialog = class EndSessionDialog extends ModalDialog.ModalDialog {
}
_triggerOfflineUpdateShutdown(callback) {
+ // Handle this gracefully if PackageKit is not available.
+ if (!this._pkOfflineProxy) {
+ callback();
+ return;
+ }
+
this._pkOfflineProxy.TriggerRemote('power-off', (result, error) => {
if (error)
log(error.message);
@@ -517,6 +543,12 @@ var EndSessionDialog = class EndSessionDialog extends ModalDialog.ModalDialog {
}
_triggerOfflineUpdateCancel(callback) {
+ // Handle this gracefully if PackageKit is not available.
+ if (!this._pkOfflineProxy) {
+ callback();
+ return;
+ }
+
this._pkOfflineProxy.CancelRemote((result, error) => {
if (error)
log(error.message);
@@ -679,7 +711,8 @@ var EndSessionDialog = class EndSessionDialog extends ModalDialog.ModalDialog {
this._totalSecondsToStayOpen = totalSecondsToStayOpen;
this._type = type;
- if (this._type == DialogType.RESTART) {
+ // Only consider updates and upgrades if PackageKit is available.
+ if (this._pkOfflineProxy && this._type == DialogType.RESTART) {
if (this._pkOfflineProxy.UpdateTriggered)
this._type = DialogType.UPDATE_RESTART;
else if (this._pkOfflineProxy.UpgradeTriggered)
@@ -711,8 +744,9 @@ var EndSessionDialog = class EndSessionDialog extends ModalDialog.ModalDialog {
if (dialogContent.showOtherSessions)
this._loadSessions();
- let updateTriggered = this._pkOfflineProxy.UpdateTriggered;
- let updatePrepared = this._pkOfflineProxy.UpdatePrepared;
+ // Only consider updates and upgrades if PackageKit is available.
+ let updateTriggered = this._pkOfflineProxy ? this._pkOfflineProxy.UpdateTriggered : false;
+ let updatePrepared = this._pkOfflineProxy ? this._pkOfflineProxy.UpdatePrepared : false;
let updatesAllowed = this._updatesPermission && this._updatesPermission.allowed;
_setCheckBoxLabel(this._checkBox, dialogContent.checkBoxText || '');
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]