summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon McVittie <simon.mcvittie@collabora.co.uk>2013-09-24 19:20:17 +0100
committerSimon McVittie <simon.mcvittie@collabora.co.uk>2013-09-25 15:01:32 +0100
commit303e8583eebd3c28f0edbf53f252a56bc1c73b5f (patch)
tree6e70e78f37ac84e33d59dbb344ec667807527002
parent43a54163d71bba262af39535c98ce1547ce901ec (diff)
downloadtelepathy-haze-303e8583eebd3c28f0edbf53f252a56bc1c73b5f.tar.gz
Use the "undrafted" version of MailNotification
Bug: https://bugs.freedesktop.org/show_bug.cgi?id=69468 Reviewed-by: Guillume Desmottes <guillaume.desmottes@collabora.co.uk> [cherry-picked from next to master, no changes -smcv]
-rw-r--r--extensions/Connection_Interface_Mail_Notification.xml653
-rw-r--r--extensions/Makefile.am2
-rw-r--r--extensions/all.xml7
-rw-r--r--src/connection-mail.c54
-rw-r--r--src/connection.c8
-rw-r--r--tests/twisted/cm/protocols.py4
6 files changed, 23 insertions, 705 deletions
diff --git a/extensions/Connection_Interface_Mail_Notification.xml b/extensions/Connection_Interface_Mail_Notification.xml
deleted file mode 100644
index 35678c2..0000000
--- a/extensions/Connection_Interface_Mail_Notification.xml
+++ /dev/null
@@ -1,653 +0,0 @@
-<?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:causes-havoc="experimental">
- <tp:requires interface="org.freedesktop.Telepathy.Connection"/>
- <tp:added version="0.19.1">(as draft 1)</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
- "&lt;", and a key "percent" with value "%", this should be represented as
- two HTTP_Post_Data structures, ("less-than", "&lt;") and ("percent", "%"),
- resulting in a POST request whose request body is "less-than=&amp;lt;&amp;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>
- &lt;input type="hidden" name="less-than"&gt;&amp;lt;&lt;/input&gt;
- &lt;input type="hidden" name="percent"&gt;%&lt;/input&gt;
- </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>
- A pair (name, address) representing an e-mail address,
- such as ("Nicolas Dufresne", "nicolas.dufresne@collabora.co.uk").
- </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 &#8212; 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 &#8212; 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 &#8212; 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 &#8212; 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 &#8212; 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 &#8212; 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 &#8212; 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 &#8212; b</dt>
- <dd>If true, this mail has attachments.</dd>
-
- <dt>subject &#8212; s</dt>
- <dd>
- The subject of the message. This MUST be encoded in UTF-8.
- </dd>
-
- <dt>content-type &#8212; 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 &#8212; 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 &#8212; s</dt>
- <dd>
- The body of the message, possibly truncated, encoded as appropriate
- for "content-type".
- </dd>
-
- <dt>folder &#8212; 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>
- </tp:docstring>
- </property>
-
- <property name="UnreadMails" type="aa{sv}" tp:type="Mail[]"
- tp:name-for-bindings="Unread_Mails" access="read">
- <tp:docstring>
- A 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.
- </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="Subscribe"
- tp:name-for-bindings="Subscribe">
- <tp:docstring>
- <p>This method subscribes a client to the notification interface. This
- MUST be called by clients before using this interface.</p>
-
- <p>The Connection tracks a subscription count (like a refcount) for
- each unique bus name that has called Subscribe(). When a client calls
- Unsubscribe(), it releases one "reference". If a client exits
- (or crashes), the Connection releases all "references" held on its
- behalf.</p>
-
- <tp:rationale>
- <p>The reference count imposed on the subscription simplifies
- implementation of client running in the same process
- (e.g. plug-ins): two plug-ins interested in mail notification can
- call Subscribe and Unsubscribe independently without interfering
- with each other.</p>
-
- <p>This method exists to reduce memory and network overhead when
- there is no active subscription. An example of a protocol that
- benefits from this method is the Google XMPP Mail Notification
- extension: in this protocol, the CM receives a notification
- that something has changed, but to get more information, the CM
- must request this information. Knowing that nobody is currently
- interested in this information, the CM can avoid generating
- useless network traffic. Similarly, the CM may free
- the list of unread messages to reduce memory overhead.</p>
- </tp:rationale>
-
- </tp:docstring>
- <tp:possible-errors>
- <tp:error name="org.freedesktop.Telepathy.Error.Disconnected"/>
- <tp:error name="org.freedesktop.Telepathy.Error.NotImplemented"/>
- </tp:possible-errors>
- </method>
-
- <method name="Unsubscribe"
- tp:name-for-bindings="Unsubscribe">
- <tp:docstring>
- This method unsubscribes a client from the notification interface.
- This SHOULD be called by each client that has successfully called
- Subscribe when it no longer needs the mail notification interface.
-
- <tp:rationale>
- See <tp:member-ref>Subscribe</tp:member-ref> for rationale.
- </tp:rationale>
- </tp:docstring>
- <tp:possible-errors>
- <tp:error name="org.freedesktop.Telepathy.Error.NotAvailable">
- <tp:docstring>
- Raised if the client calling this method has no references to
- release.
- </tp:docstring>
- </tp:error>
- <tp:error name="org.freedesktop.Telepathy.Error.NotImplemented"/>
- </tp:possible-errors>
- </method>
-
- <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 using the
- <tp:member-ref>Subscribe</tp:member-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:member-ref>Unsubscribe</tp:member-ref> to release resources in
- the CM.</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: -->
-
diff --git a/extensions/Makefile.am b/extensions/Makefile.am
index 32c9640..239c599 100644
--- a/extensions/Makefile.am
+++ b/extensions/Makefile.am
@@ -2,7 +2,7 @@ tools_dir = $(top_srcdir)/tools
EXTRA_DIST = \
all.xml \
- Connection_Interface_Mail_Notification.xml
+ $(NULL)
noinst_LTLIBRARIES = libhaze-extensions.la
diff --git a/extensions/all.xml b/extensions/all.xml
index 708cc7d..66b4a89 100644
--- a/extensions/all.xml
+++ b/extensions/all.xml
@@ -22,11 +22,6 @@ License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA</p>
</tp:license>
-<tp:generic-types>
- <tp:external-type name="Unix_Timestamp64" type="t"
- from="Telepathy specification"/>
-</tp:generic-types>
-
-<xi:include href="Connection_Interface_Mail_Notification.xml"/>
+<!-- currently empty -->
</tp:spec>
diff --git a/src/connection-mail.c b/src/connection-mail.c
index 0e663ca..767ee2d 100644
--- a/src/connection-mail.c
+++ b/src/connection-mail.c
@@ -22,6 +22,7 @@
#include "extensions/extensions.h"
#include <telepathy-glib/telepathy-glib.h>
+#include <telepathy-glib/telepathy-glib-dbus.h>
#include "connection.h"
#include "connection-mail.h"
@@ -40,32 +41,9 @@ enum
static GPtrArray empty_array = { 0 };
-
-static void
-haze_connection_mail_subscribe (
- HazeSvcConnectionInterfaceMailNotification *iface,
- DBusGMethodInvocation *context)
-{
- /* Nothing do do, no resources attached to mail notification */
- haze_svc_connection_interface_mail_notification_return_from_subscribe (
- context);
-}
-
-
-static void
-haze_connection_mail_unsubscribe (
- HazeSvcConnectionInterfaceMailNotification *iface,
- DBusGMethodInvocation *context)
-{
- /* Nothing do do, no resources attached to mail notification */
- haze_svc_connection_interface_mail_notification_return_from_unsubscribe (
- context);
-}
-
-
static void
haze_connection_mail_request_inbox_url (
- HazeSvcConnectionInterfaceMailNotification *iface,
+ TpSvcConnectionInterfaceMailNotification *iface,
DBusGMethodInvocation *context)
{
GError e = {TP_ERROR, TP_ERROR_NOT_IMPLEMENTED,
@@ -76,7 +54,7 @@ haze_connection_mail_request_inbox_url (
static void
haze_connection_mail_request_mail_url (
- HazeSvcConnectionInterfaceMailNotification *iface,
+ TpSvcConnectionInterfaceMailNotification *iface,
const gchar *in_id,
const GValue *in_url_data,
DBusGMethodInvocation *context)
@@ -93,11 +71,11 @@ haze_connection_mail_request_mail_url (
result = tp_value_array_build (3,
G_TYPE_STRING, g_value_get_string (in_url_data),
- G_TYPE_UINT, HAZE_HTTP_METHOD_GET,
- HAZE_ARRAY_TYPE_HTTP_POST_DATA_LIST, &empty_array,
+ G_TYPE_UINT, TP_HTTP_METHOD_GET,
+ TP_ARRAY_TYPE_HTTP_POST_DATA_LIST, &empty_array,
G_TYPE_INVALID);
- haze_svc_connection_interface_mail_notification_return_from_request_inbox_url (
+ tp_svc_connection_interface_mail_notification_return_from_request_inbox_url (
context, result);
g_value_array_free (result);
@@ -115,12 +93,10 @@ void
haze_connection_mail_iface_init (gpointer g_iface,
gpointer iface_data)
{
- HazeSvcConnectionInterfaceMailNotificationClass *klass = g_iface;
+ TpSvcConnectionInterfaceMailNotificationClass *klass = g_iface;
-#define IMPLEMENT(x) haze_svc_connection_interface_mail_notification_implement_##x (\
+#define IMPLEMENT(x) tp_svc_connection_interface_mail_notification_implement_##x (\
klass, haze_connection_mail_##x)
- IMPLEMENT(subscribe);
- IMPLEMENT(unsubscribe);
IMPLEMENT(request_inbox_url);
IMPLEMENT(request_mail_url);
#undef IMPLEMENT
@@ -180,8 +156,8 @@ haze_connection_mail_properties_getter (GObject *object,
if (name == prop_quarks[PROP_MAIL_NOTIFICATION_FLAGS])
g_value_set_uint (value,
- HAZE_MAIL_NOTIFICATION_FLAG_EMITS_MAILS_RECEIVED
- | HAZE_MAIL_NOTIFICATION_FLAG_SUPPORTS_REQUEST_MAIL_URL);
+ TP_MAIL_NOTIFICATION_FLAG_EMITS_MAILS_RECEIVED
+ | TP_MAIL_NOTIFICATION_FLAG_SUPPORTS_REQUEST_MAIL_URL);
else if (name == prop_quarks[PROP_UNREAD_MAIL_COUNT])
g_value_set_uint (value, 0);
else if (name == prop_quarks[PROP_UNREAD_MAILS])
@@ -216,7 +192,7 @@ static GPtrArray *
wrap_mail_address (const char *name_str, const char *addr_str)
{
GPtrArray *addr_array;
- GType addr_type = HAZE_STRUCT_TYPE_MAIL_ADDRESS;
+ GType addr_type = TP_STRUCT_TYPE_MAIL_ADDRESS;
GValue addr = {0};
addr_array = g_ptr_array_new ();
@@ -246,8 +222,8 @@ haze_connection_mail_notify_emails (PurpleConnection *pc,
const char **urls)
{
GPtrArray *mails;
- HazeSvcConnectionInterfaceMailNotification *conn =
- HAZE_SVC_CONNECTION_INTERFACE_MAIL_NOTIFICATION (
+ TpSvcConnectionInterfaceMailNotification *conn =
+ TP_SVC_CONNECTION_INTERFACE_MAIL_NOTIFICATION (
ACCOUNT_GET_TP_BASE_CONNECTION (
purple_connection_get_account (pc)));
@@ -280,7 +256,7 @@ haze_connection_mail_notify_emails (PurpleConnection *pc,
/* Filter out any aberations */
if (from && to && subject && url)
{
- GType addr_list_type = HAZE_ARRAY_TYPE_MAIL_ADDRESS_LIST;
+ GType addr_list_type = TP_ARRAY_TYPE_MAIL_ADDRESS_LIST;
GPtrArray *senders, *recipients;
GHashTable *mail;
@@ -316,7 +292,7 @@ haze_connection_mail_notify_emails (PurpleConnection *pc,
}
}
- haze_svc_connection_interface_mail_notification_emit_mails_received (
+ tp_svc_connection_interface_mail_notification_emit_mails_received (
conn, mails);
g_ptr_array_unref (mails);
diff --git a/src/connection.c b/src/connection.c
index 8e1c0fc..10da219 100644
--- a/src/connection.c
+++ b/src/connection.c
@@ -79,7 +79,7 @@ G_DEFINE_TYPE_WITH_CODE(HazeConnection,
tp_base_contact_list_mixin_groups_iface_init);
G_IMPLEMENT_INTERFACE (TP_TYPE_SVC_CONNECTION_INTERFACE_CONTACT_BLOCKING,
tp_base_contact_list_mixin_blocking_iface_init);
- G_IMPLEMENT_INTERFACE (HAZE_TYPE_SVC_CONNECTION_INTERFACE_MAIL_NOTIFICATION,
+ G_IMPLEMENT_INTERFACE (TP_TYPE_SVC_CONNECTION_INTERFACE_MAIL_NOTIFICATION,
haze_connection_mail_iface_init);
);
@@ -87,7 +87,7 @@ static const gchar * implemented_interfaces[] = {
/* Conditionally present */
TP_IFACE_CONNECTION_INTERFACE_AVATARS,
- HAZE_IFACE_CONNECTION_INTERFACE_MAIL_NOTIFICATION,
+ TP_IFACE_CONNECTION_INTERFACE_MAIL_NOTIFICATION,
TP_IFACE_CONNECTION_INTERFACE_CONTACT_BLOCKING,
# define HAZE_NUM_CONDITIONAL_INTERFACES 3
@@ -205,7 +205,7 @@ add_optional_connection_interfaces (GPtrArray *ifaces,
if (protocol_info_supports_mail_notification (prpl_info))
g_ptr_array_add (ifaces,
- HAZE_IFACE_CONNECTION_INTERFACE_MAIL_NOTIFICATION);
+ TP_IFACE_CONNECTION_INTERFACE_MAIL_NOTIFICATION);
}
static void
@@ -836,7 +836,7 @@ haze_connection_class_init (HazeConnectionClass *klass)
haze_connection_avatars_properties_getter,
NULL,
NULL }, /* initialized a bit later */
- { HAZE_IFACE_CONNECTION_INTERFACE_MAIL_NOTIFICATION,
+ { TP_IFACE_CONNECTION_INTERFACE_MAIL_NOTIFICATION,
haze_connection_mail_properties_getter,
NULL,
mail_props,
diff --git a/tests/twisted/cm/protocols.py b/tests/twisted/cm/protocols.py
index 1e8d3a7..2bd835b 100644
--- a/tests/twisted/cm/protocols.py
+++ b/tests/twisted/cm/protocols.py
@@ -105,7 +105,7 @@ def test(q, bus, conn, stream):
assertDoesNotContain(cs.CONN_IFACE_AVATARS, flat_props['ConnectionInterfaces'])
assertDoesNotContain(cs.CONN_IFACE_CONTACT_BLOCKING, flat_props['ConnectionInterfaces'])
- assertDoesNotContain(cs.CONN_IFACE_MAIL_NOTIFICATION + '.DRAFT', flat_props['ConnectionInterfaces'])
+ assertDoesNotContain(cs.CONN_IFACE_MAIL_NOTIFICATION, flat_props['ConnectionInterfaces'])
# Avatar not supported
assertEquals(0, protocol_avatar_props['MaximumAvatarBytes'])
@@ -164,7 +164,7 @@ def test(q, bus, conn, stream):
assertContains(cs.CONN_IFACE_AVATARS, flat_props['ConnectionInterfaces'])
assertContains(cs.CONN_IFACE_CONTACT_BLOCKING, flat_props['ConnectionInterfaces'])
- assertContains(cs.CONN_IFACE_MAIL_NOTIFICATION + '.DRAFT', flat_props['ConnectionInterfaces'])
+ assertContains(cs.CONN_IFACE_MAIL_NOTIFICATION, flat_props['ConnectionInterfaces'])
# libpurple currently says there's no max size
assertEquals(0, protocol_avatar_props['MaximumAvatarBytes'])