X-Git-Url: http://code.vuplus.com/gitweb/?p=vuplus_dvbapp;a=blobdiff_plain;f=lib%2Fpython%2FPlugins%2FExtensions%2FHbbTV%2Fplugin.py;h=868f86a7968ff38f89e512b9ad76598c1c8d5e92;hp=56db6d850696d6a27cc5a27a6d53ae33391fc2b3;hb=b0a3576ead32c0be4a72904b64b5d68653fa6a24;hpb=2d38f881ad0c980623ffccf7fac82318d4764a40;ds=sidebyside diff --git a/lib/python/Plugins/Extensions/HbbTV/plugin.py b/lib/python/Plugins/Extensions/HbbTV/plugin.py index 56db6d8..868f86a 100644 --- a/lib/python/Plugins/Extensions/HbbTV/plugin.py +++ b/lib/python/Plugins/Extensions/HbbTV/plugin.py @@ -57,8 +57,43 @@ class GlobalValues: need_restart = False plugin_browser = None + + resX = 0 + resY = 0 + def UpdateInfoBar(self): + if self.resX == 1024 and self.resY == 720: + return + try: + infobar = InfoBar.instance + if infobar._InfoBarShowHide__state != 3: + return + infobar.doTimerHide() + infobar.serviceStarted() + except: pass + __gval__ = GlobalValues() +def setDefaultResolution(x, y): + global __gval__ + __gval__.resX = x + __gval__.resY = y + +def setResolution(xres, yres): + global __gval__ + if __gval__.resX == 1280 and __gval__.resY == 720: + return + from enigma import gMainDC + gMainDC.getInstance().setResolution(xres, yres) + +def restoreResolution(): + global __gval__ + setResolution(1280, 720) + setResolution(__gval__.resX, __gval__.resY) + + if __gval__.resX == 1280 and __gval__.resY == 720: + return + __gval__.UpdateInfoBar() + def setPluginBrowser(browser=None): global __gval__ __gval__.plugin_browser = browser @@ -216,6 +251,7 @@ class OpCodeSet: ,"OP_BROWSER_VKBD_PASTE_MOUSE" : 0x030D ,"OP_BROWSER_MENU_REQ" : 0x030E ,"OP_BROWSER_MENU_RES" : 0x030F + ,"OP_BROWSER_NEED_RELOAD_KEYMAP": 0x0313 ,"OP_DVBAPP_VOL_UP" : 0x0401 ,"OP_DVBAPP_VOL_DOWN" : 0x0402 ,"OP_SYSTEM_OUT_OF_MEMORY" : 0x0501 @@ -251,6 +287,7 @@ class OpCodeSet: ,0x030D : "OP_BROWSER_VKBD_PASTE_MOUSE" ,0x030E : "OP_BROWSER_MENU_REQ" ,0x030F : "OP_BROWSER_MENU_RES" + ,0x0313 : "OP_BROWSER_NEED_RELOAD_KEYMAP" ,0x0401 : "OP_DVBAPP_VOL_UP" ,0x0402 : "OP_DVBAPP_VOL_DOWN" ,0x0501 : "OP_SYSTEM_OUT_OF_MEMORY" @@ -530,6 +567,7 @@ class HandlerHbbTV(Handler): def _cb_handleBrowserMenuReq(self, opcode, data): self._handle_dump(self._cb_handleBrowserMenuReq, opcode, data) + restoreResolution() fbClass.getInstance().unlock() eRCInput.getInstance().unlock() browser = getPluginBrowser() @@ -573,10 +611,12 @@ class HandlerHbbTV(Handler): def _cb_virtualKeyboardClosed(self, data=None): fbClass.getInstance().lock() eRCInput.getInstance().lock() + setResolution(1280, 720) command_util = getCommandUtil() command_util.sendCommand('OP_BROWSER_VKBD_RES', data) def _cb_handleShowVirtualKeyboard(self, opcode, data): self._handle_dump(self._cb_handleShowVirtualKeyboard, opcode, data) + restoreResolution() fbClass.getInstance().unlock() eRCInput.getInstance().unlock() if data == 0 or strIsEmpty(data): @@ -673,7 +713,7 @@ class HandlerHbbTV(Handler): return (channel_list_size, struct.pack('!IIII', sid, onid, tsid, namelen) + name) def _cb_handleSetPageTitle(self, opcode, data): - self._handle_dump(self._cb_handleCloseHbbTVBrowser, opcode, data) + self._handle_dump(self._cb_handleSetPageTitle, opcode, data) if data.startswith('file://') or data.startswith('http://'): return "OK" if self._on_set_title_cb is not None: @@ -708,6 +748,8 @@ class HandlerHbbTV(Handler): if before_service is not None: self._session.nav.playService(before_service) self._vod_uri = None + + restoreResolution() return (0, "OK") def _cb_handleVODPlayerURI(self, opcode, data): @@ -783,6 +825,7 @@ class HbbTVWindow(Screen, InfoBarNotifications): """ def __init__(self, session, url=None, cbf=None, useAIT=False, profile=0): self._session = session + setResolution(1280, 720) fbClass.getInstance().lock() eRCInput.getInstance().lock() @@ -853,6 +896,9 @@ class HbbTVWindow(Screen, InfoBarNotifications): print ErrMsg def _serviceEOF(self): + (position,length) = self.getVodPlayTime() + self._ssm.setStatus(length, length, 1) + print "service EOF" self._currentServicePositionTimer.stop() def _layoutFinished(self): @@ -888,6 +934,7 @@ class HbbTVWindow(Screen, InfoBarNotifications): if self._cb_closed_func is not None: self._cb_closed_func() except: pass + restoreResolution() fbClass.getInstance().unlock() eRCInput.getInstance().unlock() self.close() @@ -914,12 +961,12 @@ class HbbTVHelper(Screen): __gval__.command_server = ServerFactory().doListenUnixTCP('/tmp/.sock.hbbtv.url', __gval__.hbbtv_handelr) self._urls = None - #self._stop_opera() - #self._start_opera() - self._restart_opera() Screen.__init__(self, session) self._session = session + + self._restart_opera() + self._timer_infobar = eTimer() self._timer_infobar.callback.append(self._cb_registrate_infobar) self._timer_infobar.start(1000) @@ -934,6 +981,8 @@ class HbbTVHelper(Screen): _g_ssm_ = SimpleSharedMemory() _g_ssm_.doConnect() + self._callbackStartStop = None + def _cb_registrate_infobar(self): if InfoBar.instance: self._timer_infobar.stop() @@ -970,7 +1019,7 @@ class HbbTVHelper(Screen): def _cb_hbbtv_activated(self, title=None, url=None): if not self._is_browser_running(): message = _("HbbTV Browser was not running.\nPlease running browser before start HbbTV Application.") - self.session.open(MessageBox, message, MessageBox.TYPE_INFO) + self._session.open(MessageBox, message, MessageBox.TYPE_INFO) return service = self._session.nav.getCurrentlyPlayingServiceReference() setBeforeService(service) @@ -1010,6 +1059,7 @@ class HbbTVHelper(Screen): global HBBTVAPP_PATH start_command = '%s/launcher start'%(HBBTVAPP_PATH) os.system(start_command) + return True def _stop_opera(self): global HBBTVAPP_PATH @@ -1020,6 +1070,7 @@ class HbbTVHelper(Screen): global HBBTVAPP_PATH try: os.system('%s/launcher restart'%(HBBTVAPP_PATH)) except: pass + return True def getStartHbbTVUrl(self): url, self._urls, self._profile = None, None, 0 @@ -1050,8 +1101,9 @@ class HbbTVHelper(Screen): self._cb_hbbtv_activated(selected[1][1], selected[1][2]) except Exception, ErrMsg: print ErrMsg - def showBrowserConfigBox(self): + def showBrowserConfigBox(self, callback=None): start_stop_mode = [] + self._callbackStartStop = callback if self._is_browser_running(): start_stop_mode.append((_('Stop'),'Stop')) else: start_stop_mode.append((_('Start'),'Start')) @@ -1060,6 +1112,8 @@ class HbbTVHelper(Screen): def _browser_config_selected(self, selected): if selected is None: return + if self._callbackStartStop is not None: + self._callbackStartStop() try: mode = selected[1] if mode == 'Start': @@ -1112,6 +1166,7 @@ class OperaBrowserSetting: self._settingFileName = '/usr/local/hbb-browser/home/setting.ini' self._start = None self._type = None + self._keymap = None self._read() def _read(self): f = open(self._settingFileName) @@ -1122,26 +1177,31 @@ class OperaBrowserSetting: if len(tmp) > 1: self._type = int(tmp[1]) else: self._type = 0 + elif line.startswith('keymap='): + self._keymap = line[7:len(line)-1] f.close() def _write(self): tmpstr = [] tmpstr.append('start=%s %d\n' % (self._start, self._type)) + tmpstr.append('keymap=%s\n' % (self._keymap)) f = open(self._settingFileName, 'w') f.writelines(tmpstr) f.close() - def setData(self, start, types=0): + def setData(self, start, types=0, keymap="us-rc"): self._start = start self._type = types + self._keymap = keymap self._write() def getData(self): return { 'start':self._start, 'type':self._type, + 'keymap':self._keymap, } class OperaBrowserPreferenceWindow(ConfigListScreen, Screen): skin= """ - + @@ -1173,18 +1233,12 @@ class OperaBrowserPreferenceWindow(ConfigListScreen, Screen): if self._currentPageUrl is None: self._currentPageUrl = '' self._startPageUrl = None - + self._keymapType = None self.makeMenuEntry() self.onLayoutFinish.append(self.layoutFinished) def layoutFinished(self): self.setTitle(_('Preference')) - try: - d = OperaBrowserSetting().getData() - self._startPageUrl = d['start'] - #d['type'] - except: self._startPageUrl = 'http://vuplus.com' - self.updateStartPageUrl() def updateStartPageUrl(self): if self.menuItemStartpage.value == "startpage": @@ -1202,7 +1256,10 @@ class OperaBrowserPreferenceWindow(ConfigListScreen, Screen): mode = 0 if url.find('/usr/local/manual') > 0: mode = 1 - OperaBrowserSetting().setData(url, mode) + self._keymapType = self.menuItemKeyboardLayout.value + OperaBrowserSetting().setData(url, mode, self._keymapType) + command_util = getCommandUtil() + command_util.sendCommand('OP_BROWSER_NEED_RELOAD_KEYMAP') self.close() def keyRed(self): @@ -1224,6 +1281,16 @@ class OperaBrowserPreferenceWindow(ConfigListScreen, Screen): ConfigListScreen.keyRight(self) self.updateStartPageUrl() + def getKeymapTypeList(self): + types = [] + for f in os.listdir("/usr/local/hbb-browser/keymap"): + filesplit = f.split('.') + if len(filesplit) < 2: + continue + types.append((filesplit[1], filesplit[1])) + types.sort() + return types + def makeMenuEntry(self): l = [] l.append(("startpage", _("Start Page"))) @@ -1232,11 +1299,27 @@ class OperaBrowserPreferenceWindow(ConfigListScreen, Screen): l.append(("direct", _("Direct Input"))) self.menuItemStartpage = ConfigSelection(default="startpage", choices = l) self.menuEntryStartpage = getConfigListEntry(_("Startpage"), self.menuItemStartpage) + + kl = self.getKeymapTypeList() + + try: + d = OperaBrowserSetting().getData() + self._startPageUrl = d['start'] + self._keymapType = d['keymap'] + #d['type'] + except: self._startPageUrl = 'http://vuplus.com' + self.updateStartPageUrl() + + if self._keymapType is None or len(self._keymapType) == 0: + self._keymapType = "us-rc" + self.menuItemKeyboardLayout = ConfigSelection(default=self._keymapType, choices = kl) + self.menuEntryKeyboardLayout = getConfigListEntry(_("Keyboard Layout"), self.menuItemKeyboardLayout) self.resetMenuList() def resetMenuList(self): self.menulist = [] self.menulist.append(self.menuEntryStartpage) + self.menulist.append(self.menuEntryKeyboardLayout) self["config"].list = self.menulist self["config"].l.setList(self.menulist) @@ -1400,7 +1483,7 @@ class BookmarkEditWindow(ConfigListScreen, Screen): class OperaBrowserBookmarkWindow(Screen): skin = """ - + @@ -1680,21 +1763,25 @@ class OperaBrowser(Screen): SUBMENULIST_HEIGHT = 25 SUBMENULIST_NEXT = 2 + # menulist->position->y : MENUBAR_ITEM_HEIGHT+30 + # menulist->size->x : SUBMENULIST_WIDTH + # submenulist->position->x : SUBMENULIST_WIDTH+50+SUBMENULIST_NEXT + # submenulist->position->y : MENUBAR_ITEM_HEIGHT+30 + # submenulist->size->x : SUBMENULIST_WIDTH skin = """ - + - - + + - - """ % (MENUBAR_ITEM_HEIGHT+30, SUBMENULIST_WIDTH, SUBMENULIST_WIDTH+50+SUBMENULIST_NEXT, MENUBAR_ITEM_HEIGHT+30, SUBMENULIST_WIDTH)# modify menu + + """ - MENUITEMS_LIST =[[(_('Open Startpage'), None), (_('Open URL'), None), (_('Start/Stop'),None), (_('Exit'), None)], - [(_('Bookmark'), None), (_('Preference'), None)], - [(_('About'), None), (_('Help'), None)]] + COMMAND_MAP = {} + MENUITEMS_LIST =[] def __init__(self, session, url=None): Screen.__init__(self, session) self["actions"] = ActionMap(["DirectionActions", "MenuActions", "OkCancelActions"], { @@ -1707,6 +1794,8 @@ class OperaBrowser(Screen): ,"menu" : self.keyMenu }, -2) + self.UpdateLanguageCB() + self._terminatedBrowser = True self._enableKeyEvent = True self._currentPageUrl = None @@ -1736,6 +1825,24 @@ class OperaBrowser(Screen): self._onCloseTimer.callback.append(self._cb_onClose) self.paramUrl = url + language.addCallback(self.UpdateLanguageCB) + + def UpdateLanguageCB(self): + # modify menu + self.MENUITEMS_LIST = [ + [(_('Open Startpage'), None), (_('Open URL'), None), (_('Start/Stop'),None), (_('Exit'), None)], + [(_('Bookmark'), None), (_('Preference'), None)], + [(_('About'), None), (_('Help'), None)]] + self.COMMAND_MAP = {} + self.COMMAND_MAP[_('Exit')] = self._cmd_on_Exit + self.COMMAND_MAP[_('Help')] = self._cmd_on_Help + self.COMMAND_MAP[_('About')] = self._cmd_on_About + self.COMMAND_MAP[_('Open URL')] = self._cmd_on_OpenUrl + self.COMMAND_MAP[_('Start/Stop')] = self._cmd_on_StartStop + self.COMMAND_MAP[_('Bookmark')] = self._cmd_on_Bookmark + self.COMMAND_MAP[_('Preference')] = self._cmd_on_Preference + self.COMMAND_MAP[_('Return')] = self._cmd_on_ReturnToBrowser + self.COMMAND_MAP[_('Open Startpage')] = self._cmd_on_OpenStartpage def enableRCMouse(self, mode): #mode=[0|1]|[False|True] rcmouse_path = "/proc/stb/fp/mouse" @@ -1826,12 +1933,14 @@ class OperaBrowser(Screen): self._on_setPageTitle(_('Opera Browser')) self.enableRCMouse(False) self.toggleMainScreen() + restoreResolution() fbClass.getInstance().unlock() eRCInput.getInstance().unlock() self._terminatedBrowser = True self._enableKeyEvent = True #if not self.toggleListViewFlag: # self.keyDown() + self._currentPageUrl = '' if self.paramUrl is not None: self.keyCancel() @@ -1846,6 +1955,9 @@ class OperaBrowser(Screen): self.setTitle(title) def cbUrlText(self, data=None, mode=0): + global _g_helper + if not _g_helper._is_browser_running(): + return print "Inputed Url :", data, mode if strIsEmpty(data): return @@ -1857,8 +1969,12 @@ class OperaBrowser(Screen): command_server.onHbbTVCloseCB.append(self._on_close_window) self.toggleMainScreen() self.enableRCMouse(True) + fbClass.getInstance().lock() eRCInput.getInstance().lock() + + setResolution(1280, 720) + command_util = getCommandUtil() command_util.sendCommand('OP_BROWSER_OPEN_URL', data, mode) self._terminatedBrowser = False @@ -1871,6 +1987,11 @@ class OperaBrowser(Screen): if data is None: return (url, mode) = data + global _g_helper + if not _g_helper._is_browser_running(): + message = _("Opera Browser was not running.\nPlease running browser using [File]>[Start/Stop] menu.") + self.session.open(MessageBox, message, MessageBox.TYPE_INFO) + return self.cbUrlText(url, mode) def _cmd_on_OpenUrl(self): @@ -1884,11 +2005,14 @@ class OperaBrowser(Screen): self.session.open(MessageBox, _('Opera Web Browser Plugin v1.0'), type = MessageBox.TYPE_INFO) def _cmd_on_Exit(self): self.close() + def _cb_cmdOnStartSTop(self): + self.keyMenu() def _cmd_on_StartStop(self): global _g_helper if _g_helper is None: return - _g_helper.showBrowserConfigBox() + _g_helper.showBrowserConfigBox(self._cb_cmdOnStartSTop) + def _cmd_on_Bookmark(self): url = self._currentPageUrl if url is None: @@ -1923,22 +2047,14 @@ class OperaBrowser(Screen): self.session.open(BrowserHelpWindow) def doCommand(self, command): - # modify menu - cmd_map = {} - cmd_map[_('Exit')] = self._cmd_on_Exit - cmd_map[_('Help')] = self._cmd_on_Help - cmd_map[_('About')] = self._cmd_on_About - cmd_map[_('Open URL')] = self._cmd_on_OpenUrl - cmd_map[_('Start/Stop')] = self._cmd_on_StartStop - cmd_map[_('Bookmark')] = self._cmd_on_Bookmark - cmd_map[_('Preference')] = self._cmd_on_Preference - cmd_map[_('Return')] = self._cmd_on_ReturnToBrowser - cmd_map[_('Open Startpage')] = self._cmd_on_OpenStartpage try: - cmd_map[command]() + self.COMMAND_MAP[command]() except Exception, ErrMsg: print ErrMsg def keyOK(self): + if not self.toggleMainScreenFlag: + self.keyMenu() + return if not self.toggleListViewFlag: self.keyDown() return @@ -2022,6 +2138,7 @@ class OperaBrowser(Screen): #self._session.openWithCallback(self._cb_virtualKeyboardClosed, VirtualKeyBoard, title=("Please enter URL here"), text="") fbClass.getInstance().lock() eRCInput.getInstance().lock() + setResolution(1280, 720) if self.toggleListViewFlag: self.toggleMainScreen() self._currentPageUrl = None @@ -2059,6 +2176,11 @@ from Screens.HelpMenu import HelpableScreen def session_start_main(session, reason, **kwargs): fbClass.getInstance().unlock() eRCInput.getInstance().unlock() + + from enigma import getDesktop + desktopSize = getDesktop(0).size() + setDefaultResolution(desktopSize.width(), desktopSize.height()) + global _g_helper _g_helper = session.open(HbbTVHelper)