| Server IP : 182.53.201.61 / Your IP : 216.73.217.175 Web Server : Apache/2.2.15 (Fedora) System : Linux km10.dyndns.org 2.6.31.5-127.fc12.i686.PAE #1 SMP Sat Nov 7 21:25:57 EST 2009 i686 User : apache ( 48) PHP Version : 5.3.3 Disable Function : NONE MySQL : ON | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : ON | Pkexec : ON Directory : /usr/share/doc/python-telepathy-0.15.11/examples/ |
Upload File : |
import sys
import pygtk
pygtk.require('2.0')
import dbus
import gobject
import gtk
from account import connection_from_file
from call import IncomingCall, OutgoingCall, get_stream_engine
from telepathy.interfaces import CONN_INTERFACE
class CallWindow(gtk.Window):
def __init__(self):
gtk.Window.__init__(self)
hbox = gtk.HBox()
hbox.set_border_width(10)
vbox = gtk.VBox()
output_frame = gtk.Frame()
output_frame.set_shadow_type(gtk.SHADOW_IN)
preview_frame = gtk.Frame()
preview_frame.set_shadow_type(gtk.SHADOW_IN)
self.output = gtk.Socket()
self.output.set_size_request(400, 300)
self.preview = gtk.Socket()
self.preview.set_size_request(200, 150)
self.call_button = gtk.Button('Call')
self.call_button.connect('clicked', self._call_button_clicked)
output_frame.add(self.output)
preview_frame.add(self.preview)
vbox.pack_start(preview_frame, False)
vbox.pack_end(self.call_button, False)
hbox.add(output_frame)
hbox.pack_start(vbox, padding=10)
self.add(hbox)
def _call_button_clicked(self, button):
pass
class GtkLoopMixin:
def run_main_loop(self):
gtk.main()
def quit(self):
gtk.main_quit()
class BaseGtkCall:
def __init__(self):
self.window = CallWindow()
self.window.connect('destroy', gtk.main_quit)
self.window.show_all()
def add_preview_window(self):
se = dbus.Interface(get_stream_engine(),
'org.freedesktop.Telepathy.StreamEngine')
se.AddPreviewWindow(self.window.preview.get_id())
return False
def add_output_window(self):
se = dbus.Interface(get_stream_engine(),
'org.freedesktop.Telepathy.StreamEngine')
chan_path = self.channel.object_path
se.SetOutputWindow(chan_path, 2, self.window.output.get_id())
return False
class GtkOutgoingCall(GtkLoopMixin, BaseGtkCall, OutgoingCall):
def __init__(self, account_file, contact):
OutgoingCall.__init__(self, account_file, contact)
BaseGtkCall.__init__(self)
def members_changed_cb(self, message, added, removed, local_pending,
remote_pending, actor, reason):
OutgoingCall.members_changed_cb(self, message, added, removed,
local_pending, remote_pending, actor, reason)
if self.handle in added:
gobject.timeout_add(5000, self.add_output_window)
gobject.timeout_add(5000, self.add_preview_window)
class GtkIncomingCall(GtkLoopMixin, BaseGtkCall, IncomingCall):
def __init__(self, account_file):
IncomingCall.__init__(self, account_file)
BaseGtkCall.__init__(self)
def members_changed_cb(self, message, added, removed, local_pending,
remote_pending, actor, reason):
IncomingCall.members_changed_cb(self, message, added, removed,
local_pending, remote_pending, actor, reason)
if self.conn[CONN_INTERFACE].GetSelfHandle() in added:
gobject.timeout_add(5000, self.add_output_window)
gobject.timeout_add(5000, self.add_preview_window)
if __name__ == '__main__':
args = sys.argv[1:]
assert len(args) in (1, 2)
if len(args) > 1:
contact = args[1]
call = GtkOutgoingCall(args[0], args[1])
else:
call = GtkIncomingCall(args[0])
call.run()