X-Git-Url: http://code.vuplus.com/gitweb/?p=vuplus_dvbapp;a=blobdiff_plain;f=lib%2Fpython%2FPlugins%2FExtensions%2FHbbTV%2Fplugin.py;h=d6ed07bf5248e5658721191e8587fdee128662e0;hp=51ef3a53284f4a5c9b4c488b2df8b8c9f58d1ce1;hb=ea5327e8c1b22fa809b4ca8b37af5395cc368312;hpb=ae47ad7a2e951b0412ea10c430e1b52f5a052263 diff --git a/lib/python/Plugins/Extensions/HbbTV/plugin.py b/lib/python/Plugins/Extensions/HbbTV/plugin.py index 51ef3a5..d6ed07b 100644 --- a/lib/python/Plugins/Extensions/HbbTV/plugin.py +++ b/lib/python/Plugins/Extensions/HbbTV/plugin.py @@ -7,7 +7,9 @@ from Screens.MessageBox import MessageBox from Screens.InfoBarGenerics import InfoBarNotifications from Screens.VirtualKeyBoard import VirtualKeyBoard from Screens.HelpMenu import HelpableScreen +from Screens.ChannelSelection import service_types_tv +from Components.Language import language from Components.PluginComponent import plugins from Components.Button import Button from Components.Sources.StaticText import StaticText @@ -20,17 +22,21 @@ from Components.VolumeControl import VolumeControl from Components.Pixmap import Pixmap from Components.config import config, ConfigSubsection, ConfigPosition, getConfigListEntry, ConfigBoolean, ConfigInteger, ConfigText, ConfigSelection, configfile, getCharValue -from enigma import eTimer, eConsoleAppContainer, getDesktop, eServiceReference, iPlayableService, iServiceInformation, RT_HALIGN_LEFT, RT_HALIGN_RIGHT, RT_HALIGN_CENTER, RT_VALIGN_CENTER, getPrevAsciiCode, eRCInput, fbClass +from enigma import eTimer, eConsoleAppContainer, getDesktop, eServiceReference, iPlayableService, iServiceInformation, RT_HALIGN_LEFT, RT_HALIGN_RIGHT, RT_HALIGN_CENTER, RT_VALIGN_CENTER, getPrevAsciiCode, eRCInput, fbClass, eServiceCenter from bookmark import BookmarkManager, BookmarkData, CategoryData import os, struct, threading, stat, select, time, socket, select +from __init__ import _ + strIsEmpty = lambda x: x is None or len(x) == 0 HBBTVAPP_PATH = "/usr/local/hbb-browser" COMMAND_PATH = '/tmp/.sock.hbbtv.cmd' +_g_helper = None + class GlobalValues: command_util = None command_server = None @@ -51,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 @@ -189,6 +230,7 @@ class OpCodeSet: ,"OP_HBBTV_FULLSCREEN" : 0x0005 ,"OP_HBBTV_TITLE" : 0x0006 ,"OP_HBBTV_RETRY_OPEN_URL" : 0x0009 + ,"OP_HBBTV_CHANGE_CHANNEL" : 0x000A ,"OP_OIPF_GET_CHANNEL_INFO_URL" : 0x0101 ,"OP_OIPF_GET_CHANNEL_INFO_AIT" : 0x0102 ,"OP_OIPF_GET_CHANNEL_INFO_LIST": 0x0103 @@ -209,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 @@ -223,6 +266,7 @@ class OpCodeSet: ,0x0005 : "OP_HBBTV_FULLSCREEN" ,0x0006 : "OP_HBBTV_TITLE" ,0x0009 : "OP_HBBTV_RETRY_OPEN_URL" + ,0x000A : "OP_HBBTV_CHANGE_CHANNEL" ,0x0101 : "OP_OIPF_GET_CHANNEL_INFO_URL" ,0x0102 : "OP_OIPF_GET_CHANNEL_INFO_AIT" ,0x0103 : "OP_OIPF_GET_CHANNEL_INFO_LIST" @@ -243,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" @@ -342,9 +387,12 @@ class StreamServer: class ServerFactory: def doListenUnixTCP(self, name, handler): def destroy(name): - if os.path.exists(name): - os.unlink(name) - print "Removed ", name + import os + try: + if os.path.exists(name): + os.unlink(name) + print "Removed ", name + except: pass destroy(name) params = SocketParams() @@ -441,6 +489,7 @@ class HandlerHbbTV(Handler): 0x0001 : self._cb_handleCloseHbbTVBrowser ,0x0006 : self._cb_handleSetPageTitle ,0x0009 : self._cb_handleHbbTVRetryOpen + ,0x000A : self._cb_handleHbbTVChangeChannel ,0x0101 : self._cb_handleGetChannelInfoForUrl ,0x0102 : self._cb_handleGetChannelInfoForAIT ,0x0103 : self._cb_handleGetChannelInfoList @@ -504,8 +553,22 @@ class HandlerHbbTV(Handler): self._on_set_title_cb = None return self.doPack(opcode, params, reserved) + def _cb_handleHbbTVChangeChannel(self, opcode, data): + self._handle_dump(self._cb_handleHbbTVChangeChannel, opcode, data) + global _g_helper + if _g_helper is None: + return (0, "NOK") + dataItems = data.split(":") + sid = dataItems[0] + tsid = dataItems[1] + if not _g_helper.doChangeChannel(sid, tsid): + return (0, "NOK") + return (0, "OK") + def _cb_handleBrowserMenuReq(self, opcode, data): self._handle_dump(self._cb_handleBrowserMenuReq, opcode, data) + restoreResolution() + fbClass.getInstance().unlock() eRCInput.getInstance().unlock() browser = getPluginBrowser() if browser is not None: @@ -546,11 +609,15 @@ class HandlerHbbTV(Handler): return (0, "OK") 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): data = "" @@ -646,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: @@ -681,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): @@ -756,6 +825,8 @@ 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() Screen.__init__(self, session) @@ -825,9 +896,13 @@ 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): + self.setTitle(_('HbbTV Plugin')) command_util = getCommandUtil() profile = self._profile (sid, onid, tsid, name, orgid) = getChannelInfos() @@ -859,6 +934,8 @@ 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() @@ -884,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) @@ -904,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() @@ -939,8 +1018,8 @@ 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) + message = _("HbbTV Browser was not running.\nPlease running browser before start HbbTV Application.") + self._session.open(MessageBox, message, MessageBox.TYPE_INFO) return service = self._session.nav.getCurrentlyPlayingServiceReference() setBeforeService(service) @@ -980,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 @@ -990,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 @@ -1011,7 +1092,7 @@ class HbbTVHelper(Screen): if self.getStartHbbTVUrl(): for x in self._urls: applications.append((x[1], x)) - else: applications.append(("No detected HbbTV applications.", None)) + else: applications.append((_("No detected HbbTV applications."), None)) self._session.openWithCallback(self._application_selected, ChoiceBox, title=_("Please choose an HbbTV application."), list=applications) def _application_selected(self, selected): @@ -1020,18 +1101,21 @@ 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',None)) - else: start_stop_mode.append(('Start',None)) + start_stop_mode.append((_('Stop'),'Stop')) + else: start_stop_mode.append((_('Start'),'Start')) self._session.openWithCallback(self._browser_config_selected, ChoiceBox, title=_("Please choose one."), list=start_stop_mode) def _browser_config_selected(self, selected): if selected is None: return + if self._callbackStartStop is not None: + self._callbackStartStop() try: - mode = selected[0] + mode = selected[1] if mode == 'Start': if not self._is_browser_running(): self._start_opera() @@ -1048,34 +1132,76 @@ class HbbTVHelper(Screen): print "Check Browser Running ERR :", ErrMsg return False + def doChangeChannel(self, _sid, _tsid): + root = eServiceReference(service_types_tv) + if root is None: + return False + serviceList = eServiceCenter.getInstance().list(root) + if serviceList is None: + return False + while True: + service = serviceList.getNext() + if service is None or not service.valid(): + break + + #1:0:19:2840:3FB:1:C00000:0:0:0: + serviceRef = service.toString() + if strIsEmpty(serviceRef): + continue + serviceRefItems = serviceRef.split(":") + if len(serviceRefItems) < 5: + continue + + sid = serviceRefItems[3] + tsid = serviceRefItems[4] + if sid == _sid and tsid == _tsid: + self._session.nav.playService(eServiceReference(serviceRef)) + service = self._session.nav.getCurrentlyPlayingServiceReference() + setBeforeService(service) + return True + return False + class OperaBrowserSetting: def __init__(self): 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) for line in f.readlines(): if line.startswith('start='): - self._start = line[6:len(line)-1] + tmp = line[6:len(line)-1].split() + self._start = tmp[0] + 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\n' % (self._start)) + 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): + 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 + 'start':self._start, + 'type':self._type, + 'keymap':self._keymap, } class OperaBrowserPreferenceWindow(ConfigListScreen, Screen): skin= """ - + @@ -1107,15 +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): - try: - self._startPageUrl = OperaBrowserSetting().getData()['start'] - except: self._startPageUrl = 'http://vuplus.com' - self.updateStartPageUrl() + self.setTitle(_('Preference')) def updateStartPageUrl(self): if self.menuItemStartpage.value == "startpage": @@ -1128,9 +1251,15 @@ class OperaBrowserPreferenceWindow(ConfigListScreen, Screen): def keyGreen(self): url = self["url"].getText() if strIsEmpty(url): - self.session.open(MessageBox, 'Invalid URL!!(Empty)\nPlease, Input to the URL.', type = MessageBox.TYPE_INFO) + self.session.open(MessageBox, _('Invalid URL!!(Empty)\nPlease, Input to the URL.'), type = MessageBox.TYPE_INFO) return - OperaBrowserSetting().setData(url) + mode = 0 + if url.find('/usr/local/manual') > 0: + mode = 1 + 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): @@ -1142,7 +1271,7 @@ class OperaBrowserPreferenceWindow(ConfigListScreen, Screen): return self["url"].setText(data) if self.menuItemStartpage.value == "direct": - self.session.openWithCallback(_cb_directInputUrl, VirtualKeyBoard, title=("Please enter URL here"), text='http://') + self.session.openWithCallback(_cb_directInputUrl, VirtualKeyBoard, title=(_("Please enter URL here")), text='http://') def keyLeft(self): ConfigListScreen.keyLeft(self) @@ -1152,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"))) @@ -1160,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) @@ -1215,45 +1370,85 @@ class BookmarkEditWindow(ConfigListScreen, Screen): self.menuItemUrl = None self.menuItemName = None + self.menuEntryName = None + self.menuEntryTitle = None + self.menuEntryUrl = None + self.makeConfigList() self.onLayoutFinish.append(self.layoutFinished) def layoutFinished(self): - self.setTitle('Bookmark ' + self.mMode) + self.setTitle(_('Bookmark') + ' ' + self.mMode) + + def selectedItem(self): + currentPosition = self["config"].getCurrent() + if self.mType == BookmarkEditWindow.CATEGORY: + return (_("Name"), self.menuItemName) + else: + if currentPosition == self.menuEntryTitle: + return (_("Title"), self.menuItemTitle) + elif currentPosition == self.menuEntryUrl: + return (_("Url"), self.menuItemUrl) + return None + + def showMessageBox(self, text): + msg = _("Invalid ") + text + _("!!(Empty)\nPlease, Input to the ") + text + "." + self.mSession.openWithCallback(self.showVKeyWindow, MessageBox, msg, MessageBox.TYPE_INFO) + return False + + def showVKeyWindow(self, data=None): + itemTitle = "" + itemValue = "" + selected = self.selectedItem() + if selected is not None: + itemValue = selected[1].value + if strIsEmpty(itemValue): + itemValue = "" + itemTitle = selected[0] + + self.session.openWithCallback(self.cbVKeyWindow, VirtualKeyBoard, title=itemTitle, text=itemValue) + + def cbVKeyWindow(self, data=None): + if data is not None: + selected = self.selectedItem() + if selected is not None: + selected[1].setValue(data) + def saveData(self): if self.mType == BookmarkEditWindow.CATEGORY: - if self.mMode == 'Add': + if self.mMode == _('Add'): categoryName = self.menuItemName.value if strIsEmpty(categoryName): - msg = "Invalid Category Name!!(Empty)\nPlease, Input to the Category Name." - self.mSession.open(MessageBox, msg, MessageBox.TYPE_INFO) - return False + return self.showMessageBox(_("Category Name")) self.mBookmarkManager.addCategory(categoryName) else: if strIsEmpty(self.menuItemName.value): - msg = "Invalid Category Name!!(Empty)\nPlease, Input to the Category Name." - self.mSession.open(MessageBox, msg, MessageBox.TYPE_INFO) - return False + return self.showMessageBox(_("Category Name")) self.mData.mName = self.menuItemName.value self.mBookmarkManager.updateCategory(self.mData) else: - if self.mMode == 'Add': + if self.mMode == _('Add'): bookmarkTitle = self.menuItemTitle.value bookmarkUrl = self.menuItemUrl.value if strIsEmpty(bookmarkTitle): - msg = "Invalid Bookmark Title!!(Empty)\nPlease input to the Bookmark Title." - self.mSession.open(MessageBox, msg, MessageBox.TYPE_INFO) - return False - self.mBookmarkManager.addBookmark(bookmarkTitle, bookmarkUrl, self.mData.mParent) + self["config"].setCurrentIndex(0) + return self.showMessageBox(_("Bookmark Title")) + if strIsEmpty(bookmarkUrl): + self["config"].setCurrentIndex(1) + return self.showMessageBox(_("Bookmark URL")) + self.mBookmarkManager.addBookmark(bookmarkTitle, bookmarkUrl, self.mData.mParent, 0) else: if strIsEmpty(self.menuItemTitle.value): - msg = "Invalid Bookmark Title!!(Empty)\nPlease input to the Bookmark Title." - self.mSession.open(MessageBox, msg, MessageBox.TYPE_INFO) - return False + self["config"].setCurrentIndex(0) + return self.showMessageBox(_("Bookmark Title")) + if strIsEmpty(self.menuItemUrl.value): + self["config"].setCurrentIndex(1) + return self.showMessageBox(_("Bookmark URL")) self.mData.mTitle = self.menuItemTitle.value self.mData.mUrl = self.menuItemUrl.value self.mBookmarkManager.updateBookmark(self.mData) return True + def keyGreen(self): if not self.saveData(): return @@ -1269,22 +1464,26 @@ class BookmarkEditWindow(ConfigListScreen, Screen): if self.mType == BookmarkEditWindow.CATEGORY: self.menuItemName = ConfigText(default=self.mData.mName, visible_width=65, fixed_size=False) - menuEntryName = getConfigListEntry(_("Name"), self.menuItemName) - self.menulist.append(menuEntryName) + + self.menuEntryName = getConfigListEntry(_("Name"), self.menuItemName) + + self.menulist.append(self.menuEntryName) else: self.menuItemTitle = ConfigText(default=self.mData.mTitle, visible_width=65, fixed_size=False) self.menuItemUrl = ConfigText(default=self.mData.mUrl, visible_width=65, fixed_size=False) - menuEntryTitle = getConfigListEntry(_("Title"), self.menuItemTitle) - menuEntryUrl = getConfigListEntry(_("Url"), self.menuItemUrl) - self.menulist.append(menuEntryTitle) - self.menulist.append(menuEntryUrl) + + self.menuEntryTitle = getConfigListEntry(_("Title"), self.menuItemTitle) + self.menuEntryUrl = getConfigListEntry(_("Url"), self.menuItemUrl) + + self.menulist.append(self.menuEntryTitle) + self.menulist.append(self.menuEntryUrl) self["config"].list = self.menulist self["config"].l.setList(self.menulist) class OperaBrowserBookmarkWindow(Screen): skin = """ - + @@ -1327,6 +1526,11 @@ class OperaBrowserBookmarkWindow(Screen): self.mBookmarkList = self.setBookmarkList() self["bookmarklist"] = MenuList(self.mBookmarkList) + self.onLayoutFinish.append(self.layoutFinished) + + def layoutFinished(self): + self.setTitle(_('Bookmark')) + def setBookmarkList(self): l = [] #self.mBookmarkManager.dump() @@ -1364,15 +1568,15 @@ class OperaBrowserBookmarkWindow(Screen): def keyNumber(self): data = self["bookmarklist"].getCurrent()[1] if strIsEmpty(data.mUrl): - msg = "Invalid URL. Please check again!!" + msg = _("Invalid URL. Please check again!!") self.mSession.open(MessageBox, msg, MessageBox.TYPE_INFO) return def cbSetStartpage(ret=None): if ret is None: return if ret: data = self["bookmarklist"].getCurrent()[1] - OperaBrowserSetting().setData(data.mUrl) - msg = "Do you want to set selected url to the Startpage?" + OperaBrowserSetting().setData(data.mUrl, data.mType) + msg = _("Do you want to set selected url to the Startpage?") self.mSession.openWithCallback(cbSetStartpage, MessageBox, msg, MessageBox.TYPE_YESNO, default=True) def keyGreen(self): @@ -1385,29 +1589,29 @@ class OperaBrowserBookmarkWindow(Screen): return if strIsEmpty(self.mTitle): return - retAdd = self.mBookmarkManager.addBookmark(self.mTitle, self.mUrl, parent.mId) + retAdd = self.mBookmarkManager.addBookmark(self.mTitle, self.mUrl, parent.mId, 0) if not retAdd: - msg = "Current page is already exist." + msg = _("Current page is already exist.") self.mSession.open(MessageBox, msg, MessageBox.TYPE_INFO) self.cbEditWindow(True) elif data[1] == 2: parent = self.getParentCategory() if parent is None: return - b = BookmarkData(0, '', '', parent.mId) - self.mSession.openWithCallback(self.cbEditWindow, BookmarkEditWindow, 'Add', BookmarkEditWindow.BOOKMARK, b, self.mBookmarkManager) + b = BookmarkData(0, '', '', parent.mId, 0) + self.mSession.openWithCallback(self.cbEditWindow, BookmarkEditWindow, _('Add'), BookmarkEditWindow.BOOKMARK, b, self.mBookmarkManager) elif data[1] == 3: c = CategoryData(0, '') - self.mSession.openWithCallback(self.cbEditWindow, BookmarkEditWindow, 'Add', BookmarkEditWindow.CATEGORY, c, self.mBookmarkManager) + self.mSession.openWithCallback(self.cbEditWindow, BookmarkEditWindow, _('Add'), BookmarkEditWindow.CATEGORY, c, self.mBookmarkManager) if strIsEmpty(self.mUrl): - l = [('Direct Input(Bookmark)',2,), ('Direct Input(Category)',3,)] - else: l = [('Currentpage(Bookmark)',1,), ('Direct Input(Bookmark)',2,), ('Direct Input(Category)',3,)] + l = [(_('Direct Input(Bookmark)'),2,), (_('Direct Input(Category)'),3,)] + else: l = [(_('Currentpage(Bookmark)'),1,), (_('Direct Input(Bookmark)'),2,), (_('Direct Input(Category)'),3,)] self.mSession.openWithCallback(cbGreen, ChoiceBox, title=_("Please choose."), list=l) def keyYellow(self): data = self["bookmarklist"].getCurrent()[1] if self.isCategoryItem(): - self.mSession.openWithCallback(self.cbEditWindow, BookmarkEditWindow, 'Edit', BookmarkEditWindow.CATEGORY, data, self.mBookmarkManager) - else: self.mSession.openWithCallback(self.cbEditWindow, BookmarkEditWindow, 'Edit', BookmarkEditWindow.BOOKMARK, data, self.mBookmarkManager) + self.mSession.openWithCallback(self.cbEditWindow, BookmarkEditWindow, _('Edit'), BookmarkEditWindow.CATEGORY, data, self.mBookmarkManager) + else: self.mSession.openWithCallback(self.cbEditWindow, BookmarkEditWindow, _('Edit'), BookmarkEditWindow.BOOKMARK, data, self.mBookmarkManager) def keyBlue(self): def cbBlue(ret=None): if not ret: return @@ -1417,8 +1621,8 @@ class OperaBrowserBookmarkWindow(Screen): else: self.mBookmarkManager.deleteBookmark(data.mId) self.updateBookmarkList() if self.isCategoryItem(): - msg = "Do you want to delete the category and the bookmarks?" - else: msg = "Do you want to delete the bookmark?" + msg = _("Do you want to delete the category and the bookmarks?") + else: msg = _("Do you want to delete the bookmark?") self.mSession.openWithCallback(cbBlue, MessageBox, msg, MessageBox.TYPE_YESNO, default=True) def keyOK(self): if self.isCategoryItem(): return @@ -1426,15 +1630,21 @@ class OperaBrowserBookmarkWindow(Screen): data = self["bookmarklist"].getCurrent()[1] url = data.mUrl.strip() if len(url) == 0: - self.session.open(MessageBox, "Can't open selected bookmark.\n - URL data is empty!!", type = MessageBox.TYPE_INFO) + self.session.open(MessageBox, _("Can't open selected bookmark.\n - URL data is empty!!"), type = MessageBox.TYPE_INFO) return - self.close(url) + mode = data.mType + if mode: + lang = language.getLanguage() + if lang == 'ru_RU' and os.path.exists('/usr/local/manual/ru_RU'): + url = '/usr/local/manual/ru_RU/main.html' + elif lang == 'de_DE' and os.path.exists('/usr/local/manual/de_DE'): + url = '/usr/local/manual/de_DE/main.html' + self.close((url, mode)) def keyRed(self): self.keyCancel() def keyCancel(self): self.close() - class BrowserHelpWindow(Screen, HelpableScreen): MODE_GLOBAL,MODE_KEYBOARD,MODE_MOUSE = 1,2,3 skin = """ @@ -1472,6 +1682,11 @@ class BrowserHelpWindow(Screen, HelpableScreen): self.showHelpTimer.callback.append(self.cbShowHelpTimerClosed) self.showHelpTimer.start(500) + self.onLayoutFinish.append(self.layoutFinished) + + def layoutFinished(self): + self.setTitle(_('Browser Help')) + def cbShowHelpTimerClosed(self): self.showHelpTimer.stop() self.setHelpModeActions(self.MODE_GLOBAL) @@ -1541,7 +1756,6 @@ class BrowserHelpWindow(Screen, HelpableScreen): def keyBlue(self): self.setHelpModeActions(self.MODE_KEYBOARD) -_g_helper = None class OperaBrowser(Screen): MENUBAR_ITEM_WIDTH = 150 MENUBAR_ITEM_HEIGHT = 30 @@ -1549,22 +1763,26 @@ 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)]] - def __init__(self, session): + + """ + MENUITEMS_LIST =[[(_('Open Startpage'), None), (_('Open URL'), None), (_('Start/Stop'),None), (_('Exit'), None)], + [(_('Bookmark'), None), (_('Preference'), None)], + [(_('About'), None), (_('Help'), None)]] + def __init__(self, session, url=None): Screen.__init__(self, session) self["actions"] = ActionMap(["DirectionActions", "MenuActions", "OkCancelActions"], { "cancel" : self.keyCancel @@ -1604,23 +1822,29 @@ class OperaBrowser(Screen): self._onCloseTimer = eTimer() self._onCloseTimer.callback.append(self._cb_onClose) + self.paramUrl = url + def enableRCMouse(self, mode): #mode=[0|1]|[False|True] rcmouse_path = "/proc/stb/fp/mouse" if os.path.exists(rcmouse_path): os.system("echo %d > %s" % (mode, rcmouse_path)) def layoutFinished(self): - self["menuitemFile"].setText("File")# modify menu - self["menuitemTool"].setText("Tools") - self["menuitemHelp"].setText("Help") + self["menuitemFile"].setText(_("File"))# modify menu + self["menuitemTool"].setText(_("Tools")) + self["menuitemHelp"].setText(_("Help")) self["menulist"].hide() self["submenulist"].hide() - self["bottomArea"].setText("Opera Web Browser Plugin v1.0") - self.setTitle("BrowserMain") + self["bottomArea"].setText(_("Opera Web Browser Plugin v1.0")) + self.setTitle(_("BrowserMain")) self.selectMenuitem() + if self.paramUrl is not None: + self.keyMenu() + self.cbUrlText(self.paramUrl, 1) + def selectMenuitem(self): tmp = [self["menuitemFile"], self["menuitemTool"], self["menuitemHelp"]]# modify menu self["menuitemFile"].setForegroundColorNum(0) @@ -1637,7 +1861,7 @@ class OperaBrowser(Screen): def setListOnView(self): l = self.MENUITEMS_LIST[self.menubarCurrentIndex] if not self._terminatedBrowser and self.menubarCurrentIndex == 0: # running - l = [('Return', None)] + l = [(_('Return'), None)] self.lvMenuItems = l #self.MENUITEMS_LIST[self.menubarCurrentIndex] return self.lvMenuItems @@ -1686,16 +1910,23 @@ class OperaBrowser(Screen): if self._on_setPageTitle in command_server.onSetPageTitleCB: command_server.onSetPageTitleCB.remove(self._on_setPageTitle) except Exception, ErrMsg: pass - self._on_setPageTitle('Opera Browser') + 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.keyRight() - self.keyLeft() + + self._currentPageUrl = '' + if self.paramUrl is not None: + self.keyCancel() + else: + self.keyRight() + self.keyLeft() def _on_setPageTitle(self, title=None): print "Title :",title @@ -1703,8 +1934,11 @@ class OperaBrowser(Screen): return self.setTitle(title) - def cbUrlText(self, data=None): - print "Inputed Url :", data + 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 #self.hideSubmenu() @@ -1715,9 +1949,14 @@ 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) + command_util.sendCommand('OP_BROWSER_OPEN_URL', data, mode) self._terminatedBrowser = False self._enableKeyEvent = False @@ -1727,24 +1966,33 @@ class OperaBrowser(Screen): def _cb_bookmarkWindowClosed(self, data=None): if data is None: return - self.cbUrlText(data) + (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): global _g_helper if not _g_helper._is_browser_running(): - message = "Opera Browser was not running.\nPlease running browser using [File]>[Start/Stop] menu." + message = _("Opera Browser was not running.\nPlease running browser using [File]>[Start/Stop] menu.") self.session.open(MessageBox, message, MessageBox.TYPE_INFO) return - self.session.openWithCallback(self.cbUrlText, VirtualKeyBoard, title=("Please enter URL here"), text='http://') + self.session.openWithCallback(self.cbUrlText, VirtualKeyBoard, title=(_("Please enter URL here")), text='http://') def _cmd_on_About(self): - self.session.open(MessageBox, 'Opera Web Browser Plugin v1.0', type = MessageBox.TYPE_INFO) + 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: @@ -1761,14 +2009,17 @@ class OperaBrowser(Screen): def _cmd_on_OpenStartpage(self): global _g_helper if not _g_helper._is_browser_running(): - message = "Opera Browser was not running.\nPlease running browser using [File]>[Start/Stop] menu." + message = _("Opera Browser was not running.\nPlease running browser using [File]>[Start/Stop] menu.") self.session.open(MessageBox, message, MessageBox.TYPE_INFO) return + mode = 0 start = 'http://vuplus.com' try: - start = OperaBrowserSetting().getData()['start'] + d = OperaBrowserSetting().getData() + start = d['start'] + mode = d['type'] except: pass - self.cbUrlText(start) + self.cbUrlText(start, mode) def _cmd_on_ReturnToBrowser(self): self.keyCancel() @@ -1776,22 +2027,25 @@ class OperaBrowser(Screen): self.session.open(BrowserHelpWindow) def doCommand(self, command): - cmd_map = {# modify menu - 'Exit' :self._cmd_on_Exit - ,'Help' :self._cmd_on_Help - ,'About' :self._cmd_on_About - ,'Open URL' :self._cmd_on_OpenUrl - ,'Start/Stop' :self._cmd_on_StartStop - ,'Bookmark' :self._cmd_on_Bookmark - ,'Preference' :self._cmd_on_Preference - ,'Return' :self._cmd_on_ReturnToBrowser - ,'Open Startpage' :self._cmd_on_OpenStartpage - } + # 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]() except Exception, ErrMsg: print ErrMsg def keyOK(self): + if not self.toggleMainScreenFlag: + self.keyMenu() + return if not self.toggleListViewFlag: self.keyDown() return @@ -1873,7 +2127,9 @@ class OperaBrowser(Screen): def keyCancel(self): if not self._terminatedBrowser: #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 @@ -1902,19 +2158,57 @@ class OperaBrowser(Screen): self.currentListView.pageUp() self.keyUp() - - def auto_start_main(reason, **kwargs): if reason: command_server = getCommandServer() command_server.stop() +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) + HelpableScreen.__init__ = HelpableScreen__init__ + HelpableScreen.session = session + +def HelpableScreen__init__(self): + if isinstance(self, HelpableScreen): + HelpableScreen.showManual = showManual + + self["helpActions"] = ActionMap(["HelpbuttonActions"], { + "help_b" : self.showHelp, + "help_l" : self.showManual, + }, -2) + _g_clearBrowserDataTimer = eTimer() +def showManual(self): + if not os.path.exists('/usr/local/manual'): + return + + url = 'file:///usr/local/manual/main.html' + lang = language.getLanguage() + if lang == 'ru_RU' and os.path.exists('/usr/local/manual/ru_RU'): + url = 'file:///usr/local/manual/ru_RU/main.html' + elif lang == 'de_DE' and os.path.exists('/usr/local/manual/de_DE'): + url = 'file:///usr/local/manual/de_DE/main.html' + + def _do_clean(): + _g_clearBrowserDataTimer.stop() + try: _g_clearBrowserDataTimer.callback.remove(_do_clean) + except: pass + setPluginBrowser(None) + def clearBrowserData(): + _g_clearBrowserDataTimer.callback.append(_do_clean) + _g_clearBrowserDataTimer.start(50) + setPluginBrowser(self.session.openWithCallback(clearBrowserData, OperaBrowser, url)) + def plugin_start_main(session, **kwargs): #session.open(OperaBrowser) def _do_clean(): @@ -1940,11 +2234,12 @@ def plugin_extension_browser_config(session, **kwargs): _g_helper.showBrowserConfigBox() def Plugins(path, **kwargs): - return [ - PluginDescriptor(where=PluginDescriptor.WHERE_AUTOSTART, fnc=auto_start_main), - PluginDescriptor(where=PluginDescriptor.WHERE_SESSIONSTART, needsRestart=True, fnc=session_start_main, weight=-10), - PluginDescriptor(name="HbbTV Applications", where=PluginDescriptor.WHERE_EXTENSIONSMENU, needsRestart=True, fnc=plugin_extension_start_application), - PluginDescriptor(name="Browser Start/Stop", where=PluginDescriptor.WHERE_EXTENSIONSMENU, needsRestart=True, fnc=plugin_extension_browser_config), - PluginDescriptor(name="Opera Web Browser", description="start opera web browser", where=PluginDescriptor.WHERE_PLUGINMENU, needsRestart=True, fnc=plugin_start_main), - ] + l = [] + l.append(PluginDescriptor(where=PluginDescriptor.WHERE_AUTOSTART, fnc=auto_start_main)) + l.append(PluginDescriptor(where=PluginDescriptor.WHERE_SESSIONSTART, needsRestart=True, fnc=session_start_main, weight=-10)) + l.append(PluginDescriptor(name=_("HbbTV Applications"), where=PluginDescriptor.WHERE_EXTENSIONSMENU, needsRestart=True, fnc=plugin_extension_start_application)) + l.append(PluginDescriptor(name=_("Browser Start/Stop"), where=PluginDescriptor.WHERE_EXTENSIONSMENU, needsRestart=True, fnc=plugin_extension_browser_config)) + l.append(PluginDescriptor(name=_("Opera Web Browser"), description=_("start opera web browser"), where=PluginDescriptor.WHERE_PLUGINMENU, needsRestart=True, fnc=plugin_start_main)) + + return l