-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathservice.py
More file actions
101 lines (75 loc) · 4.08 KB
/
service.py
File metadata and controls
101 lines (75 loc) · 4.08 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
#!/usr/bin/env python
import sys, os, json
from twisted.internet import reactor
from twisted.internet import task
from CallListenerClients.FritzboxClient import FritzboxClient
from CallListenerClients.NcidClient import NcidClient
from Yac.YacServer import YacServer
runningOutsideXbmc = False
try:
import xbmc, xbmcgui, xbmcaddon
except ImportError, e:
print "Could not find xbmc modules!"
sys.exit()
clientPool = {}
serverPool = {}
resolverPool = {}
xbmcAddon = xbmcaddon.Addon()
xbmcDialog = xbmcgui.Dialog()
notificationTimeout = int(int(xbmcAddon.getSetting("notification.duration"))*1000)
notificationIcon = os.path.join(xbmcAddon.getAddonInfo("path"), "resources", "media", "icon_ring.png")
def parseBoolString(theString):
"""
parses a string like 'True' to bool value
@type theString: str
@param theString: String to convert
"""
return theString[0].upper() == 'T'
def handleIncomingCall(caller):
"""
handles the incoming call in the reactor loop
@type caller: Caller
@param caller: The Caller Object
"""
if caller.caller == "Unknown":
caller.caller = xbmcaddon.getLocalizedString(30602)
xbmc.executebuiltin("XBMC.Notification(%s,%s,%s,%s)" % (xbmcAddon.getLocalizedString(30601) % caller.caller,
caller.number,
int(notificationTimeout),
notificationIcon
))
activePlayers = json.loads(xbmc.executeJSONRPC('{"jsonrpc": "2.0", "method": "Player.GetActivePlayers", "id": 1}'))
if parseBoolString(xbmcAddon.getSetting("general.pause_playback.enabled")):
for player in activePlayers["result"]:
xbmc.executeJSONRPC('{"jsonrpc": "2.0", "method": "Player.PlayPause", "params": { "playerid": %s, "play": false }, "id": 1}' % player["playerid"])
if parseBoolString(xbmcAddon.getSetting("general.lower_volume.enabled")):
targetVolume = int(xbmcAddon.getSetting("general.lower_volume.to"))
currentVolume = json.loads(xbmc.executeJSONRPC('{"jsonrpc": "2.0", "method": "Application.GetProperties", "params": { "properties": ["volume"] }, "id": 1}'))
if int(currentVolume["result"]["volume"]) >= targetVolume:
xbmc.executeJSONRPC('{"jsonrpc": "2.0", "method": "Application.SetVolume", "params": { "volume": %s }, "id": 1}' % targetVolume)
if parseBoolString(xbmcAddon.getSetting("general.mute_volume.enabled")):
mutedState = json.loads(xbmc.executeJSONRPC('{"jsonrpc": "2.0", "method": "Application.GetProperties", "params": { "properties": ["muted"] }, "id": 1}'))
if not mutedState['result']['muted']:
xbmc.executeJSONRPC('{"jsonrpc": "2.0", "method": "Application.SetMute", "params": { "mute": true }, "id": 1}')
def bootServices():
if parseBoolString(xbmcAddon.getSetting("server.yac.enabled")):
xbmc.log("Starting YAC Server ", xbmc.LOGDEBUG)
serverPool['yac'] = YacServer(int(xbmcAddon.getSetting("server.yac.listen_port")), handleIncomingCall)
serverPool['yac'].start()
if parseBoolString(xbmcAddon.getSetting("client.fritzbox.enabled")):
#xbmc.log("Starting Fritzbox Client", xbmc.LOGDEBUG)
clientPool['fritzbox'] = FritzboxClient(xbmcAddon.getSetting("client.fritzbox.host"), handleIncomingCall)
if parseBoolString(xbmcAddon.getSetting("client.ncid.enabled")):
#xbmc.log("Starting Fritzbox Client", xbmc.LOGDEBUG)
clientPool['ncid'] = NcidClient(host=xbmcAddon.getSetting("client.ncid.host"),
port=int(xbmcAddon.getSetting("client.ncid.port")),
onCallIncoming=handleIncomingCall)
l = task.LoopingCall(shouldWeExit)
l.start(0.5)
reactor.run(installSignalHandlers=0)
def shouldWeExit():
if xbmc.abortRequested == True:
xbmc.log("shouldWeExit() - Indeed, we better stop reactor now...", xbmc.LOGDEBUG)
reactor.stop()
if __name__ == "__main__":
bootServices()