<?xml version="1.0" ?>
<node name="/Protocol_Interface_Presence"
  xmlns:tp="http://telepathy.freedesktop.org/wiki/DbusSpec#extensions-v0">

  <tp:copyright>Copyright © 2009-2010 Collabora Ltd.</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.Protocol.Interface.Presence">
    <tp:added version="0.21.3">(as stable API)</tp:added>
    <tp:requires interface="org.freedesktop.Telepathy.Protocol"/>

    <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
      <p>An interface for protocols where it might be possible to set the
        user's presence, and the supported presence types can be predicted
        before connecting.</p>

      <tp:rationale>
        <p>This allows UIs to show or hide presence types that aren't
          always supported, such as "invisible", while not online.</p>
      </tp:rationale>

      <p>The properties on this interface SHOULD be cached in the
        <code>.manager</code> file, in the
        <code>[Protocol <em>proto</em>]</code>
        group. For each status <em>s</em> in
        <tp:member-ref>Statuses</tp:member-ref>, that group should
        contain a key of the form <code>status-<em>s</em></code> whose value
        is the <tp:type>Connection_Presence_Type</tp:type> as an ASCII
        decimal integer, followed by a space-separated sequence of tokens
        from the following set:</p>

      <dl>
        <dt>settable</dt>
        <dd>If present, the user can set this status on themselves using
          <tp:dbus-ref namespace="org.freedesktop.Telepathy.Connection.Interface.SimplePresence"
            >SetPresence</tp:dbus-ref>; this corresponds to May_Set_On_Self
          in the <tp:type>Simple_Status_Spec</tp:type> struct.</dd>

        <dt>message</dt>
        <dd>If present, the user can set a non-empty message for this status;
          this corresponds to Can_Have_Message in the
          <tp:type>Simple_Status_Spec</tp:type> struct.</dd>
      </dl>

      <p>Unrecognised tokens MUST be ignored.</p>

      <p>For instance, an XMPP connection manager might have this
        <code>.manager</code> file:</p>

<pre>[Protocol jabber]
Interfaces=org.freedesktop.Telepathy.Protocol.Interface.Presence;
param-account=s required
param-password=s required
status-offline=1
status-unknown=7
status-error=8
status-hidden=5 settable message
status-xa=4 settable message
status-away=3 settable message
status-dnd=6 settable message
status-available=2 settable message
status-chat=2 settable message
</pre>

      <p>which corresponds to these property values (using a Python-like
        syntax):</p>

<pre>Statuses = {
    'offline': (OFFLINE, False, False),
    'unknown': (UNKNOWN, False, False),
    'error': (ERROR, False, False),
    'hidden': (HIDDEN, True, True),
    'xa': (EXTENDED_AWAY, True, True),
    'away': (AWAY, True, True),
    'dnd': (BUSY, True, True),
    'available': (AVAILABLE, True, True),
    'chat': (AVAILABLE, True, True),
}
</pre>
    </tp:docstring>

    <property name="Statuses"
      tp:name-for-bindings="Statuses"
      type="a{s(ubb)}" tp:type="Simple_Status_Spec_Map" access="read"
      tp:immutable="yes">
      <tp:docstring>
        <p>The statuses that might appear in the <tp:dbus-ref
          namespace="org.freedesktop.Telepathy"
          >Connection.Interface.SimplePresence.Statuses</tp:dbus-ref>
          property on a connection to this protocol that supports
          SimplePresence. This property is immutable.</p>

        <p>Depending on server capabilities, it is possible that not all
          of these will actually appear on the Connection.</p>
      </tp:docstring>
    </property>

  </interface>
</node>
