1 # -*- coding: utf-8 -*-
4 # www.unwetterzentrale.de und www.uwz.at
9 import xml.sax.saxutils as util
11 from Plugins.Plugin import PluginDescriptor
12 from twisted.web.client import getPage
13 from twisted.internet import reactor
14 from Screens.Screen import Screen
15 from Screens.Console import Console
16 from Components.ActionMap import ActionMap
17 from Components.Label import Label
18 from Components.MenuList import MenuList
19 from Components.AVSwitch import AVSwitch
20 from Components.Pixmap import Pixmap
21 from enigma import eTimer, ePicLoad
22 from re import sub, search, findall
26 val = AVSwitch().getAspectRatioSetting()
29 ###############################################################################
31 class PictureView(Screen):
33 <screen position="0,0" size="720,576" flags="wfNoBorder" title="UWZ" >
34 <eLabel position="0,0" zPosition="1" size="720,576" backgroundColor="black" />
35 <ePixmap position="635,540" zPosition="2" size="36,20" pixmap="skin_default/buttons/key_info.png" alphatest="on" />
36 <widget name="picture" position="80,10" zPosition="2" size="550,550" />
39 def __init__(self, session):
40 self.skin = PictureView.skin
41 Screen.__init__(self, session)
43 self.aspect = getAspect()
44 self.picfile = "/tmp/uwz.png"
46 self["picture"] = Pixmap()
48 self["actions"] = ActionMap(["OkCancelActions","MovieSelectionActions"],
52 "showEventInfo": self.HelpView,
55 self.picload = ePicLoad()
56 sc = AVSwitch().getFramebufferScale()
57 self.picload.setPara((550, 550, sc[0], sc[1], 0, 0, '#ff000000'))
58 self.picload.PictureData.get().append(self.gotPic)
59 self.onLayoutFinish.append(self.getPic)
62 self.picload.startDecode(self.picfile)
64 def gotPic(self, picInfo = None):
65 ptr = self.picload.getData()
67 self["picture"].instance.setPixmap(ptr.__deref__())
70 self.session.openWithCallback(self.getPic ,HelpPictureView)
76 class HelpPictureView(Screen):
78 <screen position="25,200" size="670,290" title="Warnstufen" >
79 <eLabel position="0,0" zPosition="1" size="670,290" backgroundColor="black" />
80 <ePixmap position="320,260" zPosition="2" size="36,20" pixmap="skin_default/arrowdown.png" alphatest="on" />
81 <widget name="picture" position="-10,20" zPosition="2" size="690,225" />
84 def __init__(self, session):
85 self.skin = HelpPictureView.skin
86 Screen.__init__(self, session)
88 self["picture"] = Pixmap()
90 self["actions"] = ActionMap(["OkCancelActions", "DirectionActions"],
98 self.aspect = getAspect()
100 pluginpath + "/W_gruen.gif",
101 pluginpath + "/W_gelb.gif",
102 pluginpath + "/W_orange.gif",
103 pluginpath + "/W_rot.gif",
104 pluginpath + "/W_violett.gif"
108 self.picload = ePicLoad()
109 sc = AVSwitch().getFramebufferScale()
110 self.picload.setPara((690, 225, sc[0], sc[1], 0, 0, '#ff000000'))
111 self.picload.PictureData.get().append(self.gotPic)
113 self.onShown.append(self.getPic)
116 self.picload.startDecode(self.list[self.index])
118 def gotPic(self, picInfo = None):
119 ptr = self.picload.getData()
121 self["picture"].instance.setPixmap(ptr.__deref__())
138 class UnwetterMain(Screen):
141 <screen position="110,83" size="530,430" title="Unwetterzentrale" >
142 <widget name="hmenu" position="5,0" zPosition="1" size="530,220" scrollbarMode="showOnDemand" />
143 <widget name="thumbnail" position="185,250" zPosition="2" size="140,150" />
144 <widget name="thumbland" position="435,390" zPosition="2" size="90,40" />
145 <ePixmap position="20,380" zPosition="2" size="36,20" pixmap="skin_default/buttons/key_menu.png" alphatest="on" />
146 <widget name="statuslabel" position="5,410" zPosition="2" size="530,20" font="Regular;16" halign=\"left\"/>
149 def __init__(self, session):
150 self.loadinginprogress = False
151 self.skin = UnwetterMain.skin
152 self.session = session
153 Screen.__init__(self, session)
155 self["statuslabel"] = Label()
156 self["thumbland"] = Pixmap()
157 self["thumbnail"] = Pixmap()
158 self["hmenu"] = MenuList([])
159 self["actions"] = ActionMap(["OkCancelActions", "DirectionActions", "MovieSelectionActions"],
163 "right": self.rightDown,
167 "contextMenu": self.switchDeA,
170 self.aspect = getAspect()
171 self.menueintrag = []
173 self.picfile = "/tmp/uwz.png"
174 self.picweatherfile = pluginpath + "/wetterreport.jpg"
175 self.reportfile = "/tmp/uwz.report"
178 f = open(pluginpath + "/last.cfg","r")
184 if self.land == "de":
185 self.baseurl = "http://www.unwetterzentrale.de/uwz/"
186 self.menuurl = self.baseurl + "index.html"
187 self.weatherreporturl = self.baseurl + "lagebericht.html"
189 self.baseurl = "http://www.uwz.at/"
190 self.menuurl = self.baseurl + "index.php"
191 self.weatherreporturl = self.baseurl + "lagebericht.php"
195 self.picload = ePicLoad()
197 # self.onLayoutFinish.append(self.go)
199 self.ThumbTimer = eTimer()
200 self.ThumbTimer.callback.append(self.showThumb)
201 self.ThumbTimer.start(1000, True)
203 def hauptmenu(self,output):
204 self.loadinginprogress = False
205 trans = { 'ß' : 'ß' , 'ä' : 'ä' , 'ö' : 'ö' , 'ü' : 'ü' , 'Ä' : 'Ä', 'Ö' : 'Ö' , 'Ü' : 'Ü'}
206 output= util.unescape(output,trans)
208 if self.land == "de":
209 startpos = output.find('<!-- Anfang Navigation -->')
210 endpos = output.find('<!-- Ende Navigation -->')
211 bereich = output[startpos:endpos]
212 a = findall(r'href=(?P<text>.*?)</a>',bereich)
214 x = x.replace('">',"#").replace('"',"").split('#')
218 link = self.baseurl + x[0]
219 self.menueintrag.append(name)
220 self.link.append(link)
222 startpos = output.find('<div id="mainWindow">')
223 endpos = output.find('<a class="menua" href="http://www.austrowetter.at"')
224 bereich = output[startpos:endpos]
225 a = findall(r'<a class="menub" href=(?P<text>.*?)</a>',bereich)
227 x = x.replace('">',"#").replace('"',"").replace(' style=font-weight:;',"")
233 link = self.baseurl + x[0]
234 self.menueintrag.append(name)
235 self.link.append(link)
237 self["statuslabel"].setText("")
238 self["hmenu"].l.setList(self.menueintrag)
239 self["hmenu"].instance.moveSelectionTo(0)
244 c = self["hmenu"].getCurrent()
246 x = self.menueintrag.index(c)
248 self.session.open(PictureView)
250 self.downloadWeatherReport()
253 c = self["hmenu"].getCurrent()
255 x = self.menueintrag.index(c)
256 # Wetterlagebericht ist Index 0
259 self["statuslabel"].setText("Loading Data")
260 self.downloadPicUrl(url)
261 self.ThumbTimer.start(1500, True)
272 self["hmenu"].pageUp()
276 self["hmenu"].pageDown()
279 def showThumbLand(self):
281 if self.land == "de":
282 picture = pluginpath + "/uwz.png"
284 picture = pluginpath + "/uwzat.png"
285 picload = self.picload
286 sc = AVSwitch().getFramebufferScale()
287 picload.setPara((90, 40, sc[0], sc[1], 0, 0, '#ff000000'))
288 l = picload.PictureData.get()
290 l.append(self.gotThumbLand)
291 picload.startDecode(picture)
293 def gotThumbLand(self, picInfo = None):
294 ptr = self.picload.getData()
296 self["thumbland"].instance.setPixmap(ptr.__deref__())
300 if self.land == "de":
301 width = 142 ; height = 150
303 width = 142 ; height = 135
304 c = self["hmenu"].getCurrent()
306 x = self.menueintrag.index(c)
308 picture = self.picfile
310 picture = self.picweatherfile
313 picload = self.picload
314 sc = AVSwitch().getFramebufferScale()
315 picload.setPara((width, height, sc[0], sc[1], 0, 0, '#ff000000'))
316 l = picload.PictureData.get()
318 l.append(self.gotThumb)
319 picload.startDecode(picture)
321 def gotThumb(self, picInfo = None):
322 ptr = self.picload.getData()
324 self["statuslabel"].setText("")
325 self["thumbnail"].show()
326 self["thumbnail"].instance.setPixmap(ptr.__deref__())
328 self["thumbnail"].hide()
330 def getPicUrl(self,output):
331 self.loadinginprogress = False
332 if self.land == "de":
333 startpos = output.find('<!-- Anfang msg_Box Content -->')
334 endpos = output.find('<!-- Ende msg_Box Content -->')
335 bereich = output[startpos:endpos]
336 picurl = search(r'<img src="(?P<text>.*?)" width=',bereich)
337 picurl = self.baseurl + picurl.group(1)
339 picurl = search(r'<img src="showMap(?P<text>.*?)" alt=',output)
340 picurl = self.baseurl + "showMap" + picurl.group(1).replace('&','&')
341 self.downloadPic(picurl)
343 def getPic(self,output):
344 self.loadinginprogress = False
345 f = open(self.picfile, "wb")
349 def getWeatherReport(self,output):
350 self.loadinginprogress = False
351 if self.land == "de":
352 trans = { 'ß' : 'ß' , 'ä' : 'ä' , 'ö' : 'ö' , 'ü' : 'ü' , 'Ä' : 'Ä', 'Ö' : 'Ö' , 'Ü' : 'Ü'}
353 output= util.unescape(output,trans)
354 startpos = output.find('<!-- Anfang msg_Box Content -->')
355 endpos = output.find('<!-- Ende msg_Box Content -->')
356 bereich = output[startpos:endpos]
358 startpos = output.find('<div class="content">')
359 endpos = output.find('<div class="rs_title">Unwettermeldungen</div>')
360 bereich = output[startpos:endpos]
361 u_bereich = bereich.decode("iso-8859-1")
362 bereich = u_bereich.encode("utf-8")
363 bereich = sub('<br />',"\n",bereich)
365 bereich = sub('<[^>]*>',"",bereich)
366 bereich = sub('Fronten- und Isobarenkarte.*',"",bereich)
367 bereich = bereich.strip()
368 bereich = sub("\n\s*\n*", "\n\n", bereich)
370 f = open(self.reportfile, "w")
371 f.write("%s" % bereich)
373 self.session.open(Console,_("Warnlagebericht"),["cat %s" % self.reportfile])
375 def downloadError(self,output):
376 self.loadinginprogress = False
377 self["statuslabel"].setText("Fehler beim Download")
379 def downloadMenu(self):
380 self.loadinginprogress = True
381 getPage(self.menuurl).addCallback(self.hauptmenu).addErrback(self.downloadError)
383 def downloadPicUrl(self,url):
384 self.loadinginprogress = True
385 getPage(url).addCallback(self.getPicUrl).addErrback(self.downloadError)
387 def downloadPic(self,picurl):
388 self.loadinginprogress = True
389 # self["statuslabel"].setText("Lade Bild: %s" % picurl)
390 getPage(picurl).addCallback(self.getPic).addErrback(self.downloadError)
392 def downloadWeatherReport(self):
393 self.loadinginprogress = True
394 # self["statuslabel"].setText("Lade Report: %s" % self.weatherreporturl)
395 getPage(self.weatherreporturl).addCallback(self.getWeatherReport).addErrback(self.downloadError)
398 self.menueintrag = []
400 if self.land == "de":
402 self.baseurl = "http://www.uwz.at/"
403 self.menuurl = self.baseurl + "index.php"
404 self.weatherreporturl = self.baseurl + "lagebericht.php"
407 self.baseurl = "http://www.unwetterzentrale.de/uwz/"
408 self.menuurl = self.baseurl + "index.html"
409 self.weatherreporturl = self.baseurl + "lagebericht.html"
411 f = open(pluginpath + "/last.cfg","w")
415 self.ThumbTimer.start(1500, True)
418 if self.loadinginprogress:
419 reactor.callLater(1,self.exit)
423 unlink(self.reportfile)
429 #############################
431 def main(session, **kwargs):
432 session.open(UnwetterMain)
434 def Plugins(path,**kwargs):
437 return PluginDescriptor(
438 name="Unwetterzentrale",
439 description="www.unwetterzentrale.de und www.uwz.at",
441 where = PluginDescriptor.WHERE_PLUGINMENU,