PyMaemo/Accessing APIs without Python bindings/More examples

(Searching contacts by phone number)
(Searching contacts by phone number)
Line 5: Line 5:
== Searching contacts by phone number ==
== Searching contacts by phone number ==
-
Searching contacts by phone number can be done using the [http://maemo.org/api_refs/5.0/5.0-final/libosso-abook/libosso-abook-osso-abook-util.html#osso-abook-query-phone-number osso_abook_query_phone_number()] and [http://maemo.org/api_refs/5.0/5.0-final/libebook/EBook.html#e-book-get-contacts e_book_get_contacts()] functions:
+
Searching contacts by phone number can be done using the [http://maemo.org/api_refs/5.0/5.0-final/libosso-abook/OssoABookAggregator.html#osso-abook-aggregator-find-contacts-for-phone-number osso_abook_aggregator_find_contacts_for_phone_number()] function:
-
  ebook = ctypes.CDLL('libebook-1.2.so.5')
+
  def aggregator_ready_cb(aggregator, error, user_data):
 +
    contacts = osso_abook.osso_abook_aggregator_find_contacts_for_phone_number(aggregator, phone_number, 1)
 +
    if contacts:
 +
        print "Contacts with phone number %s:" % phone_number
 +
        for i in glist(contacts):
 +
            contact_get_display_name = osso_abook.osso_abook_contact_get_display_name
 +
            contact_get_display_name.restype = ctypes.c_char_p
 +
            print contact_get_display_name(i)
 +
        glib.g_list_free(contacts)
 +
    else:
 +
        print "No contacts found with phone number %s." % phone_number
   
   
-
err = ctypes.c_void_p()
+
     gtk.main_quit()
-
c_book = ebook.e_book_new_default_addressbook(ctypes.byref(err))
+
-
if not ebook.e_book_open(c_book, 1, 0):
+
-
     print >>sys.stderr, "Couldn't load addressbook."
+
-
    sys.exit(1)
+
-
# fuzzy search enabled to allow partial matches (refer to documentation)
+
-
c_query = osso_abook.osso_abook_query_phone_number("12345678", 1)
+
   
   
-
  contacts = ctypes.c_void_p()
+
  aggregator = osso_abook.osso_abook_aggregator_get_default(0)
-
  if not ebook.e_book_get_contacts(c_book, c_query, ctypes.byref(contacts), err):
+
  wait_cb_type = ctypes.CFUNCTYPE(None, ctypes.c_void_p, ctypes.c_void_p, ctypes.c_void_p)
-
    print >>sys.stderr, "Couldn't get query results."
+
# Keep prototype object reference so it is not destroyed
-
    sys.exit(1)
+
cb_proto = wait_cb_type(aggregator_ready_cb)
 +
osso_abook.osso_abook_waitable_call_when_ready(aggregator, cb_proto, 0, 0)
 +
 +
gtk.main()
The "contacts" is a GList which can be iterated over as explained [[../#Accessing Items in a GList|here]].
The "contacts" is a GList which can be iterated over as explained [[../#Accessing Items in a GList|here]].
[[Category:Python]]
[[Category:Python]]

Revision as of 14:18, 12 April 2010

More examples

This page contains some other example code using ctypes. Note that they are not complete, and assume some code already shown on the main article.

Searching contacts by phone number

Searching contacts by phone number can be done using the osso_abook_aggregator_find_contacts_for_phone_number() function:

def aggregator_ready_cb(aggregator, error, user_data):
    contacts = osso_abook.osso_abook_aggregator_find_contacts_for_phone_number(aggregator, phone_number, 1)
    if contacts:
        print "Contacts with phone number %s:" % phone_number
        for i in glist(contacts):
            contact_get_display_name = osso_abook.osso_abook_contact_get_display_name
            contact_get_display_name.restype = ctypes.c_char_p
            print contact_get_display_name(i)
        glib.g_list_free(contacts)
    else:
        print "No contacts found with phone number %s." % phone_number

    gtk.main_quit()

aggregator = osso_abook.osso_abook_aggregator_get_default(0)
wait_cb_type = ctypes.CFUNCTYPE(None, ctypes.c_void_p, ctypes.c_void_p, ctypes.c_void_p)
# Keep prototype object reference so it is not destroyed
cb_proto = wait_cb_type(aggregator_ready_cb)
osso_abook.osso_abook_waitable_call_when_ready(aggregator, cb_proto, 0, 0)

gtk.main()

The "contacts" is a GList which can be iterated over as explained here.