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
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
|
<?xml version="1.0" ?>
<node name="/Connection_Interface_Mail_Notification"
xmlns:tp="http://telepathy.freedesktop.org/wiki/DbusSpec#extensions-v0"
>
<tp:copyright> Copyright (C) 2007 Collabora Limited </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.Connection.Interface.MailNotification.DRAFT">
<tp:requires interface="org.freedesktop.Telepathy.Connection"/>
<tp:added version="0.21.UNRELEASED">(as stable API)</tp:added>
<tp:flags name="Mail_Notification_Flags" value-prefix="Mail_Notification_Flag" type="u" >
<tp:flag suffix="Supports_Unread_Mail_Count" value="1">
<tp:docstring>
This Connection provides the number of unread e-mails (or e-mail
threads) in the main folder of your e-mail account, as the
<tp:member-ref>UnreadMailCount</tp:member-ref> property. The
connection manager will update this value by emitting the
<tp:member-ref>UnreadMailsChanged</tp:member-ref> signal.
</tp:docstring>
</tp:flag>
<tp:flag suffix="Supports_Unread_Mails" value="2">
<tp:docstring>
This Connection provides a detailed list of unread e-mails, as the
<tp:member-ref>UnreadMails</tp:member-ref> property. If this flag
is set, <tt>Supports_Unread_Mail_Count</tt> MUST be set, and
<tt>Emits_Mails_Received</tt> MUST NOT be set.
The Connection will update the list by emitting the
<tp:member-ref>UnreadMailsChanged</tp:member-ref> signals.
</tp:docstring>
</tp:flag>
<tp:flag suffix="Emits_Mails_Received" value="4">
<tp:docstring>
This Connection emits the <tp:member-ref>MailsReceived</tp:member-ref>
signal, which provides details about newly arrived e-mails but does
not maintain their read/unread status afterwards. This flag MUST NOT
be combined with <tt>Supports_Unread_Mails</tt>.
</tp:docstring>
</tp:flag>
<tp:flag suffix="Supports_Request_Inbox_URL" value="8">
<tp:docstring>
This Connection can provide a URL (with optional POST data) to
open the the inbox of the e-mail account in a web-based client, via
the <tp:member-ref>RequestInboxURL</tp:member-ref> method.
</tp:docstring>
</tp:flag>
<tp:flag suffix="Supports_Request_Mail_URL" value="16">
<tp:docstring xmlns="http://www.w3.org/1999/xhtml">
<p>This Connection can provide a URL (with optional POST data) to open
a specific mail in a web-based client, via the
<tp:member-ref>RequestMailURL</tp:member-ref> method. This feature
is not useful unless either Emits_Mails_Received or
Supports_Unread_Mails is set.</p>
<p>If this flag is not set, clients SHOULD fall back to using
<tp:member-ref>RequestInboxURL</tp:member-ref> if available.</p>
</tp:docstring>
</tp:flag>
<tp:flag suffix="Thread_Based" value="32">
<tp:docstring xmlns="http://www.w3.org/1999/xhtml">
<p>Each <tp:type>Mail</tp:type> represents a thread of e-mails, which
MAY have more than one sender.</p>
<tp:rationale>
<p>Google Talk notifies users about new mail in terms of unread
threads, rather than unread e-mails.</p>
</tp:rationale>
</tp:docstring>
</tp:flag>
<tp:docstring>
<p>Flags representing capabilities provided by a connection manager.
Those values can be used as bitfield. Some flags depend on, or
conflict with, each other.</p>
<p>Connections SHOULD implement as many of these features as the
underlying protocol allows, preferring to implement
Supports_Unread_Mails instead of Emits_Mails_Received if both are
possible.</p>
</tp:docstring>
</tp:flags>
<tp:enum name="HTTP_Method" type="u">
<tp:enumvalue suffix="Get" value="0">
<tp:docstring>
Use the GET method when opening the URL.
</tp:docstring>
</tp:enumvalue>
<tp:enumvalue suffix="Post" value="1">
<tp:docstring>
Use the POST method when opening the URL. Refer to
<tp:type>HTTP_Post_Data</tp:type> for more details.
</tp:docstring>
</tp:enumvalue>
<tp:docstring>
The HTTP Method with which to request a URL.
</tp:docstring>
</tp:enum>
<tp:struct name="HTTP_Post_Data" array-name="HTTP_Post_Data_List">
<tp:docstring xmlns="http://www.w3.org/1999/xhtml">
<p>A pair (key, value) representing POST data compatible with the
application/x-www-form-urlencoded MIME type. The strings MUST be
valid UTF-8 strings, and the characters used in the key MUST obey
the requirements of the
<a href="http://www.w3.org/TR/html401/types.html#type-cdata">
HTML CDATA type</a>. The value MUST NOT be
encoded with HTML entities.</p>
<p>For example, if the POST data should contain a key "less-than" with value
"<", and a key "percent" with value "%", this should be represented as
two HTTP_Post_Data structures, ("less-than", "<") and ("percent", "%"),
resulting in a POST request whose request body is "less-than=&lt;&percent=%25".
If a client passes this to a browser by writing it into an HTML form, it
could do so by representing it as:</p>
<pre>
<input type="hidden" name="less-than">&lt;</input>
<input type="hidden" name="percent">%</input>
</pre>
<tp:rationale>
<p>This data can be used to generate a HTML file that will
automatically load the URL with appropriate POST data, in which case
the client MUST convert any characters that are special within HTML
into HTML entities. Alternatively, it can be used in an API that will
instruct the browser how to load the URL (like the Netscape Plug-in
API), in which case the client MUST escape
<a href="http://www.ietf.org/rfc/rfc1738.txt">characters that are
reserved in URLs</a>, if appropriate for that API.</p>
<p>An array of pairs is used instead of a map from keys to values,
because it's valid to repeat keys in both HTML and
x-www-form-urlencoded data.</p>
</tp:rationale>
</tp:docstring>
<tp:member type="s" name="Key">
<tp:docstring>The key, corresponding to a HTML control
name</tp:docstring>
</tp:member>
<tp:member type="s" name="Value">
<tp:docstring>The value</tp:docstring>
</tp:member>
</tp:struct>
<tp:struct name="Mail_Address" array-name="Mail_Address_List">
<tp:docstring xmlns="http://www.w3.org/1999/xhtml">
<p>A pair (name, address) representing an e-mail address,
such as ("Nicolas Dufresne", "nicolas.dufresne@collabora.co.uk"). At
least one of name and address MUST be provided. A missing element will
be represented by the empty string.</p>
<tp:rationale>
<p>The CM should provide as much information as possible, but not all
protocols provide both the displayed name and the address. (If a
protocol doesn't provide either, it should omit the appropriate
field from the <tp:type>Mail</tp:type> entirely.)</p>
</tp:rationale>
</tp:docstring>
<tp:member type="s" name="Name">
<tp:docstring>The displayed name corresponding to the e-mail
address</tp:docstring>
</tp:member>
<tp:member type="s" name="Address">
<tp:docstring>The actual e-mail address</tp:docstring>
</tp:member>
</tp:struct>
<tp:struct name="Mail_URL">
<tp:docstring xmlns="http://www.w3.org/1999/xhtml">
<p>A structure containing the required information to open a web-based
e-mail UI, without needing re-authentication (if possible).</p>
<p>Because the URL and POST data frequently contain short-lived
credential tokens, a new URL should be requested (by calling one of
the methods that returns a Mail_URL) for each visit to the web-based
UI, and the URL should be visited soon after it is returned.</p>
</tp:docstring>
<tp:member type="s" name="URL">
<tp:docstring>
The URL to which to send a request.
</tp:docstring>
</tp:member>
<tp:member type="u" name="Method" tp:type="HTTP_Method">
<tp:docstring>
The HTTP method of the request.
</tp:docstring>
</tp:member>
<tp:member type="a(ss)" name="Post_Data" tp:type="HTTP_Post_Data[]">
<tp:docstring>
An array of name-value pairs containing the POST data to use when
opening the URL. This MUST be an empty array if the Method is not
POST.
</tp:docstring>
</tp:member>
</tp:struct>
<tp:mapping name="Mail" array-name="Mail_List">
<tp:docstring>
An extensible map representing a mail, or (on protocols where
<tt>Thread_Based</tt> appears in
<tp:member-ref>MailNotificationFlags</tp:member-ref>) a thread of
mails. All keys are optional where not otherwise stated; however, at
least one of "senders" and "subject" must be included.
</tp:docstring>
<tp:member type="s" name="Key">
<tp:docstring>
<p>A key providing information about the mail or thread. Well-known
keys are as follows:</p>
<dl>
<dt>id — s</dt>
<dd>
<p>A unique ID for this e-mail. CMs with
<tt>Supports_Unread_Mails</tt> set in
<tp:member-ref>MailNotificationFlags</tp:member-ref> MUST provide
this key in each <tp:type>Mail</tp:type>.</p>
<p>If provided, the ID SHOULD be unique to a Mail at least until
that mail is removed with the
<tp:member-ref>UnreadMailsChanged</tp:member-ref> signal
(in protocols with <tt>Supports_Unread_Emails</tt>), or
unique for the duration of a session (otherwise).</p>
<tp:rationale>
<p>In protocols with Supports_Unread_Mails, this key is used to
indicate which mail was removed. In protocols without that
feature, it's impossible to tell when a mail has been removed
(and hence how long the identifier will remain valid for use
with <tp:member-ref>RequestMailURL</tp:member-ref>).</p>
</tp:rationale>
</dd>
<dt>url-data — any type</dt>
<dd>An opaque identifier (typically a string or list of strings)
provided to the Connection when calling
<tp:member-ref>RequestMailURL</tp:member-ref>,
containing information used by the Connection to build the URL.
</dd>
<dt>senders — a(ss) (<tp:type>Mail_Address</tp:type>)</dt>
<dd>
An array of sender display name and e-mail address pairs. Note that
only e-mails represented as a thread can have multiple senders.
</dd>
<dt>to-addresses — a(ss) (<tp:type>Mail_Address</tp:type>)</dt>
<dd>
An array of display name and e-mail address pairs representing
the recipients.
</dd>
<dt>cc-addresses — a(ss) (<tp:type>Mail_Address</tp:type>)</dt>
<dd>
An array of display name and e-mail address pairs representing
the carbon-copy recipients.
</dd>
<dt>sent-timestamp — x (<tp:type>Unix_Timestamp64</tp:type>)</dt>
<dd>A UNIX timestamp indicating when the message was sent, or for
a thread, when the most recent message was sent.
</dd>
<dt>received-timestamp — x (<tp:type>Unix_Timestamp64</tp:type>)</dt>
<dd>A UNIX timestamp indicating when the message was received, or for
a thread, when the most recent message was received.
</dd>
<dt>has-attachments — b</dt>
<dd>If true, this mail has attachments.</dd>
<dt>subject — s</dt>
<dd>
The subject of the message. This MUST be encoded in UTF-8.
</dd>
<dt>content-type — s</dt>
<dd>
<p>The MIME type of the message content. Two types are currently
supported: "text/plain" for plain text, and "text/html" for a
HTML document. If omitted, "text/plain" MUST be assumed.
Regardless of MIME type, the content MUST be valid UTF-8 (which
may require that the Connection transcodes it from a legacy
encoding).</p>
<tp:rationale>
<p>All strings on D-Bus must be UTF-8.</p>
</tp:rationale>
</dd>
<dt>truncated — b</dt>
<dd>
If true, the content is only a partial message; if false or
omitted, the content is the entire message.
</dd>
<dt>content — s</dt>
<dd>
The body of the message, possibly truncated, encoded as appropriate
for "content-type".
</dd>
<dt>folder — s</dt>
<dd>
The name of the folder containing this e-mails.
If omitted, the inbox SHOULD be assumed.
</dd>
</dl>
</tp:docstring>
</tp:member>
<tp:member name="Value" type="v">
<tp:docstring>The value, of whatever type is appropriate for the
key.</tp:docstring>
</tp:member>
</tp:mapping>
<property name="MailNotificationFlags" type="u" access="read"
tp:type="Mail_Notification_Flags"
tp:name-for-bindings="Mail_Notification_Flags">
<tp:docstring>
Integer representing the bitwise-OR of supported features for e-mails
notification on this server. This property MUST NOT change after the
Connection becomes CONNECTED.
<tp:rationale>
This property indicates the behavior and availability
of the other properties and signals within this interface. A
connection manager that cannot at least set one of the flags
in the <tp:type>Mail_Notification_Flags</tp:type>
SHOULD NOT provide this interface.
</tp:rationale>
</tp:docstring>
</property>
<property name="UnreadMailCount" type="u" access="read"
tp:name-for-bindings="Unread_Mail_Count">
<tp:docstring xmlns="http://www.w3.org/1999/xhtml">
<p>The number of unread messages in the Inbox. Change notification is
via <tp:member-ref>UnreadMailsChanged</tp:member-ref>.</p>
<p>This property is only useful if <tt>Supports_Unread_Mail_Count</tt>
is set in the <tp:member-ref>MailNotificationFlags</tp:member-ref>;
otherwise, it MUST be zero.</p>
<p>If <tt>Thread_Based</tt> appears in the
<tp:member-ref>MailNotificationFlags</tp:member-ref>, this property
counts the number of threads, not the number of mails.</p>
<p>Note that this count MAY be bigger than the number of items in
<tp:member-ref>UnreadMails</tp:member-ref>. See
<tp:member-ref>UnreadMails</tp:member-ref> for more details.</p>
</tp:docstring>
</property>
<property name="UnreadMails" type="aa{sv}" tp:type="Mail[]"
tp:name-for-bindings="Unread_Mails" access="read">
<tp:docstring>
<p>An array of unread <tp:type>Mail</tp:type>s. Change notification is
via <tp:member-ref>UnreadMailsChanged</tp:member-ref>. This property
is only useful if <tt>Supports_Unread_Mails</tt> is set in
<tp:member-ref>MailNotificationFlags</tp:member-ref>; otherwise, it
MUST be an empty list.</p>
<p>The array size MAY be shorter than
<tp:member-ref>UnreadMailCount</tp:member-ref>.</p>
<tp:rationale>
<p>Some servers may limits the amount of detailed e-mails sent. This
can significantly reduce the network traffic for large inbox. For
this reason, it is normal that
<tp:member-ref>UnreadMailCount</tp:member-ref> be bigger or equal
to the size of this array.</p>
</tp:rationale>
</tp:docstring>
</property>
<property name="MailAddress" type="s"
tp:name-for-bindings="Mail_Address" access="read">
<tp:docstring>
A string representing the e-mail address of the account. The CMs MUST
provide this information.
<tp:rationale>
In close integration of MailNotification with other e-mail services,
the e-mail address can be used has a unique identifier for the
account. Possible integration could be between Telepathy and
Evolution where the e-mail address is the common information in
both interfaces.
</tp:rationale>
</tp:docstring>
</property>
<signal name="MailsReceived" tp:name-for-bindings="Mails_Received">
<arg name="Mails" type="aa{sv}" tp:type="Mail[]">
<tp:docstring xmlns="http://www.w3.org/1999/xhtml">
<p>An array of <tp:type>Mail</tp:type>s. Those e-mail MUST NOT have
the "id" key.</p>
<tp:rationale>
<p>On connections that emit this signal, it's impossible to tell
when a mail has been removed, and hence when "id" has become
invalid.</p>
</tp:rationale>
</tp:docstring>
</arg>
<tp:docstring>
Emitted when new e-mails messages arrive to the inbox associated with
this connection. This signal is used for protocols that are not able
to maintain the <tp:member-ref>UnreadMails</tp:member-ref> list, but
do provide real-time notification about newly arrived e-mails. It MUST
NOT be emitted unless <tt>Emits_Mails_Received</tt> is set in
<tp:member-ref>MailNotificationFlags</tp:member-ref>.
</tp:docstring>
</signal>
<signal name="UnreadMailsChanged"
tp:name-for-bindings="Unread_Mails_Changed">
<arg name="Count" type="u">
<tp:docstring>
Number of unread messages in the inbox (the new value of
<tp:member-ref>UnreadMailCount</tp:member-ref>).
</tp:docstring>
</arg>
<arg name="Mails_Added" type="aa{sv}" tp:type="Mail[]">
<tp:docstring xmlns="http://www.w3.org/1999/xhtml">
<p>A list of <tp:type>Mail</tp:type> that are being added or updated
in <tp:member-ref>UnreadMails</tp:member-ref>.</p>
<tp:rationale>
<p>Mails may be updated when the URL information (URL and POST data)
have changed, or senders were added or removed from an e-mail
thread.</p>
</tp:rationale>
<p>If the <tt>Supports_Unread_Mails</tt> flag is not set, this list
MUST be empty, even if Count has increased.</p>
</tp:docstring>
</arg>
<arg name="Mails_Removed" type="as">
<tp:docstring>
A list of e-mail IDs that are being removed from
<tp:member-ref>UnreadMails</tp:member-ref>.
If the <tt>Supports_Unread_Mails</tt> flag is not set, this list
MUST be empty, even if Count has decreased.
</tp:docstring>
</arg>
<tp:docstring xmlns="http://www.w3.org/1999/xhtml">
<p>Emitted when <tp:member-ref>UnreadMails</tp:member-ref> or
<tp:member-ref>UnreadMailCount</tp:member-ref> have changed. It MUST
NOT be emited if <tt>Supports_Unread_Mail_Count</tt> flag is not set
in <tp:member-ref>MailNotificationFlags</tp:member-ref>.</p>
<p><tt>Mails_Added</tt> and
<tt>Mails_Removed</tt> MUST be empty if the
<tt>Supports_Unread_Mails</tt> flag is not set.</p>
</tp:docstring>
</signal>
<method name="RequestInboxURL"
tp:name-for-bindings="Request_Inbox_URL">
<arg direction="out" name="URL" type="(sua(ss))" tp:type="Mail_URL" >
<tp:docstring>
A struture containing a URL and optional additional data to open a
webmail client, without re-authentication if possible.
</tp:docstring>
</arg>
<tp:docstring>
This method creates and returns a URL and an optional POST data that
allow opening the Inbox folder of a webmail account. This URL MAY
contain tokens with a short lifetime, so clients SHOULD request a new
URL for each visit to the webmail interface. This method is implemented
only if the <tt>Supports_Request_Inbox_URL</tt> flag is set in
<tp:member-ref>MailNotificationFlags</tp:member-ref>.
<tp:rationale>
We are not using properties here because the tokens are unsuitable
for sharing between clients, and network round-trips may be required
to obtain the information that leads to authentication free webmail
access.
</tp:rationale>
</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.NotImplemented"/>
</tp:possible-errors>
</method>
<method name="RequestMailURL"
tp:name-for-bindings="Request_Mail_URL">
<arg direction="in" name="ID" type="s">
<tp:docstring>
The mail's <tt>id</tt> as found in the <tp:type>Mail</tp:type>
structure, or the empty string if no <tt>id</tt> key was provided.
</tp:docstring>
</arg>
<arg direction="in" name="URL_Data" type="v">
<tp:docstring>
Whatever <tt>url-data</tt> was found in the <tp:type>Mail</tp:type>
structure, or the boolean value False (D-Bus type 'b') if no
<tt>url-data</tt> was provided in the Mail.
</tp:docstring>
</arg>
<arg direction="out" name="URL" type="(sua(ss))" tp:type="Mail_URL" >
<tp:docstring>
A struture that contains a URL and optional additional data to open a
webmail client, without re-authentication if possible.
</tp:docstring>
</arg>
<tp:docstring>
This method creates and returns a URL and optional POST data that
allow opening a specific mail in a webmail interface. This
method is implemented only if <tt>Supports_Request_Mail_URL</tt> flag
is set in <tp:member-ref>MailNotificationFlags</tp:member-ref>.
<tp:rationale>
See <tp:member-ref>RequestInboxURL</tp:member-ref> for design
rationale.
</tp:rationale>
</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.NotImplemented"/>
<tp:error name="org.freedesktop.Telepathy.Error.InvalidArgument"/>
</tp:possible-errors>
</method>
<tp:docstring xmlns="http://www.w3.org/1999/xhtml">
<p>An interface to support receiving notifications about a e-mail
account associated with this connection.</p>
<p>In protocols where this is possible, this interface also allows the
connection manager to provide the necessary information for clients
to open a web-based mail client without having to re-authenticate.</p>
<p>To use this interface, a client MUST first subscribe by passing the
name of this interface to the <tp:dbus-ref
namespace="org.freedesktop.Telepathy"
>Connection.AddClientInterest</tp:dbus-ref> method. The subscription
mechanic aims at reducing network traffic and memory footprint in the
situation where nobody is currently interesting in provided
information. When done with this interface, clients SHOULD call
<tp:dbus-ref namespace="org.freedesktop.Telepathy"
>Connection.RemoveClientInterest</tp:dbus-ref> to allow the CM to
release resources.</p>
<p>Protocols have various different levels of Mail Notification support.
To describe the level of support, the interface provides a property
called <tp:member-ref>MailNotificationFlags</tp:member-ref>.
Not all combinations are valid; protocols can be divided into four
categories as follows.</p>
<p>Connections to the most capable protocols, such as Google's XMPP Mail
Notification extension, have the Supports_Unread_Mails flag (this
implies that they must also have Supports_Unread_Mail_Count, but not
Emits_Mails_Received). On these connections, clients
requiring change notification MUST monitor the
<tp:member-ref>UnreadMailsChanged</tp:member-ref> signal, and
either recover the initial state from the
<tp:member-ref>UnreadMails</tp:member-ref> property (if they require
details other than the number of mails) or the
<tp:member-ref>UnreadMailCount</tp:member-ref> property (if they
are only interested in the number of unread mails). The
<tp:member-ref>MailsReceived</tp:member-ref> signal is never emitted
on these connections, so clients that will display a short-term
notification for each new mail MUST do so in response to emission of
the <tp:member-ref>UnreadMailsChanged</tp:member-ref> signal.</p>
<p>The most common situation, seen in protocols like MSN and Yahoo, is
that the number of unread mails is provided and kept up-to-date,
and a separate notification is emitted with some details of each new
mail. This is a combination of the following two features, and clients
SHOULD implement one or both as appropriate for their requirements.</p>
<p>On protocols that have the Emits_Mails_Received flag (which implies
that they do not have Supports_Unread_Mails), the CM does not keep
track of any mails; it simply emits a notification whenever new mail
arrives. Those events may be used for short term display (like a
notification popup) to inform the user. No protocol is known to support
only this feature, but it is useful for integration with libraries that
that do not implement tracking of the number of mails. Clients
requiring these notifications MUST monitor the
<tp:member-ref>MailsReceived</tp:member-ref> signal on any connections
with this flag.</p>
<p>On protocols that have the Supports_Unread_Mail_Count flag but not
the Supports_Unread_Mails flag, clients cannot display complete
details of unread email, but can display an up-to-date count of the
<em>number</em> of unread mails. To do this, they must monitor the
<tp:member-ref>UnreadMailsChanged</tp:member-ref> signal, and
retrieve the initial state from the
<tp:member-ref>UnreadMailCount</tp:member-ref> property.</p>
<p>
Orthogonal features described by the
<tp:member-ref>MailNotificationFlags</tp:member-ref> property include the
RequestSomethingURL methods, which are used to obtain URLs allowing
clients to open a webmail client. Connections SHOULD support as many
of these methods as possible.</p>
</tp:docstring>
</interface>
</node>
<!-- vim:set sw=2 sts=2 et ft=xml: -->
|