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
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
|
<?xml version="1.0" ?>
<node name="/Account"
xmlns:tp="http://telepathy.freedesktop.org/wiki/DbusSpec#extensions-v0">
<tp:copyright>Copyright © 2008-2009 Collabora Ltd.</tp:copyright>
<tp:copyright>Copyright © 2008-2009 Nokia Corporation</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
Lesser 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.Account">
<tp:docstring xmlns="http://www.w3.org/1999/xhtml">
<p>An Account object encapsulates the necessary details to make a
Telepathy connection.</p>
<p>Accounts are uniquely identified by object path. The object path
of an Account MUST take the form
<code>/org/freedesktop/Telepathy/Account/<em>cm</em>/<em>proto</em>/<em>acct</em></code>, where:</p>
<ul>
<li><em>cm</em> is the same <tp:type>Connection_Manager_Name</tp:type>
that appears in the connection manager's well-known bus name and
object path</li>
<li><em>proto</em> is the <tp:type>Protocol</tp:type> name as seen in
<tp:dbus-ref
namespace="org.freedesktop.Telepathy">ConnectionManager.ListProtocols</tp:dbus-ref>,
but with "-" replaced with "_"
(i.e. the same as in the object-path of a <tp:dbus-ref
namespace="org.freedesktop.Telepathy">Connection</tp:dbus-ref>)</li>
<li><em>acct</em> is an arbitrary string of ASCII letters, digits
and underscores, starting with a letter or underscore, which
uniquely identifies this account</li>
<li>Clients SHOULD parse the object path to discover the
connection manager and protocol</li>
<li>Clients MUST NOT attempt to parse <em>acct</em></li>
<li>Clients MUST NOT assume that <em>acct</em> matches
the connection-specific part of a Connection's object-path and
bus name</li>
<li>The account manager SHOULD choose <em>acct</em> such that if
an account is deleted, its object path will be re-used if and only
if the new account is in some sense "the same"
(incorporating the 'account' parameter in some way is
recommended)</li>
</ul>
<tp:rationale>
<p>This API avoids specifying the "profiles" used in Mission Control
4.x or the "presets" that have been proposed to replace them. An
optional interface will be provided for AM implementations
that want to provide presets.</p>
<p>There is deliberately no functionality here for opening channels;
we intend to provide that in the channel dispatcher.</p>
<p>Other missing features which would be better in their own
interfaces:</p>
<ul>
<li>dynamic parameter-providing (aka provisioning)</li>
<li>saved server capabilities</li>
<li>account conditions</li>
<li>account grouping</li>
</ul>
</tp:rationale>
</tp:docstring>
<tp:added version="0.17.2"/>
<tp:changed version="0.17.6">moved the Avatar property to a separate
interface</tp:changed>
<!-- Missing functionality compared with NMC 4.x account + profile,
apart from as listed above:
* vCard field, + default profile for each vCard field
(vCard field is per protocol and should be chosen by the
Telepathy <-> address-book bridge?; default profile is now
meaningless)
* "normalized name" (normalized handle?)
* branding icon (what's this and how does it differ from the icon?)
* configuration UI (not our problem - perhaps the UI could special-case
by cm,protocol,preset tuples?)
* default account domain (somewhat meaningless in general; specialized
account config UI can hard-code this)
* SPLIT_ACCOUNT (pseudo-capability - this is a property of the protocol,
not the profile, and in any case only the account config UI cares)
Missing functionality compared with Decibel accounts:
* we don't really know, they take arbitrary key/value pairs...
but display name, protocol, presence/message, current, autoreconnect
are the ones given special status by the source, and we have all of them
-->
<property name="Interfaces" tp:name-for-bindings="Interfaces"
type="as" tp:type="DBus_Interface[]" access="read">
<tp:docstring>
A list of the extra interfaces provided by this account.
</tp:docstring>
</property>
<method name="Remove" tp:name-for-bindings="Remove">
<tp:docstring>Delete the account.</tp:docstring>
<tp:possible-errors>
<tp:error name="org.freedesktop.Telepathy.Error.PermissionDenied"/>
</tp:possible-errors>
</method>
<signal name="Removed" tp:name-for-bindings="Removed">
<tp:docstring>
This account has been removed.
<tp:rationale>
This is redundant with <tp:dbus-ref
namespace="org.freedesktop.Telepathy.AccountManager">AccountRemoved</tp:dbus-ref>,
but it's still worth having,
to avoid having to bind to AccountManager.AccountRemoved to tell
you whether your Account is valid — ideally, an account-editing UI
should only care about a single Account.
</tp:rationale>
</tp:docstring>
</signal>
<signal name="AccountPropertyChanged"
tp:name-for-bindings="Account_Property_Changed">
<tp:docstring>
The values of one or more properties on this interface (that do not
specify that this signal does not apply to them) may have changed.
This does not cover properties of other interfaces, which must
provide their own change notification if appropriate.
</tp:docstring>
<arg name="Properties" type="a{sv}">
<tp:docstring>
A map from property names in this namespace (e.g.
<tp:member-ref>Nickname</tp:member-ref>) to
values. Properties whose values have not changed SHOULD be
omitted, but this need not be done.
</tp:docstring>
</arg>
</signal>
<property name="DisplayName" type="s" access="readwrite"
tp:name-for-bindings="Display_Name">
<tp:docstring>
The user-visible name of this account. This SHOULD be chosen by the
user at account creation time. The account creation user interface
is responsible for setting a reasonable default value in the user's
locale; something like "Jabber (bob@example.com)" would be sensible.
<tp:rationale>
This approximately corresponds to "display name" in NMC 4.x and
Decibel.
</tp:rationale>
</tp:docstring>
</property>
<property name="Icon" tp:name-for-bindings="Icon"
type="s" access="readwrite">
<tp:docstring>
The name of an icon in the system's icon theme, such as "im-msn",
or the empty string to not specify an icon. If the icon is set to
an empty string, the account manager or any client MAY derive a
default icon, for instance from the protocol.
<tp:rationale>
This approximately corresponds to mc_profile_get_icon_name
(or possibly mc_profile_get_branding_icon_name) in NMC 4.x.
It's accessed via the account rather than the profile because
we no longer have profiles as a core concept.
</tp:rationale>
</tp:docstring>
</property>
<property name="Valid" tp:name-for-bindings="Valid"
type="b" access="read">
<tp:docstring>
If true, this account is considered by the account manager to be
complete and usable. If false, user action is required to make it
usable, and it will never attempt to connect (for instance, this
might be caused by the absence of a required parameter).
<tp:rationale>
For connection managers with a plugin architecture, like
telepathy-haze, we have little or no control over the parameters
offered; for platforms with package management, we have little or
no control over the CMs offered. NMC 4.x would just pretend the
account didn't exist in these circumstances, but silent data loss
is bad, and UIs with CM-specific knowledge (or a user filling in
newly-required parameters) might be able to rescue a broken account.
</tp:rationale>
</tp:docstring>
</property>
<property name="Enabled" tp:name-for-bindings="Enabled"
type="b" access="readwrite">
<tp:docstring xmlns="http://www.w3.org/1999/xhtml">
<p>This property gives the users the possibility to prevent an account
from being used. This flag does not change the validity of the
account.</p>
<p>A disabled account can never be put online.</p>
<tp:rationale>
<p>Use cases:</p>
<ul>
<li>user has two or more accounts capable of calling contact X, but
he doesn't want the UI to prompt him everytime about which one he
wants to use for the call. He can then disable all the equivalent
accounts but one.</li>
<li>There is some temporary server error and the user doesn't want
to be be bother by error messages, or change the account
configuration: temporarily disabling the account is quicker.</li>
</ul>
</tp:rationale>
<p>The AccountManager SHOULD allow this property to be set on invalid
accounts, but MUST NOT attempt to put invalid accounts online
even if they become Enabled.</p>
<tp:rationale>
<p>There doesn't seem to be any good reason not to allow this.</p>
</tp:rationale>
</tp:docstring>
</property>
<property name="Nickname" tp:name-for-bindings="Nickname"
type="s" access="readwrite">
<tp:docstring>
The nickname to set on this account for display to other contacts,
as set by the user. When the account becomes connected, the
account manager SHOULD set this as the user's alias using <tp:dbus-ref
namespace="org.freedesktop.Telepathy.Connection.Interface.Aliasing">SetAliases</tp:dbus-ref>
if appropriate.
<tp:rationale>
In a later specification revision, we plan to separate the concepts
of a contact's nickname as set by themselves, and the local
name for them in our contact list (a "handle" or "pet name" as
described in XEP-0165 and its references). The terminology change
from alias to nickname here is a step in that direction.
This corresponds to NMC 4.x mc_account_get_alias.
</tp:rationale>
</tp:docstring>
</property>
<property name="Parameters" tp:name-for-bindings="Parameters"
type="a{sv}" access="read">
<tp:docstring xmlns="http://www.w3.org/1999/xhtml">
<p>A map from connection manager parameter names (as in the
<tp:dbus-ref
namespace="org.freedesktop.Telepathy">ConnectionManager</tp:dbus-ref>
interface) to their values. This property includes
only those parameters that are stored for this account, and SHOULD
only include those parameters that the user has explicitly set.
</p>
<p>This property cannot be altered using Set() - use
<tp:member-ref>UpdateParameters</tp:member-ref> instead.</p>
<tp:rationale>
This avoids NMC being tied to gconf as a matter of API.
</tp:rationale>
</tp:docstring>
</property>
<method name="UpdateParameters" tp:name-for-bindings="Update_Parameters">
<tp:docstring xmlns="http://www.w3.org/1999/xhtml">
<p>Change the value of the <tp:member-ref>Parameters</tp:member-ref>
property.</p>
<p>If any of the changed parameters'
<tp:type>Conn_Mgr_Param_Flags</tp:type> include
<code>DBus_Property</code>, the change will be applied to the
corresponding D-Bus Property on the active
<tp:member-ref>Connection</tp:member-ref>, if there is one. Changes to
other parameters will not take effect until the next time the account
is disconnected and reconnected.</p>
<tp:rationale>
<p>In general, reconnecting is a destructive operation that shouldn't
happen as a side-effect. In particular, migration tools that
twiddle the settings of all accounts shouldn't cause an automatic
disconnect and reconnect.</p>
</tp:rationale>
</tp:docstring>
<tp:changed version="0.17.16">
parameters which are also D-Bus properties can and should be updated on
existing Connections
</tp:changed>
<tp:changed version="0.17.24">
return an array of the parameters that won't change until the account
is reconnected
</tp:changed>
<arg name="Set" type="a{sv}" direction="in">
<tp:docstring>
A mapping from parameter names to their values. These parameters
should be stored for future use.
</tp:docstring>
</arg>
<arg name="Unset" type="as" direction="in">
<tp:docstring>
A list of the names of parameters to be removed from the set of
stored values, allowing the default values to be used.
If the given parameters were not, in fact, stored, or even if they
do not exist at all, the account manager MUST accept this without
error.
</tp:docstring>
</arg>
<arg name="Reconnect_Required" type="as" direction="out">
<tp:docstring>
A list of the names of parameters with changes that will not take
effect until the account is reconnected (this may be empty, e.g. if
all the parameters are D-Bus properties or parameters for which the
account manager has specific support). User interfaces that
require "instant apply" semantics MAY call
<tp:member-ref>Reconnect</tp:member-ref> in response to receiving
a non-empty list.
</tp:docstring>
</arg>
<tp:possible-errors>
<tp:error name="org.freedesktop.Telepathy.Error.PermissionDenied"/>
<tp:error name="org.freedesktop.Telepathy.Error.InvalidArgument"/>
</tp:possible-errors>
</method>
<property name="AutomaticPresence" type="(uss)" access="readwrite"
tp:type="Simple_Presence" tp:name-for-bindings="Automatic_Presence">
<tp:docstring xmlns="http://www.w3.org/1999/xhtml">
<p>The presence status that this account should have if it is brought
online.</p>
<p>Setting this property MUST NOT actually change the account's
status until the next time it is (re)connected for some reason.</p>
<p>The <tp:type>Connection_Presence_Type</tp:type> in the structure
SHOULD NOT be Offline or Unset.</p>
<tp:rationale>
In ITOS2007 and ITOS2008 this is a global preference, not visible
on D-Bus (the "default presence"). "Automatic presence" better
describes when it is used.
</tp:rationale>
</tp:docstring>
</property>
<property name="ConnectAutomatically" type="b" access="readwrite"
tp:name-for-bindings="Connect_Automatically">
<tp:docstring>
If true, the account manager SHOULD attempt to put this account
online with the <tp:member-ref>AutomaticPresence</tp:member-ref>
whenever possible (in the base
Account interface this is deliberately left vague). If false,
it MUST NOT put the account online automatically in response to,
for instance, connectivity changes, but SHOULD still put the account
online with the <tp:member-ref>AutomaticPresence</tp:member-ref> if
requested by the user (for
instance, if the user tries to start a conversation using this
account).
<tp:rationale>
This approximately corresponds to NMC 4.x "enabled" and Decibel
"autoreconnect".
</tp:rationale>
</tp:docstring>
</property>
<property name="Connection" tp:name-for-bindings="Connection"
type="o" access="read">
<tp:docstring xmlns="http://www.w3.org/1999/xhtml">
<p>Either the object path of the <tp:dbus-ref
namespace="org.freedesktop.Telepathy">Connection</tp:dbus-ref> to
this account, or the special value <code>'/'</code> if there is no
connection.</p>
<p>If this object path is not '/', the Connection's well-known bus
name can be derived from this object path by removing the first '/'
and replacing subsequent '/' characters with '.'.</p>
<tp:rationale>
Object paths aren't nullable, so we can't use an empty string.
</tp:rationale>
</tp:docstring>
</property>
<property name="ConnectionStatus" type="u" access="read"
tp:name-for-bindings="Connection_Status">
<tp:docstring>
If the <tp:member-ref>Connection</tp:member-ref> property is non-empty,
the status of that connection.
If the Connection property is the empty string, this property may
either be Disconnected (indicating that the account manager is not
attempting to bring it online), or Connecting (indicating that the
account manager is attempting to connect).
The account manager is expected to set this by observing signals
from the Connection.
<tp:rationale>
If the AM is doing some sort of backoff/delay on reconnection
attempts, the account's status is conceptually "Connecting" even
though there is no Connection. This vaguely corresponds to
GetCurrentStatus in NMC 4.x.
</tp:rationale>
</tp:docstring>
</property>
<property name="ConnectionStatusReason" type="u" access="read"
tp:name-for-bindings="Connection_Status_Reason">
<tp:docstring>
The reason for the last change to
<tp:member-ref>ConnectionStatus</tp:member-ref>.
The account manager is expected to set this by observing signals
from the Connection.
<tp:rationale>
If you weren't watching the Connection at the time it failed,
you can't tell why - unless the AM can tell you. This is part
of GetCurrentStatus in NMC 4.x.
</tp:rationale>
</tp:docstring>
</property>
<property name="CurrentPresence" type="(uss)" access="read"
tp:type="Simple_Presence" tp:name-for-bindings="Current_Presence">
<tp:docstring>
The actual presence. If the connection is not online, this should be
(Connection_Presence_Type_Offline, "", "").
If the connection is online but does not support the <tp:dbus-ref
namespace="org.freedesktop.Telepathy.Connection.Interface">SimplePresence</tp:dbus-ref>
interface, this should be (Connection_Presence_Type_Unset, "", "").
The account manager is expected to set this by observing signals
from the Connection.
<tp:rationale>
This corresponds to GetPresenceActual in NMC 4.x.
</tp:rationale>
</tp:docstring>
</property>
<property name="RequestedPresence" type="(uss)" access="readwrite"
tp:type="Simple_Presence" tp:name-for-bindings="Requested_Presence">
<tp:docstring xmlns="http://www.w3.org/1999/xhtml">
<p>The requested presence for this account. When this is changed, the
account manager should attempt to manipulate the connection manager to
make <tp:member-ref>CurrentPresence</tp:member-ref> match
<tp:member-ref>RequestedPresence</tp:member-ref> as closely as
possible. It should not be saved to any sort of persistent
storage.</p>
<p>When the account manager automatically connects an account,
it must signal this by setting the RequestedPresence to the same
thing as the <tp:member-ref>AutomaticPresence</tp:member-ref>.</p>
<tp:rationale>
This corresponds to e.g. GetPresence and GetPresenceMessage
in NMC 4.x.
</tp:rationale>
</tp:docstring>
</property>
<method name="Reconnect" tp:name-for-bindings="Reconnect">
<tp:added version="0.17.24"/>
<tp:docstring xmlns="http://www.w3.org/1999/xhtml">
<p>Re-connect this account. If the account is currently disconnected
and the requested presence is offline, or if the account
is not <tp:member-ref>Enabled</tp:member-ref> or not
<tp:member-ref>Valid</tp:member-ref>, this does nothing.</p>
<p>If the account is disconnected and the requested presence is not
offline, this forces an attempt to connect with the requested
presence immediately.</p>
<p>If the account is connecting or connected, this is equivalent to
remembering the current value of
<tp:member-ref>RequestedPresence</tp:member-ref>, setting its value
to (OFFLINE, "offline", ""), waiting for the change to take effect,
then setting its value to the value that was previously
remembered.</p>
<tp:rationale>
<p>Clients desiring "instant apply" semantics for CM parameters MAY
call this method to achieve that.</p>
</tp:rationale>
<p>In particular, if the account's
<tp:member-ref>Connection</tp:member-ref> is in the Connecting
state, calling this method causes the attempt to connect to be
aborted and re-tried.</p>
<tp:rationale>
<p>This is necessary to ensure that the new parameters are
picked up.</p>
</tp:rationale>
</tp:docstring>
</method>
<property name="NormalizedName" type="s" access="read"
tp:name-for-bindings="Normalized_Name">
<tp:docstring xmlns="http://www.w3.org/1999/xhtml">
<p>The normalized user ID of the local user on this account (i.e. the
string returned when the <tp:dbus-ref
namespace="org.freedesktop.Telepathy.Connection">InspectHandles</tp:dbus-ref>
method is called on the
result of <tp:dbus-ref
namespace="org.freedesktop.Telepathy.Connection">GetSelfHandle</tp:dbus-ref>
for an active connection).</p>
<p>It is unspecified whether this user ID is globally unique.</p>
<tp:rationale>
<p>As currently implemented, IRC user IDs are only unique within
the same IRCnet. On some saner protocols, the user ID includes a
DNS name which provides global uniqueness.</p>
</tp:rationale>
<p>If this value is not known yet (which will always be the case for
accounts that have never been online), it will be an empty
string.</p>
<p>It is possible that this value will change if the connection
manager's normalization algorithm changes, although this SHOULD
be avoided.</p>
<tp:rationale>
<p>It's not always completely clear what normalization algorithm
should be used; for instance, in Gabble, we currently use JIDs,
but it would also have been reasonable to use xmpp URIs.</p>
</tp:rationale>
</tp:docstring>
</property>
<property name="HasBeenOnline" tp:name-for-bindings="Has_Been_Online"
type="b" access="read">
<tp:docstring>
If true, this account has successfully been put online at some point
in the past.
<tp:rationale>
UIs could apply a policy that the 'account' parameter can only be
edited in accounts that have never been online, or that
ConnectAutomatically cannot be set on such accounts. The account
manager should not enforce such policies, but it can expose enough
information to UIs that the UI can decide what to do.
</tp:rationale>
</tp:docstring>
</property>
</interface>
</node>
<!-- vim:set sw=2 sts=2 et ft=xml: -->
|