# ![«Image: Homemade applications»](images/homemade-applications-logo.png "Homemade applications") Homemade applications The following code enables `controller.py` to be used in a homemade application. ```python #! /usr/bin/env python3 import gi gi.require_version('Gtk', '3.0') from gi.repository import Gtk #import errorsDring from controller import libjamiCtrl ######################################################################## # Provide callback to Jami daemon D-Bus signals ######################################################################## class MyController(libjamiCtrl): # # Signal handling # process callbacks in the app # def onCallIncoming_cb(self, callId): onCallIncoming(callId) def onCallEnd_cb(self, callId): onCallEnd(callId) def onCallConnecting_cb(self, callId): onCallConnecting(callId) def onCallRinging_cb(self, callId): onCallRinging(callId) def onCallHold_cb(self): onCallHold() def onCallInactive_cb(self): onCallInactive() def onCallCurrent_cb(self): onCallCurrent() def onCallBusy_cb(self): onCallBusy() def onCallFailure_cb(self): onCallFailure() def onCallOver_cb(self): onCallOver() def onIncomingTrustRequest_cb(self, account, conversation, orig, payload, received): onIncomingTrustRequest(account, conversation, orig, payload, received) # Stop the Jami controller thread def closeCtrl(something): print("About to quit…") ctrl.stopThread() Gtk.main_quit() ######################################################################## # Callbacks ######################################################################## def onCallIncoming(callId): pass def onCallEnd(callId): pass def onCallConnecting(callId): pass def onCallRinging(callId): pass def onCallHold(): pass def onCallInactive(): pass def onCallCurrent(): pass def onCallBusy(): pass def onCallFailure(): pass def onCallOver(): pass def onIncomingTrustRequest(account, conversation, orig, payload, received): pass ######################################################################## # Controller in another thread ######################################################################## # jamid MUST be running already! ctrl = MyController("MyJami", False) ctrl.daemon = True ctrl.start() ######################################################################## # Create the main window ######################################################################## window = Gtk.Window() window.connect("destroy", closeCtrl) window.show_all() Gtk.main() ```