[Bug 48210] Could TpBaseChannel be more flexible?
bugzilla-daemon at freedesktop.org
bugzilla-daemon at freedesktop.org
Wed May 30 08:16:48 CEST 2012
https://bugs.freedesktop.org/show_bug.cgi?id=48210
--- Comment #3 from Simon McVittie <simon.mcvittie at collabora.co.uk> 2012-05-30 06:16:48 UTC ---
Use cases:
1. Text channel appears, closes+respawns, is really destroyed.
Already works:
* register() + emit_new_channel()
* (time passes)
* reopened() (emits ::closed with :channel-destroyed = FALSE;
channel manager emits ChannelClosed and NewChannel in response)
* (time passes)
* destroyed() (emits ::closed with :channel-destroyed = TRUE;
channel manager emits ChannelClosed in response)
2. MUC text channel is present within CM but not "officially" there yet, then
appears, then closes+respawns, then is really destroyed
One possibility is:
* don't register(), don't emit_new_channel()
* (time passes)
* channel manager decides the channel should appear: now it
calls register() and emit_new_channel(), and connects to ::closed
* (time passes)
* reopened() (emits ::closed with :channel-destroyed = FALSE;
channel manager emits ChannelClosed and NewChannel in response)
* (time passes)
* destroyed() (emits ::closed with :channel-destroyed = TRUE;
channel manager emits ChannelClosed in response)
Another possibility:
* don't register(), don't emit_new_channel()
* (time passes)
* channel manager decides the channel should appear: now it
calls reopened() and emit_new_channel(), and connects to ::closed.
reopened() emits ::closed (which the CM isn't connected to yet, and
is not copied onto D-Bus because the object was never registered), then
does an equivalent of register() internally.
* (time passes)
* reopened() (emits ::closed with :channel-destroyed = FALSE;
channel manager emits ChannelClosed and NewChannel in response)
* (time passes)
* destroyed() (emits ::closed with :channel-destroyed = TRUE;
channel manager emits ChannelClosed in response)
3. MUC text channel is present within CM but not "officially" there yet, then
is closed when it has never actually appeared on D-Bus
* don't register(), don't emit_new_channel()
* (time passes)
* destroyed() (sets :channel-destroyed = TRUE, but either does not
emit ::closed, or does emit it but it never reaches D-Bus
because register() was never called; if it does emit ::closed,
the channel manager refrains from emitting ChannelClosed because
tp_base_channel_is_registered() = FALSE)
I think this needs new behaviour, but perhaps no new API? It requires
participation from the TpChannelManager, but so does the current interface, so,
whatever.
--
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