29 Mar 2008 (updated 29 Mar 2008 at 01:01 UTC)
»
Well, finally we have found a way to get the accounts for a
contact on maemo. We need this to be able to identify the
contact which the user has called through "Internet Call".
As you may have read in the post about "watching for
calls
through telepathy", you can have noted that all the contact
information available was just an URI, kind of
"sip:1234@192.168.1.55". However, this info is only enough
to supply a way to search for contacts which has this URI as
account "specification".
So the question over this week was: How maemo
store the
accounts available for a contact?. Basically, how do you
can get the list of accounts by which you can make a
conversation with the contact?
We've looked at the APIs available (ebook, abook,
mission-control, ...) and nothing seemed to supply the
list... so I went to the database file and the first attempt
was to try open it and investigate tables structure or
something similar that could give me some information. No
way there, the db is a Berkeley DB and there is no python
modules to manage this kind of database (python for maemo
seems to have removed this standard module of the
distribution) and I wasn't disposed to try it in C (to work
with a "mysterious" DB in C was not the kind of fun
that I would like to play at the moment, at least with
python this could be a bit easier).
Then I had the idea to try get the VCARD info for a
contact
and... WELL, the information was there. One thing that I
forgot to say is that through the APIs I could get each
information (named "fields" there) for the contact (first
name, last name, email and so forth), but the accounts
wasn't available through "fields", since you can have an
variable number of accounts and the function to get a
contact field expects a well defined constant (note, the
"vcard" is a "well defined constant").
Through the vcard, you get things like:
X-SIP;X-OSSO-BOUND:your-account-on-device@host:the-contact-account@host
The "X-SIP" value is the user account which the
contact account is mapped to. For example: I've two
accounts on the device: gtalk and SIP. I've the contact X
which I can talk through gtalk, the contact Y I can talk
through gtalk and SIP... so you need a way to say what is
the user account the contact account is
bounded to (in the example, for the contact Y you could ask
if his account is a "gtalk" or "sip" account), it servers as
an "account type" identifier.
Given this, you can now map your "sip uri" available
through
the "calls watcher" to a real contact on the system. If you
can do this, you can get all the other contact info, like the
general ones available on most of the softwares (like name,
email, web address, phone and another ways to contact
the same person :)
Also note that there is a python package for vcard
management, it is named vobject and is available on the project
page
and Python
Package
Index (Pypi).
Hope this information can help some people having to
do this
kind of interaction with maemo's rtcomm.