[Telepathy-commits] [telepathy-spec/master] ChannelDispatchOperation: sort out splitting

Simon McVittie simon.mcvittie at collabora.co.uk
Fri Sep 26 08:21:15 PDT 2008


20080711194033-53eee-8ff74e0d513199eb27f115ff38e3962ef1579737.gz
---
 spec/Channel_Dispatch_Operation.xml |   52 +++++++++++++++++++++++++++-------
 1 files changed, 41 insertions(+), 11 deletions(-)

diff --git a/spec/Channel_Dispatch_Operation.xml b/spec/Channel_Dispatch_Operation.xml
index f54dfcf..55a0dfd 100644
--- a/spec/Channel_Dispatch_Operation.xml
+++ b/spec/Channel_Dispatch_Operation.xml
@@ -35,28 +35,58 @@
 
       <p>More specifically, whenever the
         <tp:dbus-ref namespace="org.freedesktop.Telepathy">Connection.Interface.Requests.DRAFT.NewChannels</tp:dbus-ref>
-        signal contains any channels whose
+        signal contains channels whose
         <tp:dbus-ref namespace="org.freedesktop.Telepathy">Channel.FUTURE.Requested</tp:dbus-ref>
         property is false, or whenever the
         <tp:dbus-ref namespace="org.freedesktop.Telepathy">Connection.NewChannel</tp:dbus-ref>
         signal contains a channel with suppress_handler false,
-        a ChannelDispatchOperation is created for those
-        channels. Any requested channels in the same signal MUST NOT be
-        included (although the signal shouldn't contain any anyway).</p>
-
-      <!-- FIXME: this doesn't explain what to do with splitting, but it's
-      sort of right in principle... -->
-
-      <p>First, if the channels are in the same bundle as a channel that is
-        already being handled, the channel dispatcher SHOULD call the
-        handler's
+        one or more ChannelDispatchOperation objects are created for those
+        channels.</p>
+
+      <p>If some channels in a NewChannels signal were requested but some
+        were not, or some channels are in different bundles, this is an error.
+        The channel dispatcher SHOULD recover by treating the NewChannels
+        signal as if it had been several NewChannels signals each containing
+        one channel.</p>
+
+      <p>First, the channel dispatcher SHOULD construct a list of all the
+        channel handlers that could handle all the channels, ordered by
+        priority in some implementation-dependent way.</p>
+
+      <p>If there are suitable handlers, one channel dispatch operation SHOULD
+        be created for all the channels. If there are not, one channel
+        dispatch operation SHOULD be created for each channel, each with
+        a list of channel handlers that could handle that channel.</p>
+
+      <p>When listing channel handlers, priority SHOULD be given to
+        channel handlers that are already handling channels from the same
+        bundle.</p>
+
+      <p>Processing of a channel dispatch operation proceeds as follows.
+        If the channels in a channel dispatch operation are in the same
+        bundle as a channel that is already being handled, and the handler
+        could also handle the channels being dispatched, the channel
+        dispatcher SHOULD call the handler's
         HandleAdditionalChannels
-        method. If the handler takes responsibility for the channels,
+        method to see whether the handler will accept the new channels too.
+        If the handler takes responsibility for the channels,
         processing stops, and no approvers are run.</p>
 
-      <p>Next, the channel dispatcher SHOULD send the channel dispatch
+      <tp:rationale>
+        <p>Some channel types can be picked up "quietly" by an existing
+          channel handler. If a Text channel is added to an existing
+          bundle containing a StreamedMedia channel, there shouldn't be
+          any approvers, flashing icons or notification bubbles, if the
+          the UI for the StreamedMedia channel can just add a text box
+          and display the message.</p>
+      </tp:rationale>
+
+      <p>If not, the channel dispatcher SHOULD send the channel dispatch
         operation to all relevant approvers (in parallel) and wait for an
         approver to request that the channels are handled or rejected.</p>
+
+      <p>Finally, the channel dispatcher SHOULD send the channels to
+        a handler, or reject them, according to the approver's choice.</p>
     </tp:docstring>
 
     <property name="Interfaces" type="as" access="read"
-- 
1.5.6.5




More information about the Telepathy-commits mailing list