EPGRefreshResource.py: fix editing services
[enigma2-plugins.git] / epgrefresh / src / EPGRefreshResource.py
1 from twisted.web import http, resource
2 from EPGRefresh import epgrefresh
3 from EPGRefreshService import EPGRefreshService
4 from enigma import eServiceReference
5 from Components.config import config
6 from time import localtime
7 from urllib import unquote
8
9 class EPGRefreshStartRefreshResource(resource.Resource):
10         def render(self, req):
11                 state = False
12
13                 if epgrefresh.forceRefresh():
14                         output = "initiated refresh"
15                         state = True
16                 else:
17                         output = "could not initiate refresh"
18
19                 req.setResponseCode(http.OK)
20                 req.setHeader('Content-type', 'application; xhtml+xml')
21                 req.setHeader('charset', 'UTF-8')
22
23                 return """<?xml version=\"1.0\" encoding=\"UTF-8\" ?>
24 <e2simplexmlresult>
25  <e2state>%s</e2state>
26  <e2statetext>%s</e2statetext>
27 </e2simplexmlresult>""" % ('true' if state else 'false', output)
28
29 class EPGRefreshAddRemoveServiceResource(resource.Resource):
30         TYPE_ADD = 0
31         TYPE_DEL = 1
32
33         def __init__(self, type):
34                 assert(type in (self.TYPE_ADD, self.TYPE_DEL))
35                 self.type = type
36
37         def render(self, req):
38                 do_add = self.type == self.TYPE_ADD
39                 state = False
40
41                 if 'multi' in req.args:
42                         if epgrefresh.services[0]:
43                                 epgrefresh.services[0].clear()
44                                 state = True
45                         if epgrefresh.services[1]:
46                                 epgrefresh.services[1].clear()
47                                 state = True
48
49                 if 'sref' in req.args:
50                         duration = req.args.get("duration", None)
51                         try:
52                                 duration = duration and int(duration)
53                         except ValueError, ve:
54                                 output = 'invalid value for "duration": ' + str(duration)
55                         else:
56                                 for sref in req.args.get('sref'):
57                                         sref = unquote(sref)
58                                         ref = eServiceReference(sref)
59                                         if not ref.valid():
60                                                 output = 'invalid value for "sref": ' + str(sref)
61                                         elif (ref.flags & 7) == 7:
62                                                 epgservice = EPGRefreshService(sref, duration)
63                                                 # bouquet
64                                                 if epgservice in epgrefresh.services[1]:
65                                                         if do_add:
66                                                                 output = "bouquet already in list"
67                                                         else:
68                                                                 epgrefresh.services[1].remove(epgservice)
69                                                                 output = "bouquet removed from list"
70                                                                 state = True
71                                                 else:
72                                                         if do_add:
73                                                                 epgrefresh.services[1].add(epgservice)
74                                                                 output = "bouquet added to list"
75                                                                 state = True
76                                                         else:
77                                                                 output = "bouquet not in list"
78                                         else:
79                                                 if not (ref.flags & eServiceReference.isGroup):
80                                                         # strip all after last :
81                                                         pos = sref.rfind(':')
82                                                         if pos != -1:
83                                                                 if sref[pos-1] == ':':
84                                                                         pos -= 1
85                                                                 sref = sref[:pos+1]
86
87                                                 epgservice = EPGRefreshService(sref, duration)
88                                                 # assume service
89                                                 if epgservice in epgrefresh.services[0]:
90                                                         if do_add:
91                                                                 output = "service already in list"
92                                                         else:
93                                                                 epgrefresh.services[0].remove(epgservice)
94                                                                 output = "service removed from list"
95                                                                 state = True
96                                                 else:
97                                                         if do_add:
98                                                                 epgrefresh.services[0].add(epgservice)
99                                                                 output = "service added to list"
100                                                                 state = True
101                                                         else:
102                                                                 output = "service not in list"
103
104                                 # save if list changed
105                                 if state:
106                                         epgrefresh.saveConfiguration()
107                 else:
108                         output = 'missing argument "sref"'
109
110                 if 'multi' in req.args:
111                         output = 'service restriction changed'
112
113                 req.setResponseCode(http.OK)
114                 req.setHeader('Content-type', 'application; xhtml+xml')
115                 req.setHeader('charset', 'UTF-8')
116                 
117                 return """<?xml version=\"1.0\" encoding=\"UTF-8\" ?>
118 <e2simplexmlresult>
119  <e2state>%s</e2state>
120  <e2statetext>%s</e2statetext>
121 </e2simplexmlresult> """ % ('True' if state else 'False', output)
122
123 class EPGRefreshListServicesResource(resource.Resource):
124         def render(self, req):
125                 # show xml
126                 req.setResponseCode(http.OK)
127                 req.setHeader('Content-type', 'application; xhtml+xml')
128                 req.setHeader('charset', 'UTF-8')
129                 return ''.join(epgrefresh.buildConfiguration(webif = True))
130
131 class EPGRefreshChangeSettingsResource(resource.Resource):
132         def render(self, req):
133                 statetext = "config changed."
134                 for key, value in req.args.iteritems():
135                         value = value[0]
136                         if key == "enabled":
137                                 config.plugins.epgrefresh.enabled.value = True if value == "true" else False
138                         elif key == "enablemessage":
139                                 config.plugins.epgrefresh.enablemessage.value = True if value == "true" else False
140                         elif key == "begin":
141                                 value = int(value)
142                                 if value:
143                                         t = localtime(value)
144                                         config.plugins.epgrefresh.begin.value = [t.tm_hour, t.tm_min]
145                         elif key == "end":
146                                 value = int(value)
147                                 if value:
148                                         t = localtime(int(value))
149                                         config.plugins.epgrefresh.end.value = [t.tm_hour, t.tm_min]
150                         elif key == "interval":
151                                 value = int(value)
152                                 if value:
153                                         config.plugins.epgrefresh.interval.value = value
154                         elif key == "delay_standby":
155                                 value = int(value)
156                                 if value:
157                                         config.plugins.epgrefresh.delay_standby.value = value
158                         elif key == "inherit_autotimer":
159                                 config.plugins.epgrefresh.inherit_autotimer.value = True if value == "true" else False
160                         elif key == "afterevent":
161                                 config.plugins.epgrefresh.afterevent.value = True if value == "true" else False
162                         elif key == "force":
163                                 config.plugins.epgrefresh.force.value = True if value == "true" else False
164                         elif key == "wakeup":
165                                 config.plugins.epgrefresh.wakeup.value = True if value == "true" else False
166                         elif key == "parse_autotimer":
167                                 config.plugins.epgrefresh.parse_autotimer.value = True if value == "true" else False
168                         elif key == "background":
169                                 statetext += " parameter \"background\" is deprecated. please use new \"adapter\" parameter instead."
170                                 config.plugins.epgrefresh.adapter.value = "pip_hidden" if value == "true" else "main"
171                         elif key == "adapter":
172                                 if value in config.plugins.epgrefresh.adapter.choices:
173                                         config.plugins.epgrefresh.adapter.value = value
174
175                 config.plugins.epgrefresh.save()
176
177                 if config.plugins.epgrefresh.enabled.value:
178                         epgrefresh.start()
179                 else:
180                         epgrefresh.stop()
181
182                 req.setResponseCode(http.OK)
183                 req.setHeader('Content-type', 'application; xhtml+xml')
184                 req.setHeader('charset', 'UTF-8')
185
186                 return """<?xml version=\"1.0\" encoding=\"UTF-8\" ?>
187 <e2simplexmlresult>
188  <e2state>true</e2state>
189  <e2statetext>%s</e2statetext>
190 </e2simplexmlresult>""" % (statetext,)
191
192 class EPGRefreshSettingsResource(resource.Resource):
193         def render(self, req):
194                 req.setResponseCode(http.OK)
195                 req.setHeader('Content-type', 'application; xhtml+xml')
196                 req.setHeader('charset', 'UTF-8')
197
198                 from time import time, localtime, mktime
199                 now = localtime()
200                 begin_h = config.plugins.epgrefresh.begin.value
201                 begin = mktime((
202                         now.tm_year, now.tm_mon, now.tm_mday, begin_h[0], begin_h[1],
203                         0, now.tm_wday, now.tm_yday, now.tm_isdst)
204                 )
205                 end_h = config.plugins.epgrefresh.end.value
206                 end = mktime((
207                         now.tm_year, now.tm_mon, now.tm_mday, end_h[0], end_h[1],
208                         0, now.tm_wday, now.tm_yday, now.tm_isdst)
209                 )
210
211                 return """<?xml version=\"1.0\" encoding=\"UTF-8\" ?>
212 <e2settings>
213  <e2setting>
214   <e2settingname>config.plugins.epgrefresh.enabled</e2settingname>
215   <e2settingvalue>%s</e2settingvalue>
216  </e2setting>
217  <e2setting>
218   <e2settingname>config.plugins.epgrefresh.enablemessage</e2settingname>
219   <e2settingvalue>%s</e2settingvalue>
220  </e2setting>
221  <e2setting>
222   <e2settingname>config.plugins.epgrefresh.begin</e2settingname>
223   <e2settingvalue>%d</e2settingvalue>
224  </e2setting>
225  <e2setting>
226   <e2settingname>config.plugins.epgrefresh.end</e2settingname>
227   <e2settingvalue>%d</e2settingvalue>
228  </e2setting>
229  <e2setting>
230   <e2settingname>config.plugins.epgrefresh.interval</e2settingname>
231   <e2settingvalue>%d</e2settingvalue>
232  </e2setting>
233  <e2setting>
234   <e2settingname>config.plugins.epgrefresh.delay_standby</e2settingname>
235   <e2settingvalue>%d</e2settingvalue>
236  </e2setting>
237  <e2setting>
238   <e2settingname>config.plugins.epgrefresh.inherit_autotimer</e2settingname>
239   <e2settingvalue>%s</e2settingvalue>
240  </e2setting>
241  <e2setting>
242   <e2settingname>config.plugins.epgrefresh.afterevent</e2settingname>
243   <e2settingvalue>%s</e2settingvalue>
244  </e2setting>
245  <e2setting>
246   <e2settingname>config.plugins.epgrefresh.force</e2settingname>
247   <e2settingvalue>%s</e2settingvalue>
248  </e2setting>
249  <e2setting>
250   <e2settingname>config.plugins.epgrefresh.wakeup</e2settingname>
251   <e2settingvalue>%s</e2settingvalue>
252  </e2setting>
253  <e2setting>
254   <e2settingname>config.plugins.epgrefresh.parse_autotimer</e2settingname>
255   <e2settingvalue>%s</e2settingvalue>
256  </e2setting>
257  <e2setting>
258   <!-- deprecated, pending removal -->
259   <e2settingname>config.plugins.epgrefresh.background</e2settingname>
260   <e2settingvalue>%s</e2settingvalue>
261  </e2setting>
262  <e2setting>
263   <e2settingname>config.plugins.epgrefresh.adapter</e2settingname>
264   <e2settingvalue>%s</e2settingvalue>
265  </e2setting>
266 </e2settings>""" % (
267                                 config.plugins.epgrefresh.enabled.value,
268                                 config.plugins.epgrefresh.enablemessage.value,
269                                 begin,
270                                 end,
271                                 config.plugins.epgrefresh.interval.value,
272                                 config.plugins.epgrefresh.delay_standby.value,
273                                 config.plugins.epgrefresh.inherit_autotimer.value,
274                                 config.plugins.epgrefresh.afterevent.value,
275                                 config.plugins.epgrefresh.force.value,
276                                 config.plugins.epgrefresh.wakeup.value,
277                                 config.plugins.epgrefresh.parse_autotimer.value,
278                                 config.plugins.epgrefresh.adapter.value in ("pip", "pip_hidden"),
279                                 config.plugins.epgrefresh.adapter.value,
280                         )
281