[Telepathy] message received method

Mateus Bellomo mateusbellomo at gmail.com
Sat Jul 23 14:43:55 UTC 2016


I think this is a Empathy bug [1].

[1]
https://bugs.launchpad.net/ubuntu/+source/adium-theme-ubuntu/+bug/1235472

2016-07-23 11:26 GMT-03:00 Mateus Bellomo <mateusbellomo at gmail.com>:

> great...many thanks for all this explanation!
>
> I've changed for the way you said [1] and it's working.
>
> Just one more question: I don't know if this is related to telepathy but
> when I receive a message at Empathy and the chat window is not open, it
> appears a little box at the bottom of the screen with that message. I saw
> at the debug log that a new channel is being created. When I click this
> box, it opens the chat window but the messages received while the chat
> window was closed doesn't appears there. Do you know if there is some
> property of the request map that I should set to maintain these received
> messages with window chat closed?
>
>
> [1]
> https://github.com/resiprocate/resiprocate/compare/master...MateusBellomo:mateus-presence-text#diff-82d1d1ba25e34af050fd6a6c5e5311dfR483
>
> 2016-07-23 5:09 GMT-03:00 George Kiagiadakis <gkiagia at tolabaki.gr>:
>
>> On 23.07.2016 07:16, Mateus Bellomo wrote:
>>
>>> George,
>>>
>>> I could make it work but for that I have swaped the initiatorHandle and
>>> targetHandle on the onMessageReceived() method. You could see at [1]
>>> what I
>>> did. Doing this, the channel created has the same parameters when I do a
>>> createChannel() [2] operation and the message sent and receive are now
>>> appearing at same window [3].
>>>
>>> I don't know if this implementation is the most suitable, what do you
>>> think?
>>>
>>> [1]
>>>
>>> https://github.com/resiprocate/resiprocate/compare/master...MateusBellomo:mateus-presence-text#diff-82d1d1ba25e34af050fd6a6c5e5311dfR498
>>> [2]
>>>
>>> https://github.com/resiprocate/resiprocate/compare/master...MateusBellomo:mateus-presence-text#diff-82d1d1ba25e34af050fd6a6c5e5311dfR650
>>> [3] https://mateusbellomo.wordpress.com/
>>>
>>>
>> No, this doesn't look correct. First of all, I can see targetHandle is
>> assigned to the contact from the "to" header, and since this is a "message
>> received" method, the "to" is your self contact, not the remote one. In 1-1
>> channels, TargetHandle must be the remote contact.
>>
>> I just had a look at how telepathy-qt implements ensureChannel() and now
>> I fully understand what telepathy-morse is doing there too...
>>
>> So, ensureChannel() will check if there is already a channel for this
>> message and if there is, it will use it, otherwise it will create a new
>> one. When you receive a new message for an existing channel, it is
>> practically impossible to know who is the "initiator", i.e. who started the
>> channel. If the channel is already created, then it is the channel that
>> knows this information, not the message. Therefore, ensureChannel() does
>> *not* use the "InitiatorHandle" to match an existing channel, it only uses
>> the "TargetHandleType" and "TargetHandle". But, if the channel is not
>> already created, then it creates it. In this case, it needs to know who is
>> the initiator and uses the "InitiatorHandle" property.
>>
>> What does this mean for your code? It means that "TargetHandleType" and
>> "TargetHandle" identify your channel and "InitiatorHandle" identify the
>> contact that would be initiating the channel if it wasn't already created.
>> To explain it in a simple map:
>>
>> * Receiving a message from a remote contact on a 1-to-1 chat:
>> TargetHandleType: contact
>> TargetHandle: remote contact handle
>> InitiatorHandle: remote contact handle
>>
>> * Sending a message to a remote contact on a 1-to-1 chat:
>> TargetHandleType: contact
>> TargetHandle: remote contact handle
>> InitiatorHandle: local 'self' contact handle
>>
>> * Receiving a message from a remote contact on a room:
>> TargetHandleType: room
>> TargetHandle: room handle
>> InitiatorHandle: remote contact handle
>>
>> * Sending a message to a remote contact on a room:
>> TargetHandleType: room
>> TargetHandle: room handle
>> InitiatorHandle: local 'self' contact handle
>>
>> Practically, your onMessageReceived() method falls in the first of the 4
>> cases above, so "TargetHandle" and "InitiatorHandle" actually need to be
>> the same contact handle, the one from the h_From header. Telepathy-morse
>> also tries to cover the 3rd case (room), which is why it is a bit more
>> confusing.
>>
>> George
>>
>>
>> _______________________________________________
>> telepathy mailing list
>> telepathy at lists.freedesktop.org
>> https://lists.freedesktop.org/mailman/listinfo/telepathy
>>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/telepathy/attachments/20160723/af5cc00a/attachment.html>


More information about the telepathy mailing list