[Bug 29531] high-level API for text channels

bugzilla-daemon at freedesktop.org bugzilla-daemon at freedesktop.org
Fri Dec 10 13:02:42 CET 2010


https://bugs.freedesktop.org/show_bug.cgi?id=29531

--- Comment #16 from Simon McVittie <simon.mcvittie at collabora.co.uk> 2010-12-10 04:02:41 PST ---
(In reply to comment #14)
> When fetching pending messages we ignore [messages without a sender]

I think it should be possible to receive messages with an unspecified sender
(handle 0), with the API being "the handle is 0 or omitted, and the contact is
NULL". We could use them for messages from the server, from the chatroom or
from a contact who could not be identified, for instance. message-sender says
"If 0 or omitted, the contact who sent the message could not be determined".

There is one pathological case where we might get messages with a nonzero
handle but be forced to omit the sender contact:

* the CM is old, and so doesn't have immortal handles
* the CM is old, and so doesn't specify message-sender-id
* the handle was valid when we received the message, but became invalid before
we could do HoldHandles on it

I think it'd be OK to deal with that by removing the sender handle (which is
now meaningless).

If the CM doesn't have immortal handles, but does specify message-sender-id,
it's slightly more reliable to do the "get a contact" round-trip in terms of
the ID instead of the handle. You might not get the same handle back in
pathological cases, in which case you need to edit the message-sender...

Hmm, I think this means we need to change _tp_signalled_message_new slightly,
so that instead of asserting that the sender contact and the headers are
consistent, it trusts the contact implicitly, and edits the headers to match?
I'll do a mini-branch.

> a) Make mandatory to have message-sender[-id] define in messages announced in
> MessageSent. Then we can use this handle and get a TpContact from it.

I think I'd like to add this to the spec on general principles - sent messages
should be as close as possible to what the peer receives - but ideally
TpTextChannel shouldn't rely on it.

> b) If channel implements Group, use tp_channel_group_get_self_handle(). Then we
> need to prepare the GROUP feature, so we should have a
> TP_TEXT_CHANNEL_FEATURE_MESSAGE_SENT feature preparing GROUP if needed.

If we do (a), then it's OK for the fallback code in telepathy-glib to be a
little less pedantic, so perhaps it could use the TpConnection:self-contact
that I just added, and ignore the possibility of a channel-specific self
handle?

That may still need to be async, because self-contact requires the CONNECTED
feature on the connection, and we can theoretically start handling a channel
before we've fully inspected the Connection.

(If you particularly want the channel-specific contact, I'm working on API to
make every Group TpChannel guarantee that its contacts are available as
TpContact objects.)

-- 
Configure bugmail: https://bugs.freedesktop.org/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the QA contact for the bug.
You are the assignee for the bug.



More information about the telepathy-bugs mailing list