[hbbtv] fix crash
[vuplus_dvbapp] / lib / python / Plugins / Extensions / HbbTV / hbbtv.py
1 from Screens.Screen import Screen
2
3 from enigma import eTimer, fbClass, eRCInput
4
5 import struct, vbcfg
6
7 from __init__ import _
8 from vbipc import VBController
9
10 class HbbTVWindow(Screen):
11         skin = """
12                 <screen name="HbbTVWindow" position="0,0" size="1280,720" backgroundColor="transparent" flags="wfNoBorder" title="HbbTV Plugin">
13                 </screen>
14                 """
15         def __init__(self, session, url=None, app_info=None):
16                 vbcfg.g_position = vbcfg.getPosition()
17                 fbClass.getInstance().lock()
18                 eRCInput.getInstance().lock()
19
20                 Screen.__init__(self, session)
21
22                 self._url = url
23                 self._info = app_info
24
25                 self.onLayoutFinish.append(self.start_hbbtv_application)
26
27                 self._close_timer = eTimer()
28                 self._close_timer.callback.append(self.stop_hbbtv_application)
29
30                 try:
31                         if self._cb_set_title not in vbcfg.g_main.vbhandler.onSetTitleCB:
32                                 vbcfg.g_main.vbhandler.onSetTitleCB.append(self._cb_set_title)
33                 except Exception:
34                         pass
35
36                 try:
37                         if self._cb_close_window not in vbcfg.g_main.vbhandler.onCloseCB:
38                                 vbcfg.g_main.vbhandler.onCloseCB.append(self._cb_close_window)
39                 except Exception:
40                         pass
41
42         def _cb_set_title(self, title=None):
43                 vbcfg.LOG("pate title: %s" % title)
44                 if title is None:
45                         return
46                 self.setTitle(title)
47
48         def _cb_close_window(self):
49                 self._close_timer.start(1000)
50
51         def start_hbbtv_application(self):
52                 vbcfg.g_main.vbhandler.soft_volume = -1
53                 self.setTitle(_('HbbTV Plugin'))
54                 vbcfg.LOG("Starting HbbTV")
55
56                 vbcfg.DEBUG("url : %s" % self._url and self._url)
57                 vbcfg.DEBUG("info: %s" % self._info and self._info)
58
59                 if self._info and self._info["control"] == 1 and vbcfg.g_channel_info is not None:
60                         (sid, onid, tsid, name) = vbcfg.g_channel_info
61                         params = struct.pack('iiiiii', 0, self._info["orgid"], sid, onid, tsid, 0) + vbcfg.g_channel_info[3]
62                         ret = VBController.command('HBBTV_LOADAIT', params)
63                 else:
64                         ret = VBController.command('HBBTV_OPENURL', self._url)
65
66                 if ret is False:
67                         self._close_timer.start(1000)
68                         vbcfg.ERR("Failed to start hbbtv")
69
70         def stop_hbbtv_application(self):
71                 self._close_timer.stop()
72                 self._close_timer = None
73
74                 try:
75                         if self._cb_set_title in vbcfg.g_main.vbhandler.onSetTitleCB:
76                                 vbcfg.g_main.vbhandler.onSetTitleCB.remove(self._cb_set_title)
77                 except Exception:
78                         pass
79
80                 try:
81                         if self._cb_close_window in vbcfg.g_main.vbhandler.onCloseCB:
82                                 vbcfg.g_main.vbhandler.onCloseCB.remove(self._cb_close_window)
83                 except Exception:
84                         pass
85
86                 from enigma import getDesktop, gMainDC
87                 dsk = getDesktop(0)
88                 desktop_size = dsk.size()
89                 gMainDC.getInstance().setResolution(desktop_size.width(), desktop_size.height())
90
91                 vbcfg.setPosition(vbcfg.g_position)
92                 fbClass.getInstance().unlock()
93                 eRCInput.getInstance().unlock()
94                 dsk.paint()
95
96                 vbcfg.LOG("Stop HbbTV")
97                 self.close()
98