[gnome-shell] telepathyClient: Gracefully handle missing telepathy deps
- From: Florian Müllner <fmuellner src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-shell] telepathyClient: Gracefully handle missing telepathy deps
- Date: Mon, 13 Mar 2017 15:23:50 +0000 (UTC)
commit b4df74746442ddfe9aaa37b0d24ef60a12b71f52
Author: Florian Müllner <fmuellner gnome org>
Date: Fri Mar 10 18:23:20 2017 +0100
telepathyClient: Gracefully handle missing telepathy deps
Telepathy's role has been diminishing continuously over the last
couple of years, so while chat integration is a nice feature for
those who use it, it is hard to justify keeping it as a hard
dependency. To address this, split out the component from the
client so we can handle missing typelibs gracefully by not
providing any chat integration.
https://bugzilla.gnome.org/show_bug.cgi?id=779878
js/ui/components/telepathyClient.js | 68 ++++++++++++++++++++++++----------
1 files changed, 48 insertions(+), 20 deletions(-)
---
diff --git a/js/ui/components/telepathyClient.js b/js/ui/components/telepathyClient.js
index f6575eb..e0a388b 100644
--- a/js/ui/components/telepathyClient.js
+++ b/js/ui/components/telepathyClient.js
@@ -8,8 +8,15 @@ const Lang = imports.lang;
const Mainloop = imports.mainloop;
const Signals = imports.signals;
const St = imports.gi.St;
-const Tpl = imports.gi.TelepathyLogger;
-const Tp = imports.gi.TelepathyGLib;
+
+var Tpl = null;
+var Tp = null;
+try {
+ Tpl = imports.gi.TelepathyLogger;
+ Tp = imports.gi.TelepathyGLib;
+} catch(e) {
+ log('Telepathy is not available, chat integration will be disabled.');
+}
const History = imports.misc.history;
const Main = imports.ui.main;
@@ -19,6 +26,8 @@ const Params = imports.misc.params;
const PopupMenu = imports.ui.popupMenu;
const Util = imports.misc.util;
+const HAVE_TP = (Tp != null && Tpl != null);
+
// See Notification.appendMessage
const SCROLLBACK_IMMEDIATE_TIME = 3 * 60; // 3 minutes
const SCROLLBACK_RECENT_TIME = 15 * 60; // 15 minutes
@@ -70,7 +79,41 @@ function makeMessageFromTplEvent(event) {
};
}
-const TelepathyClient = new Lang.Class({
+const TelepathyComponent = new Lang.Class({
+ Name: 'TelepathyComponent',
+
+ _init: function() {
+ this._client = null;
+
+ if (!HAVE_TP)
+ return; // Telepathy isn't available
+
+ this._client = new TelepathyClient();
+ },
+
+ enable: function() {
+ if (!this._client)
+ return;
+
+ try {
+ this._client.register();
+ } catch (e) {
+ throw new Error('Couldn\'t register Telepathy client. Error: \n' + e);
+ }
+
+ if (!this._client.account_manager.is_prepared(Tp.AccountManager.get_feature_quark_core()))
+ this._client.account_manager.prepare_async(null, null);
+ },
+
+ disable: function() {
+ if (!this._client)
+ return;
+
+ this._client.unregister();
+ }
+});
+
+const TelepathyClient = HAVE_TP ? new Lang.Class({
Name: 'TelepathyClient',
Extends: Tp.BaseClient,
@@ -117,21 +160,6 @@ const TelepathyClient = new Lang.Class({
Lang.bind(this, this._delegatedChannelsCb));
},
- enable: function() {
- try {
- this.register();
- } catch (e) {
- throw new Error('Couldn\'t register Telepathy client. Error: \n' + e);
- }
-
- if (!this._accountManager.is_prepared(Tp.AccountManager.get_feature_quark_core()))
- this._accountManager.prepare_async(null, null);
- },
-
- disable: function() {
- this.unregister();
- },
-
vfunc_observe_channels: function(account, conn, channels,
dispatchOp, requests, context) {
let len = channels.length;
@@ -250,7 +278,7 @@ const TelepathyClient = new Lang.Class({
// Nothing to do as we don't make a distinction between observed and
// handled channels.
},
-});
+}) : null;
const ChatSource = new Lang.Class({
Name: 'ChatSource',
@@ -968,4 +996,4 @@ const ChatNotificationBanner = new Lang.Class({
}
});
-const Component = TelepathyClient;
+const Component = TelepathyComponent;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]