telepathyClient: only notify on new channels when asked to do so
We need to notify when the channel dispatcher calls HandleChannels on us with a channel we already handle. However, we don't want to notify if we claim a new incoming channel which doesn't actually have anything interesting in it yet. For example, a new channel pops up just to give a delivery notification. We want (or, need) to handle it but don't want to notify for it. Fixes: https://bugzilla.gnome.org/show_bug.cgi?id=666243 Signed-off-by: Jonny Lamb <jonnylamb@gnome.org>
This commit is contained in:
parent
1acec65c5e
commit
69e26c6dee
@ -197,11 +197,11 @@ const Client = new Lang.Class({
|
|||||||
|
|
||||||
_handleChannels: function(handler, account, conn, channels,
|
_handleChannels: function(handler, account, conn, channels,
|
||||||
requests, user_action_time, context) {
|
requests, user_action_time, context) {
|
||||||
this._handlingChannels(account, conn, channels);
|
this._handlingChannels(account, conn, channels, true);
|
||||||
context.accept();
|
context.accept();
|
||||||
},
|
},
|
||||||
|
|
||||||
_handlingChannels: function(account, conn, channels) {
|
_handlingChannels: function(account, conn, channels, notify) {
|
||||||
let len = channels.length;
|
let len = channels.length;
|
||||||
for (let i = 0; i < len; i++) {
|
for (let i = 0; i < len; i++) {
|
||||||
let channel = channels[i];
|
let channel = channels[i];
|
||||||
@ -212,7 +212,18 @@ const Client = new Lang.Class({
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this._tpClient.is_handling_channel(channel)) {
|
// 'notify' will be true when coming from an actual HandleChannels
|
||||||
|
// call, and not when from a successful Claim call. The point is
|
||||||
|
// we don't want to notify for a channel we just claimed which
|
||||||
|
// has no new messages (for example, a new channel which only has
|
||||||
|
// a delivery notification). We rely on _displayPendingMessages()
|
||||||
|
// and _messageReceived() to notify for new messages.
|
||||||
|
|
||||||
|
// But we should still notify from HandleChannels because the
|
||||||
|
// Telepathy spec states that handlers must foreground channels
|
||||||
|
// in HandleChannels calls which are already being handled.
|
||||||
|
|
||||||
|
if (notify && this._tpClient.is_handling_channel(channel)) {
|
||||||
// We are already handling the channel, display the source
|
// We are already handling the channel, display the source
|
||||||
let source = this._chatSources[channel.get_object_path()];
|
let source = this._chatSources[channel.get_object_path()];
|
||||||
if (source)
|
if (source)
|
||||||
@ -285,7 +296,7 @@ const Client = new Lang.Class({
|
|||||||
Lang.bind(this, function(dispatchOp, result) {
|
Lang.bind(this, function(dispatchOp, result) {
|
||||||
try {
|
try {
|
||||||
dispatchOp.claim_with_finish(result);
|
dispatchOp.claim_with_finish(result);
|
||||||
this._handlingChannels(account, conn, [channel]);
|
this._handlingChannels(account, conn, [channel], false);
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
throw new Error('Failed to Claim channel: ' + err);
|
throw new Error('Failed to Claim channel: ' + err);
|
||||||
}}));
|
}}));
|
||||||
|
Loading…
x
Reference in New Issue
Block a user