[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