[tuxdroid-svn] r5976 - software_suite_v3/software/plugin/plugin-skype/branches/in_out_plugin/execut
Status: Beta
Brought to you by:
ks156
|
From: jerome <c2m...@c2...> - 2009-12-15 09:51:57
|
Author: jerome
Date: 2009-12-15 10:51:42 +0100 (Tue, 15 Dec 2009)
New Revision: 5976
Modified:
software_suite_v3/software/plugin/plugin-skype/branches/in_out_plugin/executables/plugin-skype.py
Log:
* Fixed and implemented configuration.
* Finished incoming calls.
* Started to implement outgoing calls.
Modified: software_suite_v3/software/plugin/plugin-skype/branches/in_out_plugin/executables/plugin-skype.py
===================================================================
--- software_suite_v3/software/plugin/plugin-skype/branches/in_out_plugin/executables/plugin-skype.py 2009-12-15 09:08:36 UTC (rev 5975)
+++ software_suite_v3/software/plugin/plugin-skype/branches/in_out_plugin/executables/plugin-skype.py 2009-12-15 09:51:42 UTC (rev 5976)
@@ -59,42 +59,42 @@
self.throwEmoticons = True
- def getThrowEmoticons():
+ def getThrowEmoticons(self):
'''
Return true if emoticons will be thrown.
'''
return self.throwEmoticons
- def setThrowEmoticons(aThrowEmoticons):
+ def setThrowEmoticons(self, aThrowEmoticons):
'''
Set the throwEmoticons parameter value.
'''
self.throwEmoticons = aThrowEmoticons
- def getThrowTTS()
+ def getThrowTTS(self):
'''
Return the throwTTS parameter value.
'''
return self.throwTTS
- def setThrowTTS(throw)
+ def setThrowTTS(self, throw):
'''
Set the throwTTS parameter value.
'''
self.throwTTS = throw
- def getIsOutgoing()
+ def getIsOutgoing(self):
'''
Return the outgoing parameter value.
'''
return self.isOutgoing
- def setIsOutgoing(outgoing)
+ def setIsOutgoing(self, outgoing):
'''
Set the outgoing parameter value.
'''
@@ -115,10 +115,13 @@
connectorObj = None
#Used for run command only.
- ready = False
command = ""
canrun = True
+ #Used for outgoing parameter only.
+ onlineList = []
+ currentContact = -1
+
##----------------------------------------------------------------
## * Skype plugin main entry point.
##----------------------------------------------------------------
@@ -131,7 +134,7 @@
self.port = TuxDroidServerUtils.getServerPort()
#Check for the command.
- if self.getCommand() == "runDaemon":
+ if self.getCommand() == "check":
self.runDaemon()
elif self.getCommand() == "run":
self.run()
@@ -139,7 +142,7 @@
self.runDaemon()
##----------------------------------------------------------------
- ## * PLUGIN COMMAND : Set Tux Droid for a call.
+ ## * PLUGIN COMMAND : Set Tux Droid for an incoming call call.
##----------------------------------------------------------------
def run(self):
'''
@@ -150,22 +153,48 @@
self.client.registerOnConnectedCallBack(self.ClientOnConnected)
self.client.start()
+ if self.configuration().getIsOutgoing():
+ #Then getting online contact list.
+ self.command = 'outgoing'
+ self.client.notify('outgoing_call')
def incomingPluginEvent(self, eventName, eventValues):
'''
Tux Droid plugin event callback.
'''
- if not self.ready:
- return
-
+ self.throwTrace(self.command)
if self.command == 'incoming':
- #Accept call
+ #Accept call
if eventName == 'head':
self.client.notify('accept_call')
#Reject Call
elif eventName in ['left', 'right']:
self.client.notify('reject_call')
+
+ #endcall command, waiting for the call ends.
+ if self.command == 'wait_end_call':
+ self.throwTrace('here 0')
+ if eventName == 'head':
+ self.throwTrace('here 1')
+ #Then send finish call command to IPN server.
+ self.client.notify('end_call')
+
+
+ def outgoingPluginEvent(self, eventName, eventValues):
+ '''
+ Tux Droid event callback for outgoing calls.
+ '''
+ self.throwTrace("outgoing")
+ if self.command == 'outgoing':
+ #Proceed call
+ if eventName == 'head':
+ self.client.notify('call_contact')
+ #Next contact
+ elif eventName == 'left':
+ self.client.notify('next_contact')
+ elif eventName == 'right':
+ self.client.notify('previous_contact')
@@ -173,27 +202,40 @@
'''
Recieved a message from server.
'''
+ thread = threading.Thread(target=self.OnNotification, args = (Message, ))
+ thread.start()
+
+
+ def OnNotification(self, Message):
+ '''
+ Threaded client notification.
+ '''
if Message == 'command>incoming':
self.throwNotification("start")
self.throwActuation("upFlippers")
self.throwActuation("openMouth")
self.throwNotification("stop")
- self.ready = True
self.command = 'incoming'
+ elif Message == 'command>wait_end_call':
+ self.command = 'wait_end_call'
elif Message == 'command>endcall':
self.throwNotification("start")
self.throwActuation("downFlippers")
self.throwActuation("closeMouth")
self.throwNotification("stop")
self.stop()
-
+ elif Message[:4].find('tts>') != -1:
+ self.throwNotification("start")
+ self.throwMessage('%s' % Message[4:])
+ self.throwNotification("stop")
+
def ClientOnConnected(self, id):
'''
'''
pass
-
+
##----------------------------------------------------------------
## * DAEMON command and functions.
##----------------------------------------------------------------
@@ -203,12 +245,14 @@
Run plugin command.
'''
#Creating and starting server.
+
self.serv = IPNServer('127.0.0.1', 48536)
self.serv.registerOnClientAddedCallBack(self.ServerOnClientAdded)
self.serv.registerOnClientRemovedCallBack(self.ServerOnClientRemoved)
self.serv.registerOnClientNotificationCallBack(self.ServerOnClientNotification)
self.serv.start()
+
#Initialize skype client and api objects.
self.connectorObj = connector.Connector()
self.connectorObj.OnAPIReady = self.initializeDaemon
@@ -303,14 +347,14 @@
'''
Outgoing call finished event.
'''
- #Send reset switches signal.
- self.serv.notify('command>endcall')
+ pass
def OnOutgoingFinished(self, contactHandle):
'''
'''
- pass
+ #Send reset switches signal.
+ self.serv.notify('command>endcall')
def OnChatMessage(self, contactHandle):
@@ -328,34 +372,57 @@
'''
Event that notify of incoming emoticon.
'''
+ if not self.configuration().getThrowEmoticons():
+ return
self.throwNotification("start")
self.throwActuation("playAttitune", attName)
self.throwNotification("stop")
+
+
-
def OnTTS(self, sentence):
'''
Event that notify a tts sentence to be said by Tux Droid.
'''
+ if not self.configuration().getThrowTTS():
+ return
self.throwNotification("start")
self.throwMessage(sentence)
self.throwNotification("stop")
- def ContactStatusChanged(self, UserHandle, Status):
+ def callCurrentContact(self):
'''
- Event that notify a contact status changed.
+ Call the current selected contact.
'''
- #Nothing for this plugin version, maybe later on.
pass
+ def nextContact(self):
+ '''
+ Go next in the online contacts list.
+ '''
+ try:
+ self.currentContact += 1
+ self.serv.notify('tts>%s' % self.onlineList[self.currentUser])
+ except:
+ self.serv.notify('tts>%s' % self.onlineList[0])
+
+
+ def previousContact(self):
+ '''
+ Go previous in the online contacts list.
+ '''
+ pass
+
+
def mainloop(self):
'''
Run main loop.
'''
while 1:
- time.sleep(2.0)
+ time.sleep(1.0)
+
#Setting Tux Droid as audio peripheral.
try:
#in try statement to take calls in care.
@@ -363,7 +430,7 @@
self.synchronious.setAudioCards()
except:
pass
-
+
##----------------------------------------------------------------
@@ -373,13 +440,16 @@
'''
OnPluginStop event.
'''
- if self.connectorObj != None:
- if self.getCommand() == 'outgoingCall':
- #TODO update this function.
- self.connectorObj.stop(KillClient=True)
- else:
- #In other cases, close connection but not skype client.
- self.connectorObj.stop()
+ if self.getCommand() == 'run':
+ self.client.stop()
+ else:
+ if self.connectorObj != None:
+ if self.getCommand() == 'outgoingCall':
+ #TODO update this function.
+ self.connectorObj.stop(KillClient=True)
+ else:
+ #In other cases, close connection but not skype client.
+ self.connectorObj.stop()
@@ -391,7 +461,10 @@
'''
#Start the adequate function for each plugin command.
if self.getCommand() == 'run':
- self.incomingPluginEvent(eventName, eventValues)
+ if not self.configuration().getIsOutgoing():
+ self.incomingPluginEvent(eventName, eventValues)
+ else:
+ self.outgoingPluginEvent(eventName, eventValues)
@@ -401,7 +474,8 @@
def ServerOnClientAdded(self, idClient):
'''
'''
- self.serv.notify( "command>" + self.command )
+ if not self.configuration().getIsOutgoing():
+ self.serv.notify( "command>" + self.command )
def ServerOnClientRemoved(self, idClient):
@@ -413,14 +487,37 @@
def ServerOnClientNotification(self, idClient, Message):
'''
'''
+ #-------- Incoming IPN messages --------#
if Message == 'accept_call':
if self.asynchronious.call != None:
#Take call
- self.synchronious.acceptCall(self.asynchronious.call)
+ self.serv.notify('command>wait_end_call')
+ thread = threading.Thread(target=self.synchronious.acceptCall, args =(self.asynchronious.call, ))
+ thread.start()
elif Message == 'reject_call' :
- #Reject call.
- self.synchronious.rejectCall()
+ #Reject call.
+ self.synchronious.rejectCall()
+ #-------- Outgoing IPN messages --------#
+ elif Message == 'outgoing_call':
+ #Outgoing call requested, so getting online list and sending outgoing command.
+ self.onlineList = self.synchronious.getOnlineList()
+ self.throwTrace(self.onlineList)
+ #Outgoing
+ elif Message == 'call_contact':
+ thread = threading.Thread(target=self.callCurrentContact)
+ thread.start()
+ elif Message == 'next_contact':
+ thread = threading.Thread(target=self.nextContact)
+ thread.start()
+ elif Message == 'previous_contact':
+ thread = threading.Thread(target=self.previousContact)
+ thread.start()
+
+ #-------- Common IPN messages --------#
+ elif Message == 'end_call':
+ self.synchronious.finishCall()
+
if __name__ == "__main__":
plugin = SkypePlugin()
|