[Telepathy] Proposed standard MC API

Xavier Claessens xclaesse at gmail.com
Wed Aug 8 14:26:26 PDT 2007


One little comment in general:

If you have a SetFoo in your API you need a FooChanged signal. For
example there is no way actually to get notified when the display name
of an account is changed.

Btw, that's a bug I'm facing in NMC.

Xavier Claessens.

Le mercredi 01 août 2007 à 15:31 +0100, George Wright a écrit :
> Hello all,
> 
> I am working for Collabora on a new Mission Control D-Bus
> API specification which we can hopefully standardise on.
> 
> At the moment there seem to be two different implementations,
> Nokia's mission-control project, and KDE/basysKom's Decibel
> project.
> 
> The idea of this project is to allow clients to be written to
> a standard API and not have them tied down to any one single
> implementation of Mission Control.
> 
> So far I have made the following decisions:
> 
> - Use the org.freedesktop.Telepathy.MissionControl namespace
>   for bus/interface names.
> 
> - Keep the naming scheme of the API consistent with that for
>   Telepathy; that is, capitalise the first letter of each word
>   in the function, ie. UpdateAccount not updateAccount.
> 
> - Split up the various methods/signals into different
>   objects which expose different interfaces based on what they do. 
>   That is, put all account specific methods in MissionControl.AccountManager
>   etc.
> 
> - Do not specify any configuration system that Mission Control
>   should use to store data. This should be left to the discretion
>   of the implementation depending on environment.
> 
> Now for the draft specification. It's based heavily on Decibel's current API,
> because in my opinion they've done it pretty well.
> 
> -------------------------------------------------------
> org.freedesktop.Telepathy.MissionControl.AccountManager
> -------------------------------------------------------
> 
> * Accounts are D-Bus objects which store information such as
>   server address, username, login etc.
> 
> ListAccounts ( ) -> ao
> 
>   Returns an array of all known account objects in MC.
> 
> AddAccount ( ) -> o
> 
>   Add an account to MC.
> 
>   Returns the object path of the new account.
> 
> FindAccounts ( a{sv}: account_data ) -> ao
> 
>   Returns all accounts whose account data contains the search query.
> 
>   An empty array should return all possible accounts.
> 
> GetOnlineAccounts ( ) -> ao
> 
>   Returns the object paths of all the accounts which are 
>   currently online.
> 
> ConnectAll ( ) -> nothing
> 
>   Requests all accounts go online with the default presence.
> 
> SetGlobalPresence ( u: presence_state, s: message ) -> nothing
> 
>   Set a global presence and message on all accounts, putting accounts
>   online if necessary.
> 
> + Signals
> 
> AccountCreated ( o: account )
> 
>   Emitted when an account is created.
> 
> AccountUpdated ( o: account )
>  
>   Emitted when an account is updated.
> 
> AccountDeleted ( o: account )
>  
>   Emitted when an account is deleted.
> 
> AccountStatusChanged ( o: account, u: status, u: presence, u: reason )
>   
>   Emitted when an account's connection status changes.
> 
>   Connection states and Reason are both defined in Telepathy.
> 
> ------------------------------------------------
> org.freedesktop.Telepathy.MissionControl.Account
> ------------------------------------------------
> 
> * Each account object should expose the following set of D-Bus
> * methods in order to be manipulated.
> 
> SetParameters ( a{sv}: account_data ) -> nothing
> 
>   Set account parameter dictionary replacing current values.
> 
>   See org.freedesktop.Telepathy.ConnectionManager, method 
>   RequestConnection for a description of the struct.
> 
> UpdateParameters ( a{sv}: account_data ) -> nothing
> 
>   Update the account parameter dictionary.
> 
> GetParameters ( ) -> a{sv}
> 
>   Gets the current parameters set on the account.
> 
> Delete ( ) -> nothing
> 
>   Delete the account.
> 
> RequestChannel ( o: account, s: type, i: handle_type, s: handle) -> nothing 
> 
>   Requests a channel be opened for an account to a handle, putting the account
>   online if necessary.
> 
>   type - s
>     D-Bus interface name representing the channel type
>   handle_type - i
>     The type of the handle to create a channel to.
>   handle - s
>     Handle representing a contact, room, list etc.
> 
> SetPresence ( u: presence ) -> nothing
> 
>   Request that a presence be set on the account.
> 
> GetRequestedPresence ( ) -> u
> 
>   Gets the last requested presence for the account. 
>   This is not necessarily the same as the actual presence.
> 
> GetCurrentPresence ( ) -> u
> 
>   Gets the current presence actually set on the account.
> 
> GetRequestedPresenceMessage ( ) -> s
> 
>   Gets the last requested presence message on the account referenced
>   by account_handle.
> 
> GetCurrentPresenceMessage ( ) -> s
> 
>   Gets the current presence message actually set on the account.
> 
> SetPresenceMessage ( s: message ) -> nothing
> 
>   Set a presence message on an account.
> 
> GetConnectionStatus ( ) -> u
> 
>   Gets the status of the connection.
> 
> SetAvatar ( ay: avatar, s: mime_type ) -> nothing
> 
>   Takes an avatar as a byte array in the format specified
>   by mime_type. If the mime type is unknown leave mime_type blank.
> 
> GetAvatar ( ) -> ay, s
> 
>   Gets the avatar as a byte array and the mime type of the avatar.
> 
> SetDisplayName ( s: display_name ) -> nothing
>   
>   Sets a display name on the account.
> 
> GetDisplayName ( ) -> s
> 
>   Gets the current display name set on the account.
> 
> GetNormalizedName ( ) -> s
>  
>   Gets the normalized name of the account (the result of inspecting the
>   connection's self handle when the account is online).
> 
> GetConnection ( ) -> s, o
> 
>   Gets the bus name and the object path of the connection
>   associated with the account if it's online. 
> 
> SetEnabled ( b: enabled ) -> nothing
> 
>   Sets whether the account is enabled or not.
> 
> IsEnabled ( ) -> b
>  
>   Gets whether the account is enabled or not.
> 
> + Presence States (enumerated type):
> 
> 0 Unset
> 1 Offline
> 2 Available
> 3 Away
> 4 Extended Away
> 5 Hidden
> 6 Do Not Disturb
> 
> --------------------------------------------------------
> org.freedesktop.Telepathy.MissionControl.ProtocolManager
> --------------------------------------------------------
> 
> ConnectionManagers ( ) -> ao
> 
>   Returns the object paths of all the connection managers known
>   to Mission Control.
> 
> SupportedProtocols ( ) -> as
>   
>   Returns the protocols supported by the connection managers
>   known to Mission Control.
> 
> ProtocolConnectionManagers ( s: protocol ) -> ao
> 
>   Returns the object paths of the connection managers which
>   are able to handle the protocol specified.
> 
> TODO:
> 
> The following areas have not been taken into consideration and we
> might want to look into them.
> 
> - Abstract plugins like Decibel's "Component" system. These are like
>   Nokia Mission Control's channel handlers and filters. We need to come
>   up with a standard API for these. 
> 
> - Accounts; enabled, normalised name, display name, etc - do we want to
>   implement these as D-Bus properties or methods? 
> 
> - We need something like Nokia Mission Control's "Profiles" system 
>   because changing a connection manager for a given protocol isn't
>   necessarily going to work as there is no exhaustive standard
>   for the configuration settings a given connection manager should
>   take. Particularly, we need to decide on who provides the profiles; 
>   Mission Control, the UI or somewhere else?
> 
> Many thanks,
> 
> George
> 
> _______________________________________________
> Telepathy mailing list
> Telepathy at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/telepathy



More information about the Telepathy mailing list