[gnome-shell] pass a TpContact object to Source
- From: Guillaume Desmottes <gdesmott src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-shell] pass a TpContact object to Source
- Date: Wed, 16 Feb 2011 09:15:50 +0000 (UTC)
commit e97c15e01e49880eb917eeef185dc3bb3a4f8d5e
Author: Guillaume Desmottes <guillaume desmottes collabora co uk>
Date: Tue Feb 8 13:17:29 2011 +0100
pass a TpContact object to Source
This is based on a patch from Morten Mjelva.
js/ui/telepathyClient.js | 56 +++++++++++++++++++++++++++++++--------------
1 files changed, 38 insertions(+), 18 deletions(-)
---
diff --git a/js/ui/telepathyClient.js b/js/ui/telepathyClient.js
index ca010c9..616eaa0 100644
--- a/js/ui/telepathyClient.js
+++ b/js/ui/telepathyClient.js
@@ -4,6 +4,7 @@ const DBus = imports.dbus;
const GLib = imports.gi.GLib;
const Lang = imports.lang;
const Mainloop = imports.mainloop;
+const Shell = imports.gi.Shell;
const Signals = imports.signals;
const St = imports.gi.St;
const Tp = imports.gi.TelepathyGLib;
@@ -34,6 +35,10 @@ const NotificationDirection = {
RECEIVED: 'chat-received'
};
+let contactFeatures = [Tp.ContactFeature.ALIAS,
+ Tp.ContactFeature.AVATAR_DATA,
+ Tp.ContactFeature.PRESENCE];
+
// This is GNOME Shell's implementation of the Telepathy 'Client'
// interface. Specifically, the shell is a Telepathy 'Observer', which
// lets us see messages even if they belong to another app (eg,
@@ -97,6 +102,25 @@ Client.prototype = {
delete this._sources[connPath + ':' + targetHandle];
}));
+ /* Request a TpContact */
+ Shell.get_tp_contacts(conn, 1, [targetHandle],
+ contactFeatures.length, contactFeatures,
+ Lang.bind(this, function (connection, contacts, failed) {
+ if (contacts.length < 1)
+ return;
+
+ /* We got the TpContact */
+ if (this._sources[connPath + ':' + targetHandle])
+ return;
+
+ let source = new Source(account, conn, chan, contacts[0]);
+
+ this._sources[connPath + ':' + targetHandle] = source;
+ source.connect('destroy', Lang.bind(this,
+ function() {
+ delete this._sources[connPath + ':' + targetHandle];
+ }));
+ }));
}
// Allow dbus method to return
@@ -372,38 +396,26 @@ ContactManager.prototype = {
Signals.addSignalMethods(ContactManager.prototype);
-function Source(account, conn, channel) {
- this._init(account, conn, channel);
+function Source(account, conn, channel, contact) {
+ this._init(account, conn, channel, contact);
}
Source.prototype = {
__proto__: MessageTray.Source.prototype,
- _init: function(account, conn, channel) {
- // FIXME: use chan.get_handle()
- let props = channel.borrow_immutable_properties();
- this._targetHandle = props[Tp.PROP_CHANNEL_TARGET_HANDLE];
- this._targetHandleType = props[Tp.PROP_CHANNEL_TARGET_HANDLE_TYPE];
- this._targetId = channel.get_identifier();
-
- MessageTray.Source.prototype._init.call(this, this._targetId);
+ _init: function(account, conn, channel, contact) {
+ MessageTray.Source.prototype._init.call(this, channel.get_identifier());
this.isChat = true;
this._account = account;
+ this._contact = contact;
this._conn = conn;
this._channel = channel;
this._closedId = this._channel.connect('invalidated', Lang.bind(this, this._channelClosed));
- if (this._targetHandleType == Tp.HandleType.CONTACT) {
- let aliasing = new Telepathy.ConnectionAliasing(DBus.session, conn.get_bus_name(), conn.get_object_path());
- aliasing.RequestAliasesRemote([this._targetHandle], Lang.bind(this,
- function (aliases, err) {
- if (aliases && aliases.length)
- this.title = aliases[0];
- }));
- }
+ this._updateAlias();
this._notification = new Notification(this);
this._notification.setUrgency(MessageTray.Urgency.HIGH);
@@ -419,6 +431,12 @@ Source.prototype = {
this._channelText.ListPendingMessagesRemote(false, Lang.bind(this, this._gotPendingMessages));
this._setSummaryIcon(this.createNotificationIcon());
+
+ this._notifyAliasId = this._contact.connect('notify::alias', Lang.bind(this, this._updateAlias));
+ },
+
+ _updateAlias: function() {
+ this.title = this._contact.get_alias();
},
createNotificationIcon: function() {
@@ -448,6 +466,8 @@ Source.prototype = {
this._channel.disconnect(this._closedId);
this._channelText.disconnect(this._receivedId);
this._channelText.disconnect(this._sentId);
+
+ this._contact.disconnect(this._notifyAliasId);
this.destroy();
},
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]