im-up your app! (guadec'08)
DESCRIPTION
What is Telepathy and how it can be used to provide communication features for GNOME applicationsTRANSCRIPT
![Page 1: IM-up your App! (GUADEC'08)](https://reader033.vdocuments.mx/reader033/viewer/2022060122/559509311a28ab5d068b4654/html5/thumbnails/1.jpg)
IM-up your app!Senko Rašić, Collabora
![Page 2: IM-up your App! (GUADEC'08)](https://reader033.vdocuments.mx/reader033/viewer/2022060122/559509311a28ab5d068b4654/html5/thumbnails/2.jpg)
GUADEC 2008IM-up your app!
Facts
● Constant communication● Multiple protocols and ways to contact people● Multiple accounts for each person● Rich communication (not just text)
![Page 3: IM-up your App! (GUADEC'08)](https://reader033.vdocuments.mx/reader033/viewer/2022060122/559509311a28ab5d068b4654/html5/thumbnails/3.jpg)
GUADEC 2008IM-up your app!
Ideals
● Think about people, not accounts● Don't care about implementation specifics● Integrated with user workflow● Invisible● “With <user> do <action>”
![Page 4: IM-up your App! (GUADEC'08)](https://reader033.vdocuments.mx/reader033/viewer/2022060122/559509311a28ab5d068b4654/html5/thumbnails/4.jpg)
GUADEC 2008IM-up your app!
Solution
● Suport for communication as an integrated part of the desktop
● No separate IM app● Any application can provide (related)
communication features
![Page 5: IM-up your App! (GUADEC'08)](https://reader033.vdocuments.mx/reader033/viewer/2022060122/559509311a28ab5d068b4654/html5/thumbnails/5.jpg)
GUADEC 2008IM-up your app!
E.g.
● Using user info from gnome-about-me● Unified people browser instead of buddy lists● Drag'n'drop files to users for file transfer● Call people from audio recording application● Collaborative work on an application
![Page 6: IM-up your App! (GUADEC'08)](https://reader033.vdocuments.mx/reader033/viewer/2022060122/559509311a28ab5d068b4654/html5/thumbnails/6.jpg)
GUADEC 2008IM-up your app!
![Page 7: IM-up your App! (GUADEC'08)](https://reader033.vdocuments.mx/reader033/viewer/2022060122/559509311a28ab5d068b4654/html5/thumbnails/7.jpg)
GUADEC 2008IM-up your app!
Telepathy(D-Bus)
Private chat
Multiuser chat
File transfer
Contact lists
Voice call
Video call
ConferencingTubes
XMPP
IRC
SIP
MSN
ICQ Link-local XMPP
![Page 8: IM-up your App! (GUADEC'08)](https://reader033.vdocuments.mx/reader033/viewer/2022060122/559509311a28ab5d068b4654/html5/thumbnails/8.jpg)
GUADEC 2008IM-up your app!
Nautilus
File transfer
Evolution
Contact list
AbiCollab
Tubes
Games
Tubes, Voice calls
...
Jokosher
Voice calls
Soylent
Contact list
![Page 9: IM-up your App! (GUADEC'08)](https://reader033.vdocuments.mx/reader033/viewer/2022060122/559509311a28ab5d068b4654/html5/thumbnails/9.jpg)
GUADEC 2008IM-up your app!
Telekinesis
![Page 10: IM-up your App! (GUADEC'08)](https://reader033.vdocuments.mx/reader033/viewer/2022060122/559509311a28ab5d068b4654/html5/thumbnails/10.jpg)
GUADEC 2008IM-up your app!
Rhythmbox status plugin
![Page 11: IM-up your App! (GUADEC'08)](https://reader033.vdocuments.mx/reader033/viewer/2022060122/559509311a28ab5d068b4654/html5/thumbnails/11.jpg)
GUADEC 2008IM-up your app!
Epiphany link share
![Page 12: IM-up your App! (GUADEC'08)](https://reader033.vdocuments.mx/reader033/viewer/2022060122/559509311a28ab5d068b4654/html5/thumbnails/12.jpg)
GUADEC 2008IM-up your app!
Soylent
![Page 13: IM-up your App! (GUADEC'08)](https://reader033.vdocuments.mx/reader033/viewer/2022060122/559509311a28ab5d068b4654/html5/thumbnails/13.jpg)
GUADEC 2008IM-up your app!
Telepathy objects
![Page 14: IM-up your App! (GUADEC'08)](https://reader033.vdocuments.mx/reader033/viewer/2022060122/559509311a28ab5d068b4654/html5/thumbnails/14.jpg)
GUADEC 2008IM-up your app!
telepathy-glib
libempathy-gtklibempathy
libmissioncontrol
Ecosystem
![Page 15: IM-up your App! (GUADEC'08)](https://reader033.vdocuments.mx/reader033/viewer/2022060122/559509311a28ab5d068b4654/html5/thumbnails/15.jpg)
GUADEC 2008IM-up your app!
telepathy-glib
● Autogenerated from Telepathy spec● Client and server-side bindings● Sync/async operation support● Extensive API docs in gtk-doc
![Page 16: IM-up your App! (GUADEC'08)](https://reader033.vdocuments.mx/reader033/viewer/2022060122/559509311a28ab5d068b4654/html5/thumbnails/16.jpg)
GUADEC 2008IM-up your app!
libmissioncontrol
MissionControl
McAccount
![Page 17: IM-up your App! (GUADEC'08)](https://reader033.vdocuments.mx/reader033/viewer/2022060122/559509311a28ab5d068b4654/html5/thumbnails/17.jpg)
GUADEC 2008IM-up your app!
libempathy
EmpathyIdle
EmpathyTpChat
EmpathyContact
EmpathyContactManager
EmpathyContactList
EmpathyTubeHandler
EmpathyTpTube
![Page 18: IM-up your App! (GUADEC'08)](https://reader033.vdocuments.mx/reader033/viewer/2022060122/559509311a28ab5d068b4654/html5/thumbnails/18.jpg)
GUADEC 2008IM-up your app!
libempathy-gtk
EmpathyChat
EmpathyContactListStore
EmpathyContactListView
EmpathyPresenceChooser
![Page 19: IM-up your App! (GUADEC'08)](https://reader033.vdocuments.mx/reader033/viewer/2022060122/559509311a28ab5d068b4654/html5/thumbnails/19.jpg)
GUADEC 2008IM-up your app!
import empathy
# Get the status messageidle = empathy.Idle()
state = empathy.presence_to_str(idle.get_state())msg = idle.get_status()
# Set new status messageidle.set_status('Custom status message')
# Go offlineidle.set_state(empathy.presence_from_str('offline'))
pyempathygetting and setting presence and status message
![Page 20: IM-up your App! (GUADEC'08)](https://reader033.vdocuments.mx/reader033/viewer/2022060122/559509311a28ab5d068b4654/html5/thumbnails/20.jpg)
GUADEC 2008IM-up your app!
import empathy
cm = empathy.ContactManager()
def on_contact(manager, contact): print “Alias: “, contact.get_name() print “Presence. “, contact.get_status()
cm.connect('member-added', on_contact)
pyempathy (II)getting contact list
![Page 21: IM-up your App! (GUADEC'08)](https://reader033.vdocuments.mx/reader033/viewer/2022060122/559509311a28ab5d068b4654/html5/thumbnails/21.jpg)
GUADEC 2008IM-up your app!
import gtk, empathy, pyempathy
manager = empathy.ContactManager()store = empathygtk.ContactListStore(manager)view = empathygtk.ContactListView(store, 'none')
def send(model, path, iter):(contact) = model.get(iter, 6)chat = empathygtk.tp_chat_new_with_contact(contact)chat.send(empathy.Message('Hi there!'))
d = gtk.Dialog()d.get_child().add(view)d.add_button(gtk.STOCK_CANCEL, 0)d.add_button(gtk.STOCK_OK, 1)d.show_all()
if gtk.run():view.get_selection().selected_foreach(send)
pyempathy-gtkselecting a contact from the list and sending a message
![Page 22: IM-up your App! (GUADEC'08)](https://reader033.vdocuments.mx/reader033/viewer/2022060122/559509311a28ab5d068b4654/html5/thumbnails/22.jpg)
GUADEC 2008IM-up your app!
telepathy-pythongoing online and sending a message
import telepathy.clientfrom telepathy.client import interfaces, constants
reg = telepathy.client.ManagerRegistry()reg.LoadManagers()
cm = reg.GetManager(“gabble”)name, path = mgr[CONN_MGR_INTERFACE].RequestConnection(“jabber”,
“[email protected]”)conn = telepathy.client.Connection(name, path)connection[CONN_INTERFACE].Connect()
handle = conn[CONN_INTERFACE].RequestHandles(CONNECTION_HANDLE_TYPE_CONTACT,[“[email protected]”])[0]
path = conn[CONN_INTERFACE].RequestChannel(CHANNEL_TYPE_TEXT, CONNECTION_HANDLE_TYPE_CONTACT, handle, True)
chan = telepathy.client.Channel(conn.service_name, path)chan.Send(CHANNEL_TEXT_TYPE_NORMAL, “Hi there!”)
![Page 23: IM-up your App! (GUADEC'08)](https://reader033.vdocuments.mx/reader033/viewer/2022060122/559509311a28ab5d068b4654/html5/thumbnails/23.jpg)
GUADEC 2008IM-up your app!
libempathygoing online / setting presence
static voidgo_online (){ EmpathyIdle *idle = empathy_idle_new (); empathy_idle_set_presence (idle, MC_PRESENCE_AVAILABLE, “I'm here”);}
static voidset_message (){ EmpathyIdle *idle = empathy_idle_new (); empathy_idle_set_status (idle, “Custom status message”);}
![Page 24: IM-up your App! (GUADEC'08)](https://reader033.vdocuments.mx/reader033/viewer/2022060122/559509311a28ab5d068b4654/html5/thumbnails/24.jpg)
GUADEC 2008IM-up your app!
libempathy (II)opening a chat/call window
static voidchat_with (gchar *account_id, gchar *user_id){ McAccount *acc = mc_account_lookup (account_id); empathy_dispatcher_chat_with_contact_id (acc, user_id);}
static voidcall (gchar *account_id, gchar *user_id){ McAccount *acc = mc_account_lookup (account_id); empathy_dispatcher_call_with_contact_id (acc, user_id);}
![Page 25: IM-up your App! (GUADEC'08)](https://reader033.vdocuments.mx/reader033/viewer/2022060122/559509311a28ab5d068b4654/html5/thumbnails/25.jpg)
GUADEC 2008IM-up your app!
libempathy (III)getting a contact
static EmpathyContact *get_contact (gchar *account_id, gchar *contact_id){ EmpathyContactFactory *cf; McAccount *acc; EmpathyContact *contact; EmpathyContactReady ready_flags;
acc = mc_account_lookup (account_id);
cf = empathy_contact_factory_new (); contact = empathy_contact_factory_get_from_id (cf, acc, contact_id);
ready_flags = EMPATHY_CONTACT_READY_HANDLE | EMPATHY_CONTACT_READY_NAME; empathy_contact_run_until_ready (contact, ready_flags, NULL);
return contact;}
![Page 26: IM-up your App! (GUADEC'08)](https://reader033.vdocuments.mx/reader033/viewer/2022060122/559509311a28ab5d068b4654/html5/thumbnails/26.jpg)
GUADEC 2008IM-up your app!
telepathy-glibsync opening a text channel
static EmpathyTpChat *open_text_channel (EmpathyContact *contact){ TpChannel *chan; gchar *obj_path; GError *error = NULL; EmpathyTpChat *chat; MissionControl *mc = mission_control_new (tp_get_bus ()); McAccount *acc = empathy_contact_get_account (contact); TpConnection *conn = mission_control_get_tpconnection (mc, acc, NULL);
tp_connection_run_until_ready (conn, FALSE, NULL, NULL);
if (!tp_cli_connection_run_request_channel (conn, -1, TP_IFACE_CHANNEL_TYPE_TEXT, TP_HANDLE_TYPE_CONTACT, empathy_contact_get_handle (contact), TRUE, &obj_path, &error, NULL)) return NULL;
![Page 27: IM-up your App! (GUADEC'08)](https://reader033.vdocuments.mx/reader033/viewer/2022060122/559509311a28ab5d068b4654/html5/thumbnails/27.jpg)
GUADEC 2008IM-up your app!
telepathy-glibcont'd
chan = tp_channel_new (conn, obj_path, TP_IFACE_CHANNEL_TYPE_TEXT, TP_HANDLE_TYPE_CONTACT, empathy_contact_get_handle (contact), NULL);
tp_channel_run_until_ready (chan, NULL, NULL);
tp_cli_channel_type_text_run_send (chan, -1, TP_CHANNEL_TEXT_MESSAGE_TYPE_NORMAL, "Hi there!", NULL, NULL);
chat = empathy_tp_chat_new (chan);
return chat;}
![Page 28: IM-up your App! (GUADEC'08)](https://reader033.vdocuments.mx/reader033/viewer/2022060122/559509311a28ab5d068b4654/html5/thumbnails/28.jpg)
GUADEC 2008IM-up your app!
libempathy-gtkembedding a chat widget
static voidshow_chat_window (EmpathyTpChat *chat){ GtkWidget *win = gtk_window_new (GTK_WINDOW_TOPLEVEL); EmpathyChat *emchat = empathy_chat_new (chat);
gtk_container_add (GTK_CONTAINER (win), GTK_WIDGET (emchat));}
![Page 29: IM-up your App! (GUADEC'08)](https://reader033.vdocuments.mx/reader033/viewer/2022060122/559509311a28ab5d068b4654/html5/thumbnails/29.jpg)
GUADEC 2008IM-up your app!
If you get stuckor have a cool idea you want to talk about
● #telepathy on Freenode● [email protected]
![Page 30: IM-up your App! (GUADEC'08)](https://reader033.vdocuments.mx/reader033/viewer/2022060122/559509311a28ab5d068b4654/html5/thumbnails/30.jpg)
GUADEC 2008IM-up your app!
Future
● Mission Control D-Bus Interface standard
– with indings in tp-glib● libsoylent for accessing people● A few GTK+ widgets (tp-gtk?)● Better Python (, etc.) bindings
![Page 31: IM-up your App! (GUADEC'08)](https://reader033.vdocuments.mx/reader033/viewer/2022060122/559509311a28ab5d068b4654/html5/thumbnails/31.jpg)
GUADEC 2008IM-up your app!
We have all the plumbing ready,
now let's build the kitchen.