summaryrefslogtreecommitdiff
path: root/spec/Channel_Interface_Group.xml
blob: 7da8c773fdbb95963992f8274f8a22176979f770 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
<?xml version="1.0" ?>
<node name="/Channel_Interface_Group" xmlns:tp="http://telepathy.freedesktop.org/wiki/DbusSpec#extensions-v0">
  <tp:copyright>Copyright (C) 2005, 2006 Collabora Limited</tp:copyright>
  <tp:copyright>Copyright (C) 2005, 2006 Nokia Corporation</tp:copyright>
  <tp:copyright>Copyright (C) 2006 INdT</tp:copyright>
  <tp:license xmlns="http://www.w3.org/1999/xhtml">
    <p>This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.</p>

<p>This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Library General Public License for more details.</p>

<p>You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</p>
  </tp:license>
  <interface name="org.freedesktop.Telepathy.Channel.Interface.Group">
    <tp:requires interface="org.freedesktop.Telepathy.Channel"/>
    <method name="AddMembers">
      <arg direction="in" name="contacts" type="au" tp:type="Contact_Handle[]">
        <tp:docstring>
          An array of contact handles to invite to the channel
        </tp:docstring>
      </arg>
      <arg direction="in" name="message" type="s">
        <tp:docstring>
          A string message, which can be blank if desired
        </tp:docstring>
      </arg>
      <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
        <p>Invite all the given contacts into the channel, or accept requests for
          channel membership for contacts on the pending local list.</p>
        
        <p>A message may be provided along with the request, which will be sent
        to the server if supported. See the CHANNEL_GROUP_FLAG_MESSAGE_ADD and
        CHANNEL_GROUP_FLAG_MESSAGE_ACCEPT flags to see in which cases this
        message should be provided.</p>
      </tp:docstring>
      <tp:possible-errors>
        <tp:error name="org.freedesktop.Telepathy.Error.Disconnected"/>
        <tp:error name="org.freedesktop.Telepathy.Error.NetworkError"/>
        <tp:error name="org.freedesktop.Telepathy.Error.NotAvailable"/>
        <tp:error name="org.freedesktop.Telepathy.Error.PermissionDenied"/>
        <tp:error name="org.freedesktop.Telepathy.Error.InvalidHandle"/>
        <tp:error name="org.freedesktop.Telepathy.Error.Channel.Full"/>
        <tp:error name="org.freedesktop.Telepathy.Error.Channel.InviteOnly"/>
        <tp:error name="org.freedesktop.Telepathy.Error.Channel.Banned"/>
      </tp:possible-errors>
    </method>
    <method name="GetAllMembers">
      <arg direction="out" type="au" tp:type="Contact_Handle[]">
        <tp:docstring>
          array of handles of current members
        </tp:docstring>
      </arg>
      <arg direction="out" type="au" tp:type="Contact_Handle[]">
        <tp:docstring>
          array of handles of local pending members
        </tp:docstring>
      </arg>
      <arg direction="out" type="au" tp:type="Contact_Handle[]">
        <tp:docstring>
          array of handles of remote pending members
        </tp:docstring>
      </arg>
      <tp:docstring>
        Returns arrays of all current, local and remote pending channel
        members.
      </tp:docstring>
      <tp:possible-errors>
        <tp:error name="org.freedesktop.Telepathy.Error.Disconnected"/>
        <tp:error name="org.freedesktop.Telepathy.Error.NetworkError"/>
      </tp:possible-errors>
    </method>
    <tp:flags name="Channel_Group_Flags" value-prefix="Channel_Group_Flag" type="u">
      <tp:flag suffix="Can_Add" value="1">
        <tp:docstring>
            The AddMembers method can be used to add or invite members who are
            not already in the local pending list (which is always valid).
        </tp:docstring>
      </tp:flag>
      <tp:flag suffix="Can_Remove" value="2">
        <tp:docstring>
            The RemoveMembers method can be used to remove channel members
            (removing those on the pending local list is always valid).
        </tp:docstring>
      </tp:flag>
      <tp:flag suffix="Can_Rescind" value="4">
        <tp:docstring>
            The RemoveMembers method can be used on people on the remote
            pending list.
        </tp:docstring>
      </tp:flag>
      <tp:flag suffix="Message_Add" value="8">
        <tp:docstring>
            A message may be sent to the server when calling AddMembers on
            contacts who are not currently pending members.
        </tp:docstring>
      </tp:flag>
      <tp:flag suffix="Message_Remove" value="16">
        <tp:docstring>
            A message may be sent to the server when calling RemoveMembers on
            contacts who are currently channel members.
        </tp:docstring>
      </tp:flag>
      <tp:flag suffix="Message_Accept" value="32">
        <tp:docstring>
            A message may be sent to the server when calling AddMembers on
            contacts who are locally pending.
        </tp:docstring>
      </tp:flag>
      <tp:flag suffix="Message_Reject" value="64">
        <tp:docstring>
            A message may be sent to the server when calling RemoveMembers on
            contacts who are locally pending.
        </tp:docstring>
      </tp:flag>
      <tp:flag suffix="Message_Rescind" value="128">
        <tp:docstring>
            A message may be sent to the server when calling RemoveMembers on
            contacts who are remote pending.
        </tp:docstring>
      </tp:flag>
      <tp:flag suffix="Channel_Specific_Handles" value="256">
        <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
          <p>
            The members of this group have handles which are specific to
            this channel, and are not valid as general-purpose handles on
            the connection. Depending on the channel, it may be possible to
            call GetHandleOwners to find the owners of these handles, which
            should be done if you wish to eg subscribe to the contact's
            presence.
          </p>

          <p>
            Connection managers must ensure that any given handle is not
            simultaneously a general-purpose handle and a channel-specific
            handle.
          </p>
        </tp:docstring>
      </tp:flag>
      <tp:flag suffix="Only_One_Group" value="512">
        <tp:docstring>
            Placing a contact in multiple groups of this type is not allowed
            and will raise NotAvailable (on services where contacts may only
            be in one user-defined group, user-defined groups will have
            this flag).
        </tp:docstring>
      </tp:flag>
      <tp:flag suffix="Handle_Owners_Not_Available" value="1024">
        <tp:docstring>
          In rooms with channel specific handles (ie Channel_Specific_Handles
          flag is set), this flag indicates that none of the handle owners are
          available, and that GetHandleOwners method will always return 0 for
          channel members other than the self handle.
        </tp:docstring>
      </tp:flag>
    </tp:flags>
    <method name="GetGroupFlags">
      <arg direction="out" type="u" tp:type="Channel_Group_Flags">
        <tp:docstring>
          The bitwise OR of zero or more values from ChannelGroupFlags
        </tp:docstring>
      </arg>
      <tp:docstring>
        Returns an integer representing the bitwise-OR of flags on this
        channel. The user interface can use this to present information about
        which operations are currently valid.
      </tp:docstring>
      <tp:possible-errors>
        <tp:error name="org.freedesktop.Telepathy.Error.Disconnected"/>
        <tp:error name="org.freedesktop.Telepathy.Error.NetworkError"/>
      </tp:possible-errors>
    </method>
    <method name="GetHandleOwners">
      <arg direction="in" name="handles" type="au" tp:type="Contact_Handle[]">
        <tp:docstring>
          A list of integer handles representing members of the channel
        </tp:docstring>
      </arg>
      <arg direction="out" type="au" tp:type="Contact_Handle[]">
        <tp:docstring>
          An array of integer handles representing the owner handles of
          the given room members, in the same order, or 0 if the
          owner is not available
        </tp:docstring>
      </arg>
      <tp:docstring>
        If the CHANNEL_GROUP_FLAG_CHANNEL_SPECIFIC_HANDLES flag is set on
        the channel, then the handles of the group members are specific
        to this channel, and are not meaningful in a connection-wide
        context such as contact lists. This method allows you to find
        the owner of the handle if it can be discovered in this channel,
        or 0 if the owner is not available.
      </tp:docstring>
      <tp:possible-errors>
        <tp:error name="org.freedesktop.Telepathy.Error.Disconnected"/>
        <tp:error name="org.freedesktop.Telepathy.Error.NetworkError"/>
        <tp:error name="org.freedesktop.Telepathy.Error.InvalidHandle"/>
        <tp:error name="org.freedesktop.Telepathy.Error.NotAvailable">
          <tp:docstring>
            This channel doesn't have the CHANNEL_SPECIFIC_HANDLES flag,
            so handles in this channel are globally meaningful and calling
            this method is not necessary
          </tp:docstring>
        </tp:error>
        <tp:error name="org.freedesktop.Telepathy.Error.InvalidArgument">
          <tp:docstring>
            One of the given handles is not a member
          </tp:docstring>
        </tp:error>
      </tp:possible-errors>
    </method>
    <method name="GetLocalPendingMembers">
      <arg direction="out" type="au" tp:type="Contact_Handle[]"/>
      <tp:docstring>
        Returns an array of handles representing contacts requesting
        channel membership and awaiting local approval with AddMembers.
      </tp:docstring>
      <tp:possible-errors>
        <tp:error name="org.freedesktop.Telepathy.Error.Disconnected"/>
        <tp:error name="org.freedesktop.Telepathy.Error.NetworkError"/>
      </tp:possible-errors>
    </method>
    <method name="GetLocalPendingMembersWithInfo">
      <tp:added version="0.15.0" />
      <tp:docstring>
        Returns an array of structs containing handles representing contacts
        requesting channel membership and awaiting local approval with
        AddMembers.
      </tp:docstring>
      <arg direction="out" type="a(uuus)">
        <tp:docstring>
          An array of structs containing:
          <ul>
            <li>
              A handle representing the contact requesting channel membership
            </li>
            <li>
              A handle representing the contact making the request, or 0 if
              unknown
            </li>
            <li>
              The reason for the request: one of the values of
              ChannelGroupChangeReason
            </li>
            <li>
              A string message containing the reason for the request if any (or
              blank if none)
            </li>
          </ul>
        </tp:docstring>
      </arg>
      <tp:possible-errors>
        <tp:error name="org.freedesktop.Telepathy.Error.Disconnected"/>
        <tp:error name="org.freedesktop.Telepathy.Error.NetworkError"/>
      </tp:possible-errors>
    </method>
    <method name="GetMembers">
      <arg direction="out" type="au" tp:type="Contact_Handle[]"/>
      <tp:docstring>
        Returns an array of handles for the members of this channel.
      </tp:docstring>
      <tp:possible-errors>
        <tp:error name="org.freedesktop.Telepathy.Error.Disconnected"/>
        <tp:error name="org.freedesktop.Telepathy.Error.NetworkError"/>
      </tp:possible-errors>
    </method>
    <method name="GetRemotePendingMembers">
      <arg direction="out" type="au" tp:type="Contact_Handle[]"/>
      <tp:docstring>
        Returns an array of handles representing contacts who have been
        invited to the channel and are awaiting remote approval.
      </tp:docstring>
      <tp:possible-errors>
        <tp:error name="org.freedesktop.Telepathy.Error.Disconnected"/>
        <tp:error name="org.freedesktop.Telepathy.Error.NetworkError"/>
      </tp:possible-errors>
    </method>
    <method name="GetSelfHandle">
      <arg direction="out" type="u" tp:type="Contact_Handle"/>
      <tp:docstring>
        Returns the handle for the user on this channel (which can also be a
        local or remote pending member) or 0 if the user not a member at all
        (which is likely to be the case, for instance, on Type.ContactList
        channels). Note that this is different from the connection
        GetSelfHandle on some protocols, so the value of this handle should
        always be used with the methods of this interface.
      </tp:docstring>
      <tp:possible-errors>
        <tp:error name="org.freedesktop.Telepathy.Error.Disconnected"/>
        <tp:error name="org.freedesktop.Telepathy.Error.NetworkError"/>
      </tp:possible-errors>
    </method>
    <signal name="GroupFlagsChanged">
      <arg name="added" type="u" tp:type="Channel_Group_Flags">
        <tp:docstring>
          A bitwise OR of the flags which have been set
        </tp:docstring>
      </arg>
      <arg name="removed" type="u" tp:type="Channel_Group_Flags">
        <tp:docstring>
          A bitwise OR of the flags which have been cleared
        </tp:docstring>
      </arg>
      <tp:docstring>
        Emitted when the flags as returned by GetGroupFlags are changed.
        The user interface should be updated as appropriate.
      </tp:docstring>
    </signal>
    <tp:enum name="Channel_Group_Change_Reason" type="u">
      <tp:enumvalue suffix="None" value="0">
        <tp:docstring>
            No reason was provided for this change.
        </tp:docstring>
      </tp:enumvalue>
      <tp:enumvalue suffix="Offline" value="1">
        <tp:docstring>
            The change is due to a user going offline.
        </tp:docstring>
      </tp:enumvalue>
      <tp:enumvalue suffix="Kicked" value="2">
        <tp:docstring>
            The change is due to a kick operation.
        </tp:docstring>
      </tp:enumvalue>
      <tp:enumvalue suffix="Busy" value="3">
        <tp:docstring>
            The change is due to a busy indication.
        </tp:docstring>
      </tp:enumvalue>
      <tp:enumvalue suffix="Invited" value="4">
        <tp:docstring>
            The change is due to an invitation.
        </tp:docstring>
      </tp:enumvalue>
      <tp:enumvalue suffix="Banned" value="5">
        <tp:docstring>
            The change is due to a kick+ban operation.
        </tp:docstring>
      </tp:enumvalue>
      <tp:enumvalue suffix="Error" value="6">
        <tp:docstring>
            The change is due to an error occurring.
        </tp:docstring>
      </tp:enumvalue>
      <tp:enumvalue suffix="Invalid_Contact" value="7">
        <tp:docstring>
            The change is because the requested contact does not exist.
        </tp:docstring>
      </tp:enumvalue>
      <tp:enumvalue suffix="No_Answer" value="8">
        <tp:docstring>
            The change is because the requested contact did not respond.
        </tp:docstring>
      </tp:enumvalue>
      <tp:enumvalue suffix="Renamed" value="9">
        <tp:docstring>
          The change is because a contact's unique identifier changed.
          There must be exactly one handle in the removed set and exactly
          one handle in one of the added sets. The Renamed signal on the
          Renaming interface will have been emitted for the same handles,
          shortly before this MembersChanged signal is emitted.
        </tp:docstring>
      </tp:enumvalue>
      <tp:enumvalue suffix="Permission_Denied" value="10">
        <tp:docstring>
            The change is because there was no permission to contact the
            requested handle.
        </tp:docstring>
      </tp:enumvalue>
      <tp:enumvalue suffix="Separated" value="11">
        <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
          <p>If members are removed with this reason code, the change is
            because the group has split into unconnected parts which can only
            communicate within themselves (e.g. netsplits on IRC use this
            reason code).
          </p>
          <p>
            If members are added with this reason code, the change is because
            unconnected parts of the group have rejoined. If this channel
            carries messages (e.g. Text or Tubes channels) applications must
            assume that the contacts being added are likely to have missed some
            messages as a result of the separation, and that the contacts
            in the group are likely to have missed some messages from the
            contacts being added.
          </p>
          <p>Note that from the added contacts' perspective, they have been
            in the group all along, and the contacts we indicate to be in
            the group (including the local user) have just rejoined
            the group with reason Separated. Application protocols in Tubes
            should be prepared to cope with this situation.
          </p>
        </tp:docstring>
      </tp:enumvalue>
    </tp:enum>
    <signal name="MembersChanged">
      <arg name="message" type="s">
        <tp:docstring>
          A string message from the server, or blank if not
        </tp:docstring>
      </arg>
      <arg name="added" type="au" tp:type="Contact_Handle[]">
        <tp:docstring>
          A list of members added to the channel
        </tp:docstring>
      </arg>
      <arg name="removed" type="au" tp:type="Contact_Handle[]">
        <tp:docstring>
          A list of members removed from the channel
        </tp:docstring>
      </arg>
      <arg name="local_pending" type="au" tp:type="Contact_Handle[]">
        <tp:docstring>
          A list of members who are pending local approval
        </tp:docstring>
      </arg>
      <arg name="remote_pending" type="au" tp:type="Contact_Handle[]">
        <tp:docstring>
          A list of members who are pending remote approval
        </tp:docstring>
      </arg>
      <arg name="actor" type="u" tp:type="Contact_Handle">
        <tp:docstring>
          The contact handle of the person who made the change, or 0
          if not known
        </tp:docstring>
      </arg>
      <arg name="reason" type="u" tp:type="Channel_Group_Change_Reason">
        <tp:docstring>
          A reason for the change: one of the values of
          ChannelGroupChangeReason
        </tp:docstring>
      </arg>
      <tp:docstring>
        Emitted when contacts join any of the three lists (members, local
        pending or remote pending).  Contacts are listed in the removed
        list when they leave any of the three lists. There may also be
        a message from the server regarding this change, which may be
        displayed to the user if desired.
      </tp:docstring>
    </signal>
    <method name="RemoveMembers">
      <arg direction="in" name="contacts" type="au" tp:type="Contact_Handle[]">
        <tp:docstring>
          An array of contact handles to remove from the channel
        </tp:docstring>
      </arg>
      <arg direction="in" name="message" type="s">
        <tp:docstring>
          A string message, which can be blank if desired
        </tp:docstring>
      </arg>
      <tp:docstring>
        Requests the removal of contacts from a channel, reject their request
        for channel membership on the pending local list, or rescind their
        invitation on the pending remote list. A message may be provided along
        with the request, which will be sent to the server if supported. See
        the CHANNEL_GROUP_FLAG_MESSAGE_REMOVE,
        CHANNEL_GROUP_FLAG_MESSAGE_REJECT and
        CHANNEL_GROUP_FLAG_MESSAGE_RESCIND flags to see in which cases this
        message should be provided.
      </tp:docstring>
      <tp:possible-errors>
        <tp:error name="org.freedesktop.Telepathy.Error.Disconnected"/>
        <tp:error name="org.freedesktop.Telepathy.Error.NetworkError"/>
        <tp:error name="org.freedesktop.Telepathy.Error.NotAvailable"/>
        <tp:error name="org.freedesktop.Telepathy.Error.PermissionDenied"/>
        <tp:error name="org.freedesktop.Telepathy.Error.InvalidHandle"/>
      </tp:possible-errors>
    </method>
    <method name="RemoveMembersWithReason">
      <arg direction="in" name="contacts" type="au" tp:type="Contact_Handle[]">
        <tp:docstring>
          An array of contact handles to remove from the channel
        </tp:docstring>
      </arg>
      <arg direction="in" name="message" type="s">
        <tp:docstring>
          A string message, which can be blank if desired
        </tp:docstring>
      </arg>
      <arg direction="in" name="reason" type="u"
           tp:type="Channel_Group_Change_Reason">
        <tp:docstring>
          A reason for the change: one of the values of
          ChannelGroupChangeReason
        </tp:docstring>
      </arg>
      <tp:docstring>
        As RemoveMembers, but a reason code may be provided where
        appropriate. The reason code may be ignored if the underlying
        protocol is unable to represent the given reason.
      </tp:docstring>
      <tp:possible-errors>
        <tp:error name="org.freedesktop.Telepathy.Error.Disconnected"/>
        <tp:error name="org.freedesktop.Telepathy.Error.NetworkError"/>
        <tp:error name="org.freedesktop.Telepathy.Error.NotAvailable"/>
        <tp:error name="org.freedesktop.Telepathy.Error.PermissionDenied"/>
        <tp:error name="org.freedesktop.Telepathy.Error.InvalidHandle"/>
        <tp:error name="org.freedesktop.Telepathy.Error.InvalidArgument">
          <tp:docstring>
            The provided reason code was invalid.
          </tp:docstring>
        </tp:error>
      </tp:possible-errors>
    </method>
    <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
      <p>Interface for channels which have multiple members, and where the members
    of the channel can change during its lifetime. Your presence in the channel
    cannot be presumed by the channel's existence (for example, a channel you
    may request membership of but your request may not be granted).</p>

  <p>This interface implements three lists: a list of current members, and two
    lists of local pending and remote pending members. Contacts on the remote
    pending list have been invited to the channel, but the remote user has not
    accepted the invitation. Contacts on the local pending list have requested
    membership of the channel, but the local user of the framework must accept
    their request before they may join. A single contact should never appear on
    more than one of the three lists. The lists are empty when the channel is
    created, and the MembersChanged signal should be emitted when information
    is retrieved from the server, or changes occur.</p>

  <p>Addition of members to the channel may be requested by using AddMembers. If
    remote acknowledgement is required, use of the AddMembers method will cause
    users to appear on the remote pending list. If no acknowledgement is
    required, AddMembers will add contacts to the member list directly.  If a
    contact is awaiting authorisation on the local pending list, AddMembers
    will grant their membership request.</p>

  <p>Removal of contacts from the channel may be requested by using
    RemoveMembers.  If a contact is awaiting authorisation on the local pending
    list, RemoveMembers will refuse their membership request. If a contact is
    on the remote pending list but has not yet accepted the invitation,
    RemoveMembers will rescind the request if possible.</p>

  <p>It should not be presumed that the requester of a channel implementing this
    interface is immediately granted membership, or indeed that they are a
    member at all, unless they appear in the list. They may, for instance,
    be placed into the remote pending list until a connection has been
    established or the request acknowledged remotely.</p>
    </tp:docstring>
  </interface>
</node>
<!-- vim:set sw=2 sts=2 et ft=xml: -->