From: smlee Date: Mon, 14 Jul 2014 09:21:16 +0000 (+0900) Subject: [hbbtv] upgraded. X-Git-Url: http://code.vuplus.com/gitweb/?p=vuplus_dvbapp;a=commitdiff_plain;h=ee75b9b5a61fb4363008bc701e1ba9a42c0b922c;ds=sidebyside [hbbtv] upgraded. re-coded for 'opera-hbbtv_0.2.bb' sorry about confused for miss of name. --- diff --git a/configure.ac b/configure.ac index dbee484..332fc7a 100644 --- a/configure.ac +++ b/configure.ac @@ -201,9 +201,6 @@ lib/python/Plugins/Extensions/BackupSuiteHDD/meta/Makefile lib/python/Plugins/Extensions/BackupSuiteHDD/locale/Makefile lib/python/Plugins/Extensions/BackupSuiteUSB/Makefile lib/python/Plugins/Extensions/BackupSuiteUSB/meta/Makefile -lib/python/Plugins/Extensions/Vbrowser/Makefile -lib/python/Plugins/Extensions/Vbrowser/meta/Makefile -lib/python/Plugins/Extensions/Vbrowser/locale/Makefile lib/python/Plugins/SystemPlugins/CleanupWizard/Makefile lib/python/Plugins/SystemPlugins/CleanupWizard/meta/Makefile lib/python/Plugins/SystemPlugins/CommonInterfaceAssignment/Makefile diff --git a/lib/python/Plugins/Extensions/HbbTV/Makefile.am b/lib/python/Plugins/Extensions/HbbTV/Makefile.am index e5292f8..e3a40df 100644 --- a/lib/python/Plugins/Extensions/HbbTV/Makefile.am +++ b/lib/python/Plugins/Extensions/HbbTV/Makefile.am @@ -7,6 +7,9 @@ install_PYTHON = \ __init__.py \ aitreader.py \ bookmark.py \ - plugin.py - - + browser.py \ + hbbtv.py \ + plugin.py \ + vbcfg.py \ + vbipc.py \ + youtube.py diff --git a/lib/python/Plugins/Extensions/HbbTV/__init__.py b/lib/python/Plugins/Extensions/HbbTV/__init__.py index c7f59be..d20c4b3 100644 --- a/lib/python/Plugins/Extensions/HbbTV/__init__.py +++ b/lib/python/Plugins/Extensions/HbbTV/__init__.py @@ -2,18 +2,18 @@ from Components.Language import language from Tools.Directories import resolveFilename, SCOPE_PLUGINS, SCOPE_LANGUAGE import os,gettext -lang = 'en' +PluginLanguageDomain = "HbbTV" +PluginLanguagePath = "Extensions/HbbTV/locale" + def localeInit(): - global lang lang = language.getLanguage()[:2] os.environ["LANGUAGE"] = lang gettext.bindtextdomain("enigma2", resolveFilename(SCOPE_LANGUAGE)) gettext.textdomain("enigma2") - gettext.bindtextdomain(lang, '/usr/lib/enigma2/python/Plugins/Extensions/HbbTV/locale') + gettext.bindtextdomain(PluginLanguageDomain, resolveFilename(SCOPE_PLUGINS, PluginLanguagePath)) def _(txt): - global lang - t = gettext.dgettext(lang, txt) + t = gettext.dgettext(PluginLanguageDomain, txt) if t == txt: t = gettext.gettext(txt) return t diff --git a/lib/python/Plugins/Extensions/HbbTV/aitreader.py b/lib/python/Plugins/Extensions/HbbTV/aitreader.py old mode 100755 new mode 100644 index f2c2195..757b0f3 --- a/lib/python/Plugins/Extensions/HbbTV/aitreader.py +++ b/lib/python/Plugins/Extensions/HbbTV/aitreader.py @@ -1,7 +1,9 @@ import os, xml.dom.minidom from enigma import iServiceInformation -DUMPBIN = "/usr/lib/enigma2/python/Plugins/Extensions/HbbTV/dumpait" +import vbcfg + +DUMPBIN = vbcfg.PLUGINROOT + "/dumpait" class eAITSectionReader: def __init__(self, demux, pmtid, sid): self.mVuplusBox = False @@ -39,7 +41,6 @@ class eAITSectionReader: item["orgid"] = int(self.__item(application, "orgid")) item["appid"] = int(self.__item(application, "appid")) item["profile"] = int(self.__item(application, "profile")) - #print item return item def doParseApplications(self): @@ -67,13 +68,16 @@ class eAITSectionReader: document = "" try: document = os.popen(self.mCommand).read() except Exception, ErrMsg: - print ErrMsg + vbcfg.ERR(ErrMsg) return False if len(document) == 0: return False document = document.decode("cp1252").encode("utf-8") - #print document - self.mDocument = xml.dom.minidom.parseString(document) + try: + self.mDocument = xml.dom.minidom.parseString(document) + except Exception, ErrMsg: + vbcfg.ERR("XML parse: %s" % ErrMsg) + return False return True def doDump(self): @@ -91,7 +95,8 @@ def unit_test(demux, pmtid, sid): if reader.doOpen(): reader.doParseApplications() reader.doDump() - else: print "no data!!" + else: + vbcfg.ERR("no data!!") #unit_test('0', 0x17d4, 0x2b66) diff --git a/lib/python/Plugins/Extensions/HbbTV/bookmark.py b/lib/python/Plugins/Extensions/HbbTV/bookmark.py index 6e5dd7b..5048564 100644 --- a/lib/python/Plugins/Extensions/HbbTV/bookmark.py +++ b/lib/python/Plugins/Extensions/HbbTV/bookmark.py @@ -1,3 +1,5 @@ +import vbcfg + class BookmarkData: def __init__(self, _id, _title, _url, _parent, _type): self.mId = _id @@ -38,7 +40,6 @@ class SimpleConfigParser: def _read(self): if self.mDataValid: return - print "populate!!" self.mConfig.read(self.mFileName) self.mCategoryCurrentIdx = self.getNumber('__SYS__', 'category_current_idx') @@ -52,7 +53,6 @@ class SimpleConfigParser: self.mPopulateValid = False def _del(self, _section, _option=None): - #print _section, ' :', _option if _option is None: if not self.exist(_section): return @@ -66,7 +66,7 @@ class SimpleConfigParser: try: data = self.mConfig.get(_section, _option) except Exception, e: - #print e + vbcfg.ERR(e) return _default else : return data @@ -153,8 +153,9 @@ class BookmarkManager(SimpleConfigParser): if not self.mDebugEnable: return if params is None: - print format - else: print format % (params) + vbcfg.DEBUG(format) + else: + vbcfg.DEBUG(format % (params)) def getBookmark(self, _title): self.populate() @@ -287,6 +288,6 @@ class BookmarkManager(SimpleConfigParser): @staticmethod def getInstance(): - return BookmarkManager('/usr/lib/enigma2/python/Plugins/Extensions/HbbTV/bookmark.ini') + return BookmarkManager(vbcfg.PLUGINROOT + "/bookmark.ini") diff --git a/lib/python/Plugins/Extensions/HbbTV/browser.py b/lib/python/Plugins/Extensions/HbbTV/browser.py new file mode 100644 index 0000000..1b56e7d --- /dev/null +++ b/lib/python/Plugins/Extensions/HbbTV/browser.py @@ -0,0 +1,1185 @@ +from Screens.Screen import Screen +from Screens.HelpMenu import HelpableScreen +from Screens.ChoiceBox import ChoiceBox +from Screens.MessageBox import MessageBox +from Screens.VirtualKeyBoard import VirtualKeyBoard +from Components.ActionMap import ActionMap, HelpableActionMap +from Components.ConfigList import ConfigListScreen +from Components.Label import Label, MultiColorLabel +from Components.Language import language +from Components.MenuList import MenuList +from Components.Pixmap import Pixmap +from Components.Sources.StaticText import StaticText +from Components.config import ConfigText, ConfigSelection, ConfigSlider, getConfigListEntry + +import os, vbcfg + +from enigma import fbClass, eRCInput, eTimer, getDesktop + +from __init__ import _ +from bookmark import BookmarkManager, BookmarkData, CategoryData +from vbipc import VBController + +strIsEmpty = lambda x: x is None or len(x) == 0 + +class BrowserSetting: + def __init__(self): + self._settingFileName = '%s/home/setting.ini' % vbcfg.APPROOT + self._start = None + self._type = None + self._keymap = None + self._read() + + def _read(self): + if not os.path.exists(self._settingFileName): + self.getDefault() + return + + f = open(self._settingFileName) + for line in f.readlines(): + if line.startswith('start='): + 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 %d\n' % (self._start, self._type)) + tmpstr.append('keymap=%s\n' % (self._keymap)) + f = open(self._settingFileName, 'w') + f.writelines(tmpstr) + f.close() + + def getDefault(self): + self._start = 'http://vuplus.com' + self._type = 0 + self._keymap = 'us-rc' + + 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 BrowserPositionSetting: + def __init__(self): + self._positionFileName = '%s/home/position.cfg' % vbcfg.APPROOT + self._left = 0 + self._width = 0 + self._top = 0 + self._height = 0 + self._read() + + def _read(self): + if not os.path.exists(self._positionFileName): + self.getDefault() + return + + f = open(self._positionFileName) + str = f.read() + f.close() + + pos = str.split(); + self._left = int(pos[0]) + self._width = int(pos[1]) + self._top = int(pos[2]) + self._height = int(pos[3]) + + def _write(self): + tmpstr = "%d %d %d %d\n" % (self._left, self._width, self._top, self._height) + f = open(self._positionFileName, 'w') + f.write(tmpstr) + f.close() + + def getDefault(self): + self._left = 0 + self._top = 0 + self._width = 720 + self._height = 576 + + def setPosition(self, params): + self._left = params[0] + self._width = params[1] + self._top = params[2] + self._height = params[3] + self._write() + + def getPosition(self): + return (self._left, self._width, self._top, self._height) + +class BrowserPositionWindow(Screen, ConfigListScreen): + skin = """ + + + " + + + + + + + """ + def __init__(self, session): + w,h = session.desktop.size().width(), session.desktop.size().height() + cw,ch = w/2, h/2 + # btn_red btn_green lb_red lb_green config + self.skin = self.skin % (w,h, cw-190,ch-110, cw+50,ch-110, cw-190,ch-110, cw+50,ch-110, cw-250,ch-50) + + Screen.__init__(self,session) + self.session = session + self["shortcuts"] = ActionMap(["ShortcutActions", "SetupActions" ], + { + "ok": self.keyOk, + "cancel": self.keyCancel, + "red": self.keyCancel, + "green": self.keyOk, + }, -2) + self.list = [] + ConfigListScreen.__init__(self, self.list, session = self.session) + + self["key_red"] = StaticText(_("Cancel")) + self["key_green"] = StaticText(_("Save")) + self["current"] = StaticText(_(" ")) + vbcfg.g_position = vbcfg.getPosition() + self.createSetup() + + def createSetup(self): + self.list = [] + + params = BrowserPositionSetting().getPosition() + vbcfg.setPosition(params) + + left = params[0] + width = params[1] + top = params[2] + height = params[3] + + self.dst_left = ConfigSlider(default = left, increment = 5, limits = (0, 720)) + self.dst_width = ConfigSlider(default = width, increment = 5, limits = (0, 720)) + self.dst_top = ConfigSlider(default = top, increment = 5, limits = (0, 576)) + self.dst_height = ConfigSlider(default = height, increment = 5, limits = (0, 576)) + + self.dst_left_entry = getConfigListEntry(_("left"), self.dst_left) + self.dst_width_entry = getConfigListEntry(_("width"), self.dst_width) + self.dst_top_entry = getConfigListEntry(_("top"), self.dst_top) + self.dst_height_entry = getConfigListEntry(_("height"), self.dst_height) + + self.list.append(self.dst_left_entry) + self.list.append(self.dst_width_entry) + self.list.append(self.dst_top_entry) + self.list.append(self.dst_height_entry) + + self["config"].list = self.list + self["config"].l.setList(self.list) + + def resetDisplay(self): + for entry in self["config"].getList(): + self["config"].l.invalidateEntry(self["config"].getList().index(entry)) + + def adjustBorder(self): + if self["config"].getCurrent() == self.dst_left_entry: + if self.dst_left.value + self.dst_width.value >720: + self.dst_width.setValue(720-self.dst_left.value) + self.resetDisplay() + elif self["config"].getCurrent() == self.dst_width_entry: + if self.dst_left.value + self.dst_width.value >720: + self.dst_left.setValue(720-self.dst_width.value) + self.resetDisplay() + elif self["config"].getCurrent() == self.dst_top_entry: + if self.dst_top.value + self.dst_height.value >576: + self.dst_height.setValue(576-self.dst_top.value) + self.resetDisplay() + elif self["config"].getCurrent() == self.dst_height_entry: + if self.dst_top.value + self.dst_height.value >576: + self.dst_top.setValue(576-self.dst_height.value) + self.resetDisplay() + + def keyLeft(self): + ConfigListScreen.keyLeft(self) + self.adjustBorder() + params = (int(self.dst_left.value), int(self.dst_width.value), int(self.dst_top.value), int(self.dst_height.value)) + vbcfg.setPosition(params) + + def keyRight(self): + ConfigListScreen.keyRight(self) + self.adjustBorder() + params = (int(self.dst_left.value), int(self.dst_width.value), int(self.dst_top.value), int(self.dst_height.value)) + vbcfg.setPosition(params) + + def keyOk(self): + params = (int(self.dst_left.value), int(self.dst_width.value), int(self.dst_top.value), int(self.dst_height.value)) + BrowserPositionSetting().setPosition(params) + vbcfg.setPosition(vbcfg.g_position) + self.close() + + def keyCancel(self): + if self["config"].isChanged(): + self.session.openWithCallback(self.cancelConfirm, MessageBox, _("Really close without saving settings?")) + else: + vbcfg.setPosition(vbcfg.g_position) + self.close() + + def cancelConfirm(self,ret): + if ret: + vbcfg.setPosition(vbcfg.g_position) + self.close() + + +class BrowserPreferenceWindow(ConfigListScreen, Screen): + skin = """ + + + + + + + + + + + """ + def __init__(self, session, currentUrl): + self.session = session + Screen.__init__(self, session) + + self.menulist = [] + ConfigListScreen.__init__(self, self.menulist) + + self["actions"] = ActionMap(["OkCancelActions", "ShortcutActions", "WizardActions", "ColorActions", "SetupActions", ], { + "red" : self.keyRed, + "green" : self.keyGreen, + "ok" : self.keyOK, + "cancel" : self.keyRed + }, -2) + self["key_red"] = StaticText(_("Cancel")) + self["key_green"] = StaticText(_("Save")) + self["url"] = Label() + + self._currentPageUrl = currentUrl + 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')) + + def updateStartPageUrl(self): + if self.menuItemStartpage.value == "startpage": + self["url"].setText(self._startPageUrl) + elif self.menuItemStartpage.value == "current": + self["url"].setText(self._currentPageUrl) + elif self.menuItemStartpage.value == "direct": + self["url"].setText('') + + 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) + return + mode = 0 + if url.find('/usr/local/manual') > 0: + mode = 1 + self._keymapType = self.menuItemKeyboardLayout.value + BrowserSetting().setData(url, mode, self._keymapType) + # send contorller + #command_util = getCommandUtil() + #command_util.sendCommand('OP_BROWSER_NEED_RELOAD_KEYMAP') + self.close() + + def keyRed(self): + self.close() + + def keyOK(self): + def _cb_directInputUrl(data): + if strIsEmpty(data): + return + self["url"].setText(data) + if self["config"].l.getCurrentSelectionIndex() == 0 and self.menuItemStartpage.value == "direct": + self.session.openWithCallback(_cb_directInputUrl, VirtualKeyBoard, title=(_("Please enter URL here")), text='http://') + + def keyLeft(self): + ConfigListScreen.keyLeft(self) + self.updateStartPageUrl() + + def keyRight(self): + ConfigListScreen.keyRight(self) + self.updateStartPageUrl() + + def getKeymapTypeList(self): + types = [] + for f in os.listdir("%s/keymap" % vbcfg.APPROOT): + 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"))) + if not strIsEmpty(self._currentPageUrl): + l.append(("current", _("Current Page"))) + l.append(("direct", _("Direct Input"))) + self.menuItemStartpage = ConfigSelection(default="startpage", choices = l) + self.menuEntryStartpage = getConfigListEntry(_("Startpage"), self.menuItemStartpage) + + kl = self.getKeymapTypeList() + + try: + d = BrowserSetting().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) + +class BookmarkEditWindow(ConfigListScreen, Screen): + CATEGORY,BOOKMARK = 0,1 + skin = """ + + + + + + + + + + + + + """ + def __init__(self, session, _mode, _type, _data, _bm): + self.mMode = _mode + self.mType = _type + self.mData = _data + self.mSession = session + self.mBookmarkManager = _bm + + if _data is not None: + vbcfg.DEBUG("0x%x" % _data.mId) + + Screen.__init__(self, session) + + self.menulist = [] + ConfigListScreen.__init__(self, self.menulist) + + self["actions"] = ActionMap(["OkCancelActions", "ColorActions",], { + "ok" : self.keyGreen, + "green" : self.keyGreen, + "red" : self.keyRed, + "cancel" : self.keyRed, + }, -2) + + self["VKeyIcon"] = Pixmap() + self["key_red"] = StaticText(_("Cancel")) + self["key_green"] = StaticText(_("Save")) + + self.menuItemTitle = None + 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) + + 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'): + categoryName = self.menuItemName.value + if strIsEmpty(categoryName): + return self.showMessageBox(_("Category Name")) + self.mBookmarkManager.addCategory(categoryName) + else: + if strIsEmpty(self.menuItemName.value): + return self.showMessageBox(_("Category Name")) + self.mData.mName = self.menuItemName.value + self.mBookmarkManager.updateCategory(self.mData) + else: + if self.mMode == _('Add'): + bookmarkTitle = self.menuItemTitle.value + bookmarkUrl = self.menuItemUrl.value + if strIsEmpty(bookmarkTitle): + 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): + 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 + self.close(True) + + def keyRed(self): + self.close(False) + + def keyLeft(self): + ConfigListScreen.keyLeft(self) + + def keyRight(self): + ConfigListScreen.keyRight(self) + + def makeConfigList(self): + self.menulist = [] + + if self.mType == BookmarkEditWindow.CATEGORY: + self.menuItemName = ConfigText(default=self.mData.mName, visible_width=65, fixed_size=False) + + 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) + + 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 BrowserBookmarkWindow(Screen): + skin = """ + + + + + + + + + + + + + + + + + """ + + def __init__(self, _session, _url=None, _title=None): + self.mUrl = _url + self.mTitle = _title + self.mBookmarkManager = BookmarkManager.getInstance() + self.mSession = _session + Screen.__init__(self, _session) + self["actions"] = ActionMap(["DirectionActions", "OkCancelActions","ColorActions", "NumberActions"], { + "ok" : self.keyOK, + "cancel": self.keyCancel, + "red" : self.keyRed, + "green" : self.keyGreen, + "yellow": self.keyYellow, + "blue" : self.keyBlue, + "0" : self.keyNumber, + },-2) + + self["key_red"] = StaticText(_("Exit")) + self["key_green"] = StaticText(_("Add")) + self["key_yellow"] = StaticText(_("Edit")) + self["key_blue"] = StaticText(_("Delete")) + self["key_0"] = StaticText(_("Set as Startpage")) + + 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() + cd = self.mBookmarkManager.getBookmarkRoot() + for ck in cd.iterkeys(): + l.append(('# ' + cd[ck].mName, cd[ck])) + bd = cd[ck].mBookmarks + for bk in bd.iterkeys(): + l.append((' - ' + bd[bk].mTitle, bd[bk])) + return l + + def updateBookmarkList(self): + self.mBookmarkList = self.setBookmarkList() + self["bookmarklist"].setList(self.mBookmarkList) + + def cbEditWindow(self, ret=False): + if not ret: + return + self.updateBookmarkList() + + def getParentCategory(self): + idx = self["bookmarklist"].getSelectedIndex() + try: + while idx >= 0: + data = self.mBookmarkList[idx][0].strip() + if data[0] == '#': + return self.mBookmarkList[idx][1] + idx -= 1 + except: pass + return None + + def isCategoryItem(self): + try: + head = self["bookmarklist"].getCurrent()[0].strip() + if head[0] == '#': + return True + except: pass + return False + + def keyNumber(self): + if self.isCategoryItem(): return + + data = self["bookmarklist"].getCurrent()[1] + if strIsEmpty(data.mUrl): + 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] + BrowserSetting().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): + def cbGreen(data): + if data is None: + return + if data[1] == 1: + parent = self.getParentCategory() + if parent is None: + return + if strIsEmpty(self.mTitle): + return + retAdd = self.mBookmarkManager.addBookmark(self.mTitle, self.mUrl, parent.mId, 0) + if not retAdd: + 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, 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) + 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,)] + 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) + + def keyBlue(self): + def cbBlue(ret=None): + if not ret: return + data = self["bookmarklist"].getCurrent()[1] + if self.isCategoryItem(): + self.mBookmarkManager.deleteCategory(data.mId) + 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?") + self.mSession.openWithCallback(cbBlue, MessageBox, msg, MessageBox.TYPE_YESNO, default=True) + + def keyOK(self): + if self.isCategoryItem(): return + + 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) + return + mode = data.mType + if mode: + lang = language.getLanguage() + if os.path.exists(vbcfg.MANUALROOT + '/' + lang): + url = vbcfg.MANUALROOT + '/' + lang + '/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 = """ + + + + + + + + + + + + """ + def __init__(self, session): + Screen.__init__(self, session) + HelpableScreen.__init__(self) + + self["key_red"] = StaticText(_("Exit")) + self["key_green"] = StaticText(_("Global")) + self["key_yellow"] = StaticText(_("Mouse")) + self["key_blue"] = StaticText(_("Keyboard")) + + self["actions"] = ActionMap(["DirectionActions", "OkCancelActions","ColorActions"], { + "ok" : self.keyRed, + "cancel": self.keyRed, + "red" : self.keyRed, + "green" : self.keyGreen, + "yellow": self.keyYellow, + "blue" : self.keyBlue, + },-2) + + self.showHelpTimer = eTimer() + 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) + + def setHelpModeActions(self, _mode=0): + self.helpList = [] + if _mode == self.MODE_GLOBAL: + self["OkCancelActions"] = HelpableActionMap(self, "OkCancelActions", { + "cancel" : (self.keyPass, _("Exit the Browser.")), + }) + self["MenuActions"] = HelpableActionMap(self, "MenuActions", { + "menu" : (self.keyPass, _("Show the Menu window.")), + }) + self["ColorActions"] = HelpableActionMap(self, "ColorActions", { + "green" : (self.keyPass, _("Enter Key")), + "yellow" : (self.keyPass, _("Show the Virtual keyboard window.")), + "blue" : (self.keyPass, _("Backspace Key")), + }) + self["EPGSelectActions"] = HelpableActionMap(self, "EPGSelectActions", { + "info" : (self.keyPass, _("Switch to keyboard/mouse mode.")), + }) + + elif _mode == self.MODE_MOUSE: + self["DirectionActions"] = HelpableActionMap(self, "DirectionActions", { + "up" : (self.keyPass, _("It will move the mouse pointer up.")), + "down" : (self.keyPass, _("It will move the mouse pointer down.")), + "left" : (self.keyPass, _("It will move the mouse pointer left.")), + "right" : (self.keyPass, _("It will move the mouse pointer right.")), + }) + self["OkCancelActions"] = HelpableActionMap(self, "OkCancelActions", { + "ok" : (self.keyPass, _("Left Mouse Button")), + }) + self["EPGSelectActions"] = HelpableActionMap(self, "EPGSelectActions", { + "nextBouquet" : (self.keyPass, _("Right Mouse Button")), + "nextService" : (self.keyPass, _("Left Key")), + "prevService" : (self.keyPass, _("Right Key")), + }) + elif _mode == self.MODE_KEYBOARD: + self["DirectionActions"] = HelpableActionMap(self, "DirectionActions", { + "up" : (self.keyPass, _("Up Key")), + "down" : (self.keyPass, _("Down Key")), + "left" : (self.keyPass, _("Left Key")), + "right" : (self.keyPass, _("Right Key")), + }) + self["OkCancelActions"] = HelpableActionMap(self, "OkCancelActions", { + "ok" : (self.keyPass, _("Enter Key")), + }) + self["EPGSelectActions"] = HelpableActionMap(self, "EPGSelectActions", { + "nextBouquet" : (self.keyPass, _("PageUp Key")), + "prevBouquet" : (self.keyPass, _("PageDown Key")), + "nextService" : (self.keyPass, _("Go to previous page.")), + "prevService" : (self.keyPass, _("Go to next page.")), + }) + + if _mode > 0: + self.showHelp() + + def keyPass(self): + pass + + def keyRed(self): + self.close() + + def keyGreen(self): + self.setHelpModeActions(self.MODE_GLOBAL) + + def keyYellow(self): + self.setHelpModeActions(self.MODE_MOUSE) + + def keyBlue(self): + self.setHelpModeActions(self.MODE_KEYBOARD) + +class Browser(Screen): + MENU_ITEM_WIDTH = 150 + MENU_ITEM_HEIGHT = 30 + MENULIST_WIDTH = 200 + MENULIST_HEIGHT = 25 + + # menulist->position->y : MENU_ITEM_HEIGHT+30 + # menulist->size->x : MENULIST_WIDTH + + size = getDesktop(0).size() + WIDTH = int(size.width()) + HEIGHT = int(size.height()) + skin = """ + + + + + + + + + + """ % { 'width' :WIDTH, + 'height' :HEIGHT, + 'bottom_pos_y' :HEIGHT-80, + 'bottom_size_x' :WIDTH } + + MENULIST_ITEMS = [] + COMMAND_MAP = {} + def __init__(self, session, url=None, is_webapp=False): + Screen.__init__(self, session) + self["actions"] = ActionMap(["DirectionActions", "MenuActions", "OkCancelActions"], { + "cancel" : self.keyCancel + ,"ok" : self.keyOK + ,"left" : self.keyLeft + ,"right" : self.keyRight + ,"up" : self.keyUp + ,"down" : self.keyDown + ,"menu" : self.keyMenu + }, -2) + + self._cb_update_language() + + self.idx_menu = 0 + self.is_browser_opened = False + self.is_show_top = True + self.is_show_menu = False + + self._current_url = None + self._current_title = None + + self["topArea"] = Label() + self["bottomArea"] = Label() + + self["menuitemFile"] = MultiColorLabel() + self["menuitemTool"] = MultiColorLabel() + self["menuitemHelp"] = MultiColorLabel() + + self.top_menus = [self["menuitemFile"], self["menuitemTool"], self["menuitemHelp"]] + + self["menulist"] = MenuList(self.get_menulist_items(self.idx_menu)) + self["submenulist"] = MenuList(None) + + self.onLayoutFinish.append(self.layoutFinished) + + self._close_timer = eTimer() + self._close_timer.callback.append(self._cb_stop_browser) + + self.m_url = url + self.m_webapp = is_webapp + language.addCallback(self._cb_update_language) + + def layoutFinished(self): + self["menuitemFile"].setText(_("File")) + self["menuitemTool"].setText(_("Tools")) + self["menuitemHelp"].setText(_("Help")) + + self["menulist"].hide() + self["submenulist"].hide() + + self["bottomArea"].setText(_("Opera Web Browser Plugin v2.0")) + self.setTitle(_("BrowserMain")) + self.set_menu_item() + vbcfg.LOG("Starting Browser") + + if self.m_url is not None: + self.keyMenu() + if self.m_webapp: + self._cb_start_browser(self.m_url, 1, 'YOUTUBETV_OPENURL') + else: + self._cb_start_browser(self.m_url, 1) + + def _cb_update_language(self): + self.MENULIST_ITEMS = [ + [(_('Open Startpage'), None), (_('Open URL'), None), (_('Start/Stop'),None), (_('Exit'), None)], + [(_('Bookmark'), None), (_('Preference'), None), (_('Position Setup'), None)], + [(_('About'), None), (_('Help'), None)] + ] + self.COMMAND_MAP = {} + self.COMMAND_MAP[_('Open Startpage')] = self._cmd_OpenStartpage + self.COMMAND_MAP[_('Open URL')] = self._cmd_OpenURL + self.COMMAND_MAP[_('Start/Stop')] = self._cmd_StartStop + self.COMMAND_MAP[_('Exit')] = self._cmd_Exit + self.COMMAND_MAP[_('Bookmark')] = self._cmd_Bookmark + self.COMMAND_MAP[_('Preference')] = self._cmd_Preference + self.COMMAND_MAP[_('Position Setup')] = self._cmd_Position + self.COMMAND_MAP[_('About')] = self._cmd_About + self.COMMAND_MAP[_('Help')] = self._cmd_Help + self.COMMAND_MAP[_('Return')] = self._cmd_Return + + def _cb_set_title(self, title=None): + vbcfg.LOG("page title: %s" % title) + if title is None: + return + self.setTitle(title) + + def _cb_close_window(self): + self._close_timer.start(1000) + + def _cb_start_browser(self, data=None, mode=0, opcode='BROWSER_OPENURL'): + if not vbcfg.g_main.check_browser(): + if self.m_url is not None: + if vbcfg.g_service: + self.session.nav.playService(vbcfg.g_service) + return + vbcfg.LOG("open url: %s %d" % (data, mode)) + if strIsEmpty(data): + return + + try: + if self._cb_set_title not in vbcfg.g_main.vbhandler.onSetTitleCB: + vbcfg.g_main.vbhandler.onSetTitleCB.append(self._cb_set_title) + except Exception: + pass + + try: + if self._cb_close_window not in vbcfg.g_main.vbhandler.onCloseCB: + vbcfg.g_main.vbhandler.onCloseCB.append(self._cb_close_window) + except Exception: + pass + + vbcfg.g_position = vbcfg.getPosition() + fbClass.getInstance().lock() + eRCInput.getInstance().lock() + + self.toggle_top() + ret = VBController.command(opcode, data) + self._current_url = data + if ret: + self.is_browser_opened = True + else: + self.is_browser_opened = False + vbcfg.ERR("Failed to open url: %s" % data) + + vbcfg.g_main.vbhandler.soft_volume = -1 + + def _cb_stop_browser(self): + self._close_timer.stop() + + try: + if self._cb_set_title in vbcfg.g_main.vbhandler.onSetTitleCB: + vbcfg.g_main.vbhandler.onSetTitleCB.remove(self._cb_set_title) + except Exception: + pass + + try: + if self._cb_close_window in vbcfg.g_main.vbhandler.onCloseCB: + vbcfg.g_main.vbhandler.onCloseCB.remove(self._cb_close_window) + except Exception: + pass + + self.toggle_top() + + from enigma import getDesktop, gMainDC + desktop_size = getDesktop(0).size() + gMainDC.getInstance().setResolution(desktop_size.width(), desktop_size.height()) + vbcfg.setPosition(vbcfg.g_position) + + fbClass.getInstance().unlock() + eRCInput.getInstance().unlock() + self.is_browser_opened = False + + vbcfg.LOG("Stop Browser") + self.setTitle(_("BrowserMain")) + if self.m_url is not None: + self.keyCancel() + if vbcfg.g_service: + self.session.nav.playService(vbcfg.g_service) + else: + self.keyRight() + self.keyLeft() + + def _cb_update_bookmark(self, data=None): + if data is None: + return + if not vbcfg.g_main.check_browser(): + message = _("Opera Browser was not running.\nPlease running browser using [File]>[Start/Stop] menu.") + self.session.open(MessageBox, message, MessageBox.TYPE_INFO) + return + (url, mode) = data + self._cb_start_browser(url, mode) + + def _cmd_OpenStartpage(self): + if not vbcfg.g_main.check_browser(): + 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 + #startpage = 'http://vuplus.com' + try: + d = BrowserSetting().getData() + start = d['start'] + mode = d['type'] + except: + pass + self._cb_start_browser(start, mode) + + def _cmd_OpenURL(self): + if not vbcfg.g_main.check_browser(): + 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._cb_start_browser, VirtualKeyBoard, title=(_("Please enter URL here")), text='http://') + + def _cmd_StartStop(self): + if vbcfg.g_main is None: + return + vbcfg.g_main.menu_toggle_browser(self.keyMenu()) + + def _cmd_Exit(self): + self.close() + + def _cmd_Bookmark(self): + url = self._current_url + if url is None: + url = '' + title = self._current_title + if title is None: + title = '' + self.session.openWithCallback(self._cb_update_bookmark, BrowserBookmarkWindow, url, title) + + def _cmd_Preference(self): + url = self._current_url + if url is None: + url = '' + self.session.open(BrowserPreferenceWindow, url) + + def _cmd_Position(self): + self.session.open(BrowserPositionWindow) + + def _cmd_About(self): + self.session.open(MessageBox, _('Opera Web Browser Plugin v2.0'), type = MessageBox.TYPE_INFO) + + def _cmd_Help(self): + self.session.open(BrowserHelpWindow) + + def _cmd_Return(self): + self.keyCancel() + + def do_command(self, command): + try: + self.COMMAND_MAP[command]() + except Exception, ErrMsg: + vbcfg.ERR(ErrMsg) + + def get_menulist_items(self, idx=0): + l = self.MENULIST_ITEMS[idx] + if self.is_browser_opened and idx == 0: + l = [(_("Return"), None)] + return l + + def set_menu_item(self): + self["menuitemFile"].setForegroundColorNum(0) + self["menuitemTool"].setForegroundColorNum(0) + self["menuitemHelp"].setForegroundColorNum(0) + self.top_menus[self.idx_menu].setForegroundColorNum(1) + + def toggle_top(self): + if self.is_show_top: + self.hide() + else: + self.show() + self.is_show_top = not self.is_show_top + + def toggle_menulist(self): + if self.is_show_menu: + self["menulist"].hide() + else: + self["menulist"].show() + self.is_show_menu = not self.is_show_menu + + def toggle_browser(self, url=None, title=None): + self._current_url = url + if title is None: + idx = len(url) + if idx > 10: + idx = 10 + title = url[:idx] + self._current_title = title + if self._current_url: + vbcfg.DEBUG(self._current_url) + + self.toggle_top() + + self["menulist"].pageUp() + self.keyUp() + self.keyDown() + + def keyCancel(self): + if self.is_browser_opened: + fbClass.getInstance().lock() + eRCInput.getInstance().lock() + self.toggle_top() + + VBController.command("BROWSER_MENU_CLOSE") + return + self._cmd_Exit() + + def keyOK(self): + if not self.is_show_top: + self.keyMenu() + return + if not self.is_show_menu: + self.keyDown() + return + if self["menulist"].getCurrent()[1] is None: + self.do_command(self["menulist"].getCurrent()[0]) + return + self.keyRight() + + def keyLeft(self): + if self.idx_menu == 0: + self.idx_menu = 2 + else: + self.idx_menu = self.idx_menu - 1 + + if self.is_show_menu: + self["menulist"].pageUp() + self.keyUp() + self.keyDown() + self.set_menu_item() + + def keyRight(self): + if self.idx_menu == 2: + self.idx_menu = 0 + else: + self.idx_menu = self.idx_menu + 1 + + if self.is_show_menu: + self["menulist"].pageUp() + self.keyUp() + self.keyDown() + self.set_menu_item() + + def keyUp(self): + if self.is_show_menu and self["menulist"].getSelectedIndex() == 0: + self.toggle_menulist() + return + self["menulist"].up() + + def keyDown(self): + if not self.is_show_menu: + self["menulist"].setList(self.get_menulist_items(self.idx_menu)) + self["menulist"].resize(self.MENULIST_WIDTH, self.MENULIST_HEIGHT*len(self.get_menulist_items(self.idx_menu))+5) + self["menulist"].move(self.MENU_ITEM_WIDTH*self.idx_menu+50,self.MENU_ITEM_HEIGHT+30) + self.toggle_menulist() + return + self["menulist"].down() + + def keyMenu(self): + self.toggle_top() diff --git a/lib/python/Plugins/Extensions/HbbTV/hbbtv.py b/lib/python/Plugins/Extensions/HbbTV/hbbtv.py new file mode 100644 index 0000000..0e9d96a --- /dev/null +++ b/lib/python/Plugins/Extensions/HbbTV/hbbtv.py @@ -0,0 +1,94 @@ +from Screens.Screen import Screen + +from enigma import eTimer, fbClass, eRCInput + +import struct, vbcfg + +from __init__ import _ +from vbipc import VBController + +class HbbTVWindow(Screen): + skin = """ + + + """ + def __init__(self, session, url=None, app_info=None): + fbClass.getInstance().lock() + eRCInput.getInstance().lock() + + Screen.__init__(self, session) + + self._url = url + self._info = app_info + + self.onLayoutFinish.append(self.start_hbbtv_application) + + self._close_timer = eTimer() + self._close_timer.callback.append(self.stop_hbbtv_application) + + try: + if self._cb_set_title not in vbcfg.g_main.vbhandler.onSetTitleCB: + vbcfg.g_main.vbhandler.onSetTitleCB.append(self._cb_set_title) + except Exception: + pass + + try: + if self._cb_close_window not in vbcfg.g_main.vbhandler.onCloseCB: + vbcfg.g_main.vbhandler.onCloseCB.append(self._cb_close_window) + except Exception: + pass + + def _cb_set_title(self, title=None): + vbcfg.LOG("pate title: %s" % title) + if title is None: + return + self.setTitle(title) + + def _cb_close_window(self): + self._close_timer.start(1000) + + def start_hbbtv_application(self): + vbcfg.g_main.vbhandler.soft_volume = -1 + self.setTitle(_('HbbTV Plugin')) + vbcfg.LOG("Starting HbbTV") + + vbcfg.DEBUG("url : %s" % self._url and self._url) + vbcfg.DEBUG("info: %s" % self._info and self._info["url"]) + + if self._info and self._info["control"] == 1 and vbcfg.g_channel_info is not None: + (sid, onid, tsid, name) = vbcfg.g_channel_info + params = struct.pack('iiiiii', 0, self._info["orgid"], sid, onid, tsid, 0) + ret = VBController.command('HBBTV_LOADAIT', params) + else: + ret = VBController.command('HBBTV_OPENURL', self._url) + + if ret is False: + self._close_timer.start(1000) + vbcfg.ERR("Failed to start hbbtv") + + def stop_hbbtv_application(self): + self._close_timer.stop() + self._close_timer = None + + try: + if self._cb_set_title in vbcfg.g_main.vbhandler.onSetTitleCB: + vbcfg.g_main.vbhandler.onSetTitleCB.remove(self._cb_set_title) + except Exception: + pass + + try: + if self._cb_close_window in vbcfg.g_main.vbhandler.onCloseCB: + vbcfg.g_main.vbhandler.onCloseCB.remove(self._cb_close_window) + except Exception: + pass + + from enigma import getDesktop, gMainDC + desktop_size = getDesktop(0).size() + gMainDC.getInstance().setResolution(desktop_size.width(), desktop_size.height()) + + fbClass.getInstance().unlock() + eRCInput.getInstance().unlock() + + vbcfg.LOG("Stop HbbTV") + self.close() + diff --git a/lib/python/Plugins/Extensions/HbbTV/locale/HbbTV.pot b/lib/python/Plugins/Extensions/HbbTV/locale/HbbTV.pot index 8aebac2..2dfcc50 100644 --- a/lib/python/Plugins/Extensions/HbbTV/locale/HbbTV.pot +++ b/lib/python/Plugins/Extensions/HbbTV/locale/HbbTV.pot @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2012-11-20 18:20+KST\n" +"POT-Creation-Date: 2014-07-14 18:04+KST\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -15,333 +15,445 @@ msgstr "" "Generated-By: pygettext.py 1.5\n" -#: plugin.py:856 -msgid "HbbTV Plugin" -msgstr "" - -#: plugin.py:969 -msgid "" -"HbbTV Browser was not running.\n" -"Please running browser before start HbbTV Application." +#: browser.py:152 browser.py:266 browser.py:405 youtube.py:134 +msgid "Cancel" msgstr "" -#: plugin.py:1041 -msgid "No detected HbbTV applications." +#: browser.py:153 browser.py:267 browser.py:406 youtube.py:135 +msgid "Save" msgstr "" -#: plugin.py:1042 -msgid "Please choose an HbbTV application." +#: browser.py:154 +msgid " " msgstr "" -#: plugin.py:1053 -msgid "Stop" +#: browser.py:174 +msgid "left" msgstr "" -#: plugin.py:1054 -msgid "Start" +#: browser.py:175 +msgid "width" msgstr "" -#: plugin.py:1055 -msgid "Please choose one." +#: browser.py:176 +msgid "top" msgstr "" -#: plugin.py:1165 plugin.py:1280 -msgid "Cancel" +#: browser.py:177 +msgid "height" msgstr "" -#: plugin.py:1166 plugin.py:1281 -msgid "Save" +#: browser.py:229 +msgid "Really close without saving settings?" msgstr "" -#: plugin.py:1178 plugin.py:1693 plugin.py:1922 +#: browser.py:279 browser.py:910 browser.py:919 msgid "Preference" msgstr "" -#: plugin.py:1197 +#: browser.py:292 msgid "" "Invalid URL!!(Empty)\n" "Please, Input to the URL." msgstr "" -#: plugin.py:1214 plugin.py:1870 +#: browser.py:313 browser.py:1037 msgid "Please enter URL here" msgstr "" -#: plugin.py:1226 +#: browser.py:335 msgid "Start Page" msgstr "" -#: plugin.py:1228 +#: browser.py:337 msgid "Current Page" msgstr "" -#: plugin.py:1229 +#: browser.py:338 msgid "Direct Input" msgstr "" -#: plugin.py:1231 +#: browser.py:340 msgid "Startpage" msgstr "" -#: plugin.py:1295 plugin.py:1446 plugin.py:1693 plugin.py:1921 +#: browser.py:355 +msgid "Keyboard Layout" +msgstr "" + +#: browser.py:420 browser.py:575 browser.py:910 browser.py:918 msgid "Bookmark" msgstr "" -#: plugin.py:1300 plugin.py:1382 +#: browser.py:425 browser.py:511 msgid "Name" msgstr "" -#: plugin.py:1303 plugin.py:1389 +#: browser.py:428 browser.py:518 msgid "Title" msgstr "" -#: plugin.py:1305 plugin.py:1390 +#: browser.py:430 browser.py:519 msgid "Url" msgstr "" -#: plugin.py:1309 +#: browser.py:434 msgid "" "!!(Empty)\n" -"Please, Input to the " +"Please, Input to the" msgstr "" -#: plugin.py:1309 +#: browser.py:434 msgid "Invalid " msgstr "" -#: plugin.py:1333 plugin.py:1344 plugin.py:1435 plugin.py:1516 plugin.py:1519 +#: browser.py:458 browser.py:469 browser.py:564 browser.py:652 browser.py:655 msgid "Add" msgstr "" -#: plugin.py:1336 plugin.py:1340 +#: browser.py:461 browser.py:465 msgid "Category Name" msgstr "" -#: plugin.py:1349 plugin.py:1357 +#: browser.py:474 browser.py:482 msgid "Bookmark Title" msgstr "" -#: plugin.py:1352 plugin.py:1360 +#: browser.py:477 browser.py:485 msgid "Bookmark URL" msgstr "" -#: plugin.py:1434 plugin.py:1581 plugin.py:1692 plugin.py:1916 +#: browser.py:563 browser.py:720 browser.py:909 browser.py:917 msgid "Exit" msgstr "" -#: plugin.py:1436 plugin.py:1527 plugin.py:1528 +#: browser.py:565 browser.py:664 browser.py:665 msgid "Edit" msgstr "" -#: plugin.py:1437 +#: browser.py:566 msgid "Delete" msgstr "" -#: plugin.py:1438 +#: browser.py:567 msgid "Set as Startpage" msgstr "" -#: plugin.py:1485 +#: browser.py:621 msgid "Invalid URL. Please check again!!" msgstr "" -#: plugin.py:1493 +#: browser.py:629 msgid "Do you want to set selected url to the Startpage?" msgstr "" -#: plugin.py:1508 +#: browser.py:644 msgid "Current page is already exist." msgstr "" -#: plugin.py:1521 plugin.py:1522 +#: browser.py:657 browser.py:658 msgid "Direct Input(Bookmark)" msgstr "" -#: plugin.py:1521 plugin.py:1522 +#: browser.py:657 browser.py:658 msgid "Direct Input(Category)" msgstr "" -#: plugin.py:1522 +#: browser.py:658 msgid "Currentpage(Bookmark)" msgstr "" -#: plugin.py:1523 +#: browser.py:659 msgid "Please choose." msgstr "" -#: plugin.py:1538 +#: browser.py:676 msgid "Do you want to delete the category and the bookmarks?" msgstr "" -#: plugin.py:1539 +#: browser.py:677 msgid "Do you want to delete the bookmark?" msgstr "" -#: plugin.py:1547 +#: browser.py:686 msgid "" "Can't open selected bookmark.\n" " - URL data is empty!!" msgstr "" -#: plugin.py:1582 +#: browser.py:721 msgid "Global" msgstr "" -#: plugin.py:1583 +#: browser.py:722 msgid "Mouse" msgstr "" -#: plugin.py:1584 +#: browser.py:723 msgid "Keyboard" msgstr "" -#: plugin.py:1602 +#: browser.py:741 msgid "Browser Help" msgstr "" -#: plugin.py:1612 -msgid "Exit the Opera browser." +#: browser.py:751 +msgid "Exit the Browser." msgstr "" -#: plugin.py:1615 +#: browser.py:754 msgid "Show the Menu window." msgstr "" -#: plugin.py:1618 plugin.py:1649 +#: browser.py:757 browser.py:788 msgid "Enter Key" msgstr "" -#: plugin.py:1619 +#: browser.py:758 msgid "Show the Virtual keyboard window." msgstr "" -#: plugin.py:1620 +#: browser.py:759 msgid "Backspace Key" msgstr "" -#: plugin.py:1623 +#: browser.py:762 msgid "Switch to keyboard/mouse mode." msgstr "" -#: plugin.py:1628 +#: browser.py:767 msgid "It will move the mouse pointer up." msgstr "" -#: plugin.py:1629 +#: browser.py:768 msgid "It will move the mouse pointer down." msgstr "" -#: plugin.py:1630 +#: browser.py:769 msgid "It will move the mouse pointer left." msgstr "" -#: plugin.py:1631 +#: browser.py:770 msgid "It will move the mouse pointer right." msgstr "" -#: plugin.py:1634 +#: browser.py:773 msgid "Left Mouse Button" msgstr "" -#: plugin.py:1637 +#: browser.py:776 msgid "Right Mouse Button" msgstr "" -#: plugin.py:1638 plugin.py:1645 +#: browser.py:777 browser.py:784 msgid "Left Key" msgstr "" -#: plugin.py:1639 plugin.py:1646 +#: browser.py:778 browser.py:785 msgid "Right Key" msgstr "" -#: plugin.py:1643 +#: browser.py:782 msgid "Up Key" msgstr "" -#: plugin.py:1644 +#: browser.py:783 msgid "Down Key" msgstr "" -#: plugin.py:1652 +#: browser.py:791 msgid "PageUp Key" msgstr "" -#: plugin.py:1653 +#: browser.py:792 msgid "PageDown Key" msgstr "" -#: plugin.py:1654 +#: browser.py:793 msgid "Go to previous page." msgstr "" -#: plugin.py:1655 +#: browser.py:794 msgid "Go to next page." msgstr "" -#: plugin.py:1692 plugin.py:1919 -msgid "Open URL" +#: browser.py:888 +msgid "File" msgstr "" -#: plugin.py:1692 plugin.py:1920 -msgid "Start/Stop" +#: browser.py:889 +msgid "Tools" msgstr "" -#: plugin.py:1692 plugin.py:1924 -msgid "Open Startpage" +#: browser.py:890 browser.py:911 browser.py:922 youtube.py:45 +msgid "Help" msgstr "" -#: plugin.py:1694 plugin.py:1743 plugin.py:1917 -msgid "Help" +#: browser.py:895 browser.py:1066 +msgid "Opera Web Browser Plugin v2.0" msgstr "" -#: plugin.py:1694 plugin.py:1918 -msgid "About" +#: browser.py:896 browser.py:998 +msgid "BrowserMain" msgstr "" -#: plugin.py:1741 -msgid "File" +#: browser.py:909 browser.py:914 +msgid "Open Startpage" msgstr "" -#: plugin.py:1742 -msgid "Tools" +#: browser.py:909 browser.py:915 +msgid "Open URL" msgstr "" -#: plugin.py:1748 plugin.py:1872 -msgid "Opera Web Browser Plugin v1.0" +#: browser.py:909 browser.py:916 +msgid "Start/Stop" msgstr "" -#: plugin.py:1749 -msgid "BrowserMain" +#: browser.py:910 browser.py:920 +msgid "Position Setup" msgstr "" -#: plugin.py:1768 plugin.py:1923 -msgid "Return" +#: browser.py:911 browser.py:921 +msgid "About" msgstr "" -#: plugin.py:1817 -msgid "Opera Browser" +#: browser.py:923 browser.py:1083 +msgid "Return" msgstr "" -#: plugin.py:1867 plugin.py:1896 +#: browser.py:1011 browser.py:1019 browser.py:1034 msgid "" "Opera Browser was not running.\n" "Please running browser using [File]>[Start/Stop] menu." msgstr "" -#: plugin.py:2083 -msgid "HbbTV Applications" +#: hbbtv.py:52 +msgid "HbbTV Plugin" +msgstr "" + +#: plugin.py:234 +msgid "" +"HbbTV Browser was not running.\n" +"Please running browser before start HbbTV Application." +msgstr "" + +#: plugin.py:263 +msgid "Stop" +msgstr "" + +#: plugin.py:265 youtube.py:44 +msgid "Start" +msgstr "" + +#: plugin.py:266 +msgid "Please choose one." msgstr "" -#: plugin.py:2084 +#: plugin.py:289 +msgid "No detected HbbTV applications." +msgstr "" + +#: plugin.py:290 +msgid "Please choose an HbbTV application." +msgstr "" + +#: plugin.py:411 plugin.py:432 +msgid "YouTube TV" +msgstr "" + +#: plugin.py:433 youtube.py:141 +msgid "YouTube TV Settings" +msgstr "" + +#: plugin.py:434 msgid "Browser Start/Stop" msgstr "" -#: plugin.py:2085 +#: plugin.py:435 +msgid "HbbTV Applications" +msgstr "" + +#: plugin.py:436 msgid "Opera Web Browser" msgstr "" -#: plugin.py:2085 +#: plugin.py:436 msgid "start opera web browser" msgstr "" +#: youtube.py:54 +msgid "Start YouTube TV" +msgstr "" + +#: youtube.py:55 +msgid "YouTube TV is a new way to watch YouTube videos on Vu+" +msgstr "" + +#: youtube.py:56 +msgid "* Start YouTube TV" +msgstr "" + +#: youtube.py:57 +msgid "* RC Help" +msgstr "" + +#: youtube.py:62 +msgid "Play ther selected the video" +msgstr "" + +#: youtube.py:63 +msgid "Exit the YouTube TV" +msgstr "" + +#: youtube.py:66 +msgid "Move up" +msgstr "" + +#: youtube.py:67 +msgid "Move down" +msgstr "" + +#: youtube.py:68 +msgid "Move left" +msgstr "" + +#: youtube.py:69 +msgid "Move right" +msgstr "" + +#: youtube.py:72 +msgid "Search a video" +msgstr "" + +#: youtube.py:73 +msgid "Skip forward 10 sec" +msgstr "" + +#: youtube.py:74 +msgid "Skip backward 10 sec" +msgstr "" + +#: youtube.py:77 +msgid "Play current video" +msgstr "" + +#: youtube.py:78 +msgid "Pause current video" +msgstr "" + +#: youtube.py:79 +msgid "Stop current video" +msgstr "" + +#: youtube.py:82 +msgid "Back" +msgstr "" + +#: youtube.py:166 +msgid "YouTube TV URL" +msgstr "" + +#: youtube.py:167 +msgid "Do not show YouTube TV Starter again" +msgstr "" + diff --git a/lib/python/Plugins/Extensions/HbbTV/locale/Makefile.am b/lib/python/Plugins/Extensions/HbbTV/locale/Makefile.am index fc17c88..5a7fd21 100644 --- a/lib/python/Plugins/Extensions/HbbTV/locale/Makefile.am +++ b/lib/python/Plugins/Extensions/HbbTV/locale/Makefile.am @@ -19,10 +19,10 @@ dist-hook: $(LANGPO) install-data-local: $(LANGMO) for lang in $(LANGS); do \ $(mkinstalldirs) $(DESTDIR)$(plugindir)/locale/$$lang/LC_MESSAGES; \ - $(INSTALL_DATA) $$lang.mo $(DESTDIR)$(plugindir)/locale/$$lang/LC_MESSAGES/$$lang.mo; \ + $(INSTALL_DATA) $$lang.mo $(DESTDIR)$(plugindir)/locale/$$lang/LC_MESSAGES/$(PLUGIN).mo; \ done uninstall-local: for lang in $(LANGS); do \ - $(RM) $(DESTDIR)$(plugindir)/locale/$$lang/LC_MESSAGES/$$lang.mo; \ + $(RM) $(DESTDIR)$(plugindir)/locale/$$lang/LC_MESSAGES/$(PLUGIN).mo; \ done diff --git a/lib/python/Plugins/Extensions/HbbTV/locale/de.po b/lib/python/Plugins/Extensions/HbbTV/locale/de.po index 8aebac2..2dfcc50 100644 --- a/lib/python/Plugins/Extensions/HbbTV/locale/de.po +++ b/lib/python/Plugins/Extensions/HbbTV/locale/de.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2012-11-20 18:20+KST\n" +"POT-Creation-Date: 2014-07-14 18:04+KST\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -15,333 +15,445 @@ msgstr "" "Generated-By: pygettext.py 1.5\n" -#: plugin.py:856 -msgid "HbbTV Plugin" -msgstr "" - -#: plugin.py:969 -msgid "" -"HbbTV Browser was not running.\n" -"Please running browser before start HbbTV Application." +#: browser.py:152 browser.py:266 browser.py:405 youtube.py:134 +msgid "Cancel" msgstr "" -#: plugin.py:1041 -msgid "No detected HbbTV applications." +#: browser.py:153 browser.py:267 browser.py:406 youtube.py:135 +msgid "Save" msgstr "" -#: plugin.py:1042 -msgid "Please choose an HbbTV application." +#: browser.py:154 +msgid " " msgstr "" -#: plugin.py:1053 -msgid "Stop" +#: browser.py:174 +msgid "left" msgstr "" -#: plugin.py:1054 -msgid "Start" +#: browser.py:175 +msgid "width" msgstr "" -#: plugin.py:1055 -msgid "Please choose one." +#: browser.py:176 +msgid "top" msgstr "" -#: plugin.py:1165 plugin.py:1280 -msgid "Cancel" +#: browser.py:177 +msgid "height" msgstr "" -#: plugin.py:1166 plugin.py:1281 -msgid "Save" +#: browser.py:229 +msgid "Really close without saving settings?" msgstr "" -#: plugin.py:1178 plugin.py:1693 plugin.py:1922 +#: browser.py:279 browser.py:910 browser.py:919 msgid "Preference" msgstr "" -#: plugin.py:1197 +#: browser.py:292 msgid "" "Invalid URL!!(Empty)\n" "Please, Input to the URL." msgstr "" -#: plugin.py:1214 plugin.py:1870 +#: browser.py:313 browser.py:1037 msgid "Please enter URL here" msgstr "" -#: plugin.py:1226 +#: browser.py:335 msgid "Start Page" msgstr "" -#: plugin.py:1228 +#: browser.py:337 msgid "Current Page" msgstr "" -#: plugin.py:1229 +#: browser.py:338 msgid "Direct Input" msgstr "" -#: plugin.py:1231 +#: browser.py:340 msgid "Startpage" msgstr "" -#: plugin.py:1295 plugin.py:1446 plugin.py:1693 plugin.py:1921 +#: browser.py:355 +msgid "Keyboard Layout" +msgstr "" + +#: browser.py:420 browser.py:575 browser.py:910 browser.py:918 msgid "Bookmark" msgstr "" -#: plugin.py:1300 plugin.py:1382 +#: browser.py:425 browser.py:511 msgid "Name" msgstr "" -#: plugin.py:1303 plugin.py:1389 +#: browser.py:428 browser.py:518 msgid "Title" msgstr "" -#: plugin.py:1305 plugin.py:1390 +#: browser.py:430 browser.py:519 msgid "Url" msgstr "" -#: plugin.py:1309 +#: browser.py:434 msgid "" "!!(Empty)\n" -"Please, Input to the " +"Please, Input to the" msgstr "" -#: plugin.py:1309 +#: browser.py:434 msgid "Invalid " msgstr "" -#: plugin.py:1333 plugin.py:1344 plugin.py:1435 plugin.py:1516 plugin.py:1519 +#: browser.py:458 browser.py:469 browser.py:564 browser.py:652 browser.py:655 msgid "Add" msgstr "" -#: plugin.py:1336 plugin.py:1340 +#: browser.py:461 browser.py:465 msgid "Category Name" msgstr "" -#: plugin.py:1349 plugin.py:1357 +#: browser.py:474 browser.py:482 msgid "Bookmark Title" msgstr "" -#: plugin.py:1352 plugin.py:1360 +#: browser.py:477 browser.py:485 msgid "Bookmark URL" msgstr "" -#: plugin.py:1434 plugin.py:1581 plugin.py:1692 plugin.py:1916 +#: browser.py:563 browser.py:720 browser.py:909 browser.py:917 msgid "Exit" msgstr "" -#: plugin.py:1436 plugin.py:1527 plugin.py:1528 +#: browser.py:565 browser.py:664 browser.py:665 msgid "Edit" msgstr "" -#: plugin.py:1437 +#: browser.py:566 msgid "Delete" msgstr "" -#: plugin.py:1438 +#: browser.py:567 msgid "Set as Startpage" msgstr "" -#: plugin.py:1485 +#: browser.py:621 msgid "Invalid URL. Please check again!!" msgstr "" -#: plugin.py:1493 +#: browser.py:629 msgid "Do you want to set selected url to the Startpage?" msgstr "" -#: plugin.py:1508 +#: browser.py:644 msgid "Current page is already exist." msgstr "" -#: plugin.py:1521 plugin.py:1522 +#: browser.py:657 browser.py:658 msgid "Direct Input(Bookmark)" msgstr "" -#: plugin.py:1521 plugin.py:1522 +#: browser.py:657 browser.py:658 msgid "Direct Input(Category)" msgstr "" -#: plugin.py:1522 +#: browser.py:658 msgid "Currentpage(Bookmark)" msgstr "" -#: plugin.py:1523 +#: browser.py:659 msgid "Please choose." msgstr "" -#: plugin.py:1538 +#: browser.py:676 msgid "Do you want to delete the category and the bookmarks?" msgstr "" -#: plugin.py:1539 +#: browser.py:677 msgid "Do you want to delete the bookmark?" msgstr "" -#: plugin.py:1547 +#: browser.py:686 msgid "" "Can't open selected bookmark.\n" " - URL data is empty!!" msgstr "" -#: plugin.py:1582 +#: browser.py:721 msgid "Global" msgstr "" -#: plugin.py:1583 +#: browser.py:722 msgid "Mouse" msgstr "" -#: plugin.py:1584 +#: browser.py:723 msgid "Keyboard" msgstr "" -#: plugin.py:1602 +#: browser.py:741 msgid "Browser Help" msgstr "" -#: plugin.py:1612 -msgid "Exit the Opera browser." +#: browser.py:751 +msgid "Exit the Browser." msgstr "" -#: plugin.py:1615 +#: browser.py:754 msgid "Show the Menu window." msgstr "" -#: plugin.py:1618 plugin.py:1649 +#: browser.py:757 browser.py:788 msgid "Enter Key" msgstr "" -#: plugin.py:1619 +#: browser.py:758 msgid "Show the Virtual keyboard window." msgstr "" -#: plugin.py:1620 +#: browser.py:759 msgid "Backspace Key" msgstr "" -#: plugin.py:1623 +#: browser.py:762 msgid "Switch to keyboard/mouse mode." msgstr "" -#: plugin.py:1628 +#: browser.py:767 msgid "It will move the mouse pointer up." msgstr "" -#: plugin.py:1629 +#: browser.py:768 msgid "It will move the mouse pointer down." msgstr "" -#: plugin.py:1630 +#: browser.py:769 msgid "It will move the mouse pointer left." msgstr "" -#: plugin.py:1631 +#: browser.py:770 msgid "It will move the mouse pointer right." msgstr "" -#: plugin.py:1634 +#: browser.py:773 msgid "Left Mouse Button" msgstr "" -#: plugin.py:1637 +#: browser.py:776 msgid "Right Mouse Button" msgstr "" -#: plugin.py:1638 plugin.py:1645 +#: browser.py:777 browser.py:784 msgid "Left Key" msgstr "" -#: plugin.py:1639 plugin.py:1646 +#: browser.py:778 browser.py:785 msgid "Right Key" msgstr "" -#: plugin.py:1643 +#: browser.py:782 msgid "Up Key" msgstr "" -#: plugin.py:1644 +#: browser.py:783 msgid "Down Key" msgstr "" -#: plugin.py:1652 +#: browser.py:791 msgid "PageUp Key" msgstr "" -#: plugin.py:1653 +#: browser.py:792 msgid "PageDown Key" msgstr "" -#: plugin.py:1654 +#: browser.py:793 msgid "Go to previous page." msgstr "" -#: plugin.py:1655 +#: browser.py:794 msgid "Go to next page." msgstr "" -#: plugin.py:1692 plugin.py:1919 -msgid "Open URL" +#: browser.py:888 +msgid "File" msgstr "" -#: plugin.py:1692 plugin.py:1920 -msgid "Start/Stop" +#: browser.py:889 +msgid "Tools" msgstr "" -#: plugin.py:1692 plugin.py:1924 -msgid "Open Startpage" +#: browser.py:890 browser.py:911 browser.py:922 youtube.py:45 +msgid "Help" msgstr "" -#: plugin.py:1694 plugin.py:1743 plugin.py:1917 -msgid "Help" +#: browser.py:895 browser.py:1066 +msgid "Opera Web Browser Plugin v2.0" msgstr "" -#: plugin.py:1694 plugin.py:1918 -msgid "About" +#: browser.py:896 browser.py:998 +msgid "BrowserMain" msgstr "" -#: plugin.py:1741 -msgid "File" +#: browser.py:909 browser.py:914 +msgid "Open Startpage" msgstr "" -#: plugin.py:1742 -msgid "Tools" +#: browser.py:909 browser.py:915 +msgid "Open URL" msgstr "" -#: plugin.py:1748 plugin.py:1872 -msgid "Opera Web Browser Plugin v1.0" +#: browser.py:909 browser.py:916 +msgid "Start/Stop" msgstr "" -#: plugin.py:1749 -msgid "BrowserMain" +#: browser.py:910 browser.py:920 +msgid "Position Setup" msgstr "" -#: plugin.py:1768 plugin.py:1923 -msgid "Return" +#: browser.py:911 browser.py:921 +msgid "About" msgstr "" -#: plugin.py:1817 -msgid "Opera Browser" +#: browser.py:923 browser.py:1083 +msgid "Return" msgstr "" -#: plugin.py:1867 plugin.py:1896 +#: browser.py:1011 browser.py:1019 browser.py:1034 msgid "" "Opera Browser was not running.\n" "Please running browser using [File]>[Start/Stop] menu." msgstr "" -#: plugin.py:2083 -msgid "HbbTV Applications" +#: hbbtv.py:52 +msgid "HbbTV Plugin" +msgstr "" + +#: plugin.py:234 +msgid "" +"HbbTV Browser was not running.\n" +"Please running browser before start HbbTV Application." +msgstr "" + +#: plugin.py:263 +msgid "Stop" +msgstr "" + +#: plugin.py:265 youtube.py:44 +msgid "Start" +msgstr "" + +#: plugin.py:266 +msgid "Please choose one." msgstr "" -#: plugin.py:2084 +#: plugin.py:289 +msgid "No detected HbbTV applications." +msgstr "" + +#: plugin.py:290 +msgid "Please choose an HbbTV application." +msgstr "" + +#: plugin.py:411 plugin.py:432 +msgid "YouTube TV" +msgstr "" + +#: plugin.py:433 youtube.py:141 +msgid "YouTube TV Settings" +msgstr "" + +#: plugin.py:434 msgid "Browser Start/Stop" msgstr "" -#: plugin.py:2085 +#: plugin.py:435 +msgid "HbbTV Applications" +msgstr "" + +#: plugin.py:436 msgid "Opera Web Browser" msgstr "" -#: plugin.py:2085 +#: plugin.py:436 msgid "start opera web browser" msgstr "" +#: youtube.py:54 +msgid "Start YouTube TV" +msgstr "" + +#: youtube.py:55 +msgid "YouTube TV is a new way to watch YouTube videos on Vu+" +msgstr "" + +#: youtube.py:56 +msgid "* Start YouTube TV" +msgstr "" + +#: youtube.py:57 +msgid "* RC Help" +msgstr "" + +#: youtube.py:62 +msgid "Play ther selected the video" +msgstr "" + +#: youtube.py:63 +msgid "Exit the YouTube TV" +msgstr "" + +#: youtube.py:66 +msgid "Move up" +msgstr "" + +#: youtube.py:67 +msgid "Move down" +msgstr "" + +#: youtube.py:68 +msgid "Move left" +msgstr "" + +#: youtube.py:69 +msgid "Move right" +msgstr "" + +#: youtube.py:72 +msgid "Search a video" +msgstr "" + +#: youtube.py:73 +msgid "Skip forward 10 sec" +msgstr "" + +#: youtube.py:74 +msgid "Skip backward 10 sec" +msgstr "" + +#: youtube.py:77 +msgid "Play current video" +msgstr "" + +#: youtube.py:78 +msgid "Pause current video" +msgstr "" + +#: youtube.py:79 +msgid "Stop current video" +msgstr "" + +#: youtube.py:82 +msgid "Back" +msgstr "" + +#: youtube.py:166 +msgid "YouTube TV URL" +msgstr "" + +#: youtube.py:167 +msgid "Do not show YouTube TV Starter again" +msgstr "" + diff --git a/lib/python/Plugins/Extensions/HbbTV/locale/en.po b/lib/python/Plugins/Extensions/HbbTV/locale/en.po index 8aebac2..2dfcc50 100644 --- a/lib/python/Plugins/Extensions/HbbTV/locale/en.po +++ b/lib/python/Plugins/Extensions/HbbTV/locale/en.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2012-11-20 18:20+KST\n" +"POT-Creation-Date: 2014-07-14 18:04+KST\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -15,333 +15,445 @@ msgstr "" "Generated-By: pygettext.py 1.5\n" -#: plugin.py:856 -msgid "HbbTV Plugin" -msgstr "" - -#: plugin.py:969 -msgid "" -"HbbTV Browser was not running.\n" -"Please running browser before start HbbTV Application." +#: browser.py:152 browser.py:266 browser.py:405 youtube.py:134 +msgid "Cancel" msgstr "" -#: plugin.py:1041 -msgid "No detected HbbTV applications." +#: browser.py:153 browser.py:267 browser.py:406 youtube.py:135 +msgid "Save" msgstr "" -#: plugin.py:1042 -msgid "Please choose an HbbTV application." +#: browser.py:154 +msgid " " msgstr "" -#: plugin.py:1053 -msgid "Stop" +#: browser.py:174 +msgid "left" msgstr "" -#: plugin.py:1054 -msgid "Start" +#: browser.py:175 +msgid "width" msgstr "" -#: plugin.py:1055 -msgid "Please choose one." +#: browser.py:176 +msgid "top" msgstr "" -#: plugin.py:1165 plugin.py:1280 -msgid "Cancel" +#: browser.py:177 +msgid "height" msgstr "" -#: plugin.py:1166 plugin.py:1281 -msgid "Save" +#: browser.py:229 +msgid "Really close without saving settings?" msgstr "" -#: plugin.py:1178 plugin.py:1693 plugin.py:1922 +#: browser.py:279 browser.py:910 browser.py:919 msgid "Preference" msgstr "" -#: plugin.py:1197 +#: browser.py:292 msgid "" "Invalid URL!!(Empty)\n" "Please, Input to the URL." msgstr "" -#: plugin.py:1214 plugin.py:1870 +#: browser.py:313 browser.py:1037 msgid "Please enter URL here" msgstr "" -#: plugin.py:1226 +#: browser.py:335 msgid "Start Page" msgstr "" -#: plugin.py:1228 +#: browser.py:337 msgid "Current Page" msgstr "" -#: plugin.py:1229 +#: browser.py:338 msgid "Direct Input" msgstr "" -#: plugin.py:1231 +#: browser.py:340 msgid "Startpage" msgstr "" -#: plugin.py:1295 plugin.py:1446 plugin.py:1693 plugin.py:1921 +#: browser.py:355 +msgid "Keyboard Layout" +msgstr "" + +#: browser.py:420 browser.py:575 browser.py:910 browser.py:918 msgid "Bookmark" msgstr "" -#: plugin.py:1300 plugin.py:1382 +#: browser.py:425 browser.py:511 msgid "Name" msgstr "" -#: plugin.py:1303 plugin.py:1389 +#: browser.py:428 browser.py:518 msgid "Title" msgstr "" -#: plugin.py:1305 plugin.py:1390 +#: browser.py:430 browser.py:519 msgid "Url" msgstr "" -#: plugin.py:1309 +#: browser.py:434 msgid "" "!!(Empty)\n" -"Please, Input to the " +"Please, Input to the" msgstr "" -#: plugin.py:1309 +#: browser.py:434 msgid "Invalid " msgstr "" -#: plugin.py:1333 plugin.py:1344 plugin.py:1435 plugin.py:1516 plugin.py:1519 +#: browser.py:458 browser.py:469 browser.py:564 browser.py:652 browser.py:655 msgid "Add" msgstr "" -#: plugin.py:1336 plugin.py:1340 +#: browser.py:461 browser.py:465 msgid "Category Name" msgstr "" -#: plugin.py:1349 plugin.py:1357 +#: browser.py:474 browser.py:482 msgid "Bookmark Title" msgstr "" -#: plugin.py:1352 plugin.py:1360 +#: browser.py:477 browser.py:485 msgid "Bookmark URL" msgstr "" -#: plugin.py:1434 plugin.py:1581 plugin.py:1692 plugin.py:1916 +#: browser.py:563 browser.py:720 browser.py:909 browser.py:917 msgid "Exit" msgstr "" -#: plugin.py:1436 plugin.py:1527 plugin.py:1528 +#: browser.py:565 browser.py:664 browser.py:665 msgid "Edit" msgstr "" -#: plugin.py:1437 +#: browser.py:566 msgid "Delete" msgstr "" -#: plugin.py:1438 +#: browser.py:567 msgid "Set as Startpage" msgstr "" -#: plugin.py:1485 +#: browser.py:621 msgid "Invalid URL. Please check again!!" msgstr "" -#: plugin.py:1493 +#: browser.py:629 msgid "Do you want to set selected url to the Startpage?" msgstr "" -#: plugin.py:1508 +#: browser.py:644 msgid "Current page is already exist." msgstr "" -#: plugin.py:1521 plugin.py:1522 +#: browser.py:657 browser.py:658 msgid "Direct Input(Bookmark)" msgstr "" -#: plugin.py:1521 plugin.py:1522 +#: browser.py:657 browser.py:658 msgid "Direct Input(Category)" msgstr "" -#: plugin.py:1522 +#: browser.py:658 msgid "Currentpage(Bookmark)" msgstr "" -#: plugin.py:1523 +#: browser.py:659 msgid "Please choose." msgstr "" -#: plugin.py:1538 +#: browser.py:676 msgid "Do you want to delete the category and the bookmarks?" msgstr "" -#: plugin.py:1539 +#: browser.py:677 msgid "Do you want to delete the bookmark?" msgstr "" -#: plugin.py:1547 +#: browser.py:686 msgid "" "Can't open selected bookmark.\n" " - URL data is empty!!" msgstr "" -#: plugin.py:1582 +#: browser.py:721 msgid "Global" msgstr "" -#: plugin.py:1583 +#: browser.py:722 msgid "Mouse" msgstr "" -#: plugin.py:1584 +#: browser.py:723 msgid "Keyboard" msgstr "" -#: plugin.py:1602 +#: browser.py:741 msgid "Browser Help" msgstr "" -#: plugin.py:1612 -msgid "Exit the Opera browser." +#: browser.py:751 +msgid "Exit the Browser." msgstr "" -#: plugin.py:1615 +#: browser.py:754 msgid "Show the Menu window." msgstr "" -#: plugin.py:1618 plugin.py:1649 +#: browser.py:757 browser.py:788 msgid "Enter Key" msgstr "" -#: plugin.py:1619 +#: browser.py:758 msgid "Show the Virtual keyboard window." msgstr "" -#: plugin.py:1620 +#: browser.py:759 msgid "Backspace Key" msgstr "" -#: plugin.py:1623 +#: browser.py:762 msgid "Switch to keyboard/mouse mode." msgstr "" -#: plugin.py:1628 +#: browser.py:767 msgid "It will move the mouse pointer up." msgstr "" -#: plugin.py:1629 +#: browser.py:768 msgid "It will move the mouse pointer down." msgstr "" -#: plugin.py:1630 +#: browser.py:769 msgid "It will move the mouse pointer left." msgstr "" -#: plugin.py:1631 +#: browser.py:770 msgid "It will move the mouse pointer right." msgstr "" -#: plugin.py:1634 +#: browser.py:773 msgid "Left Mouse Button" msgstr "" -#: plugin.py:1637 +#: browser.py:776 msgid "Right Mouse Button" msgstr "" -#: plugin.py:1638 plugin.py:1645 +#: browser.py:777 browser.py:784 msgid "Left Key" msgstr "" -#: plugin.py:1639 plugin.py:1646 +#: browser.py:778 browser.py:785 msgid "Right Key" msgstr "" -#: plugin.py:1643 +#: browser.py:782 msgid "Up Key" msgstr "" -#: plugin.py:1644 +#: browser.py:783 msgid "Down Key" msgstr "" -#: plugin.py:1652 +#: browser.py:791 msgid "PageUp Key" msgstr "" -#: plugin.py:1653 +#: browser.py:792 msgid "PageDown Key" msgstr "" -#: plugin.py:1654 +#: browser.py:793 msgid "Go to previous page." msgstr "" -#: plugin.py:1655 +#: browser.py:794 msgid "Go to next page." msgstr "" -#: plugin.py:1692 plugin.py:1919 -msgid "Open URL" +#: browser.py:888 +msgid "File" msgstr "" -#: plugin.py:1692 plugin.py:1920 -msgid "Start/Stop" +#: browser.py:889 +msgid "Tools" msgstr "" -#: plugin.py:1692 plugin.py:1924 -msgid "Open Startpage" +#: browser.py:890 browser.py:911 browser.py:922 youtube.py:45 +msgid "Help" msgstr "" -#: plugin.py:1694 plugin.py:1743 plugin.py:1917 -msgid "Help" +#: browser.py:895 browser.py:1066 +msgid "Opera Web Browser Plugin v2.0" msgstr "" -#: plugin.py:1694 plugin.py:1918 -msgid "About" +#: browser.py:896 browser.py:998 +msgid "BrowserMain" msgstr "" -#: plugin.py:1741 -msgid "File" +#: browser.py:909 browser.py:914 +msgid "Open Startpage" msgstr "" -#: plugin.py:1742 -msgid "Tools" +#: browser.py:909 browser.py:915 +msgid "Open URL" msgstr "" -#: plugin.py:1748 plugin.py:1872 -msgid "Opera Web Browser Plugin v1.0" +#: browser.py:909 browser.py:916 +msgid "Start/Stop" msgstr "" -#: plugin.py:1749 -msgid "BrowserMain" +#: browser.py:910 browser.py:920 +msgid "Position Setup" msgstr "" -#: plugin.py:1768 plugin.py:1923 -msgid "Return" +#: browser.py:911 browser.py:921 +msgid "About" msgstr "" -#: plugin.py:1817 -msgid "Opera Browser" +#: browser.py:923 browser.py:1083 +msgid "Return" msgstr "" -#: plugin.py:1867 plugin.py:1896 +#: browser.py:1011 browser.py:1019 browser.py:1034 msgid "" "Opera Browser was not running.\n" "Please running browser using [File]>[Start/Stop] menu." msgstr "" -#: plugin.py:2083 -msgid "HbbTV Applications" +#: hbbtv.py:52 +msgid "HbbTV Plugin" +msgstr "" + +#: plugin.py:234 +msgid "" +"HbbTV Browser was not running.\n" +"Please running browser before start HbbTV Application." +msgstr "" + +#: plugin.py:263 +msgid "Stop" +msgstr "" + +#: plugin.py:265 youtube.py:44 +msgid "Start" +msgstr "" + +#: plugin.py:266 +msgid "Please choose one." msgstr "" -#: plugin.py:2084 +#: plugin.py:289 +msgid "No detected HbbTV applications." +msgstr "" + +#: plugin.py:290 +msgid "Please choose an HbbTV application." +msgstr "" + +#: plugin.py:411 plugin.py:432 +msgid "YouTube TV" +msgstr "" + +#: plugin.py:433 youtube.py:141 +msgid "YouTube TV Settings" +msgstr "" + +#: plugin.py:434 msgid "Browser Start/Stop" msgstr "" -#: plugin.py:2085 +#: plugin.py:435 +msgid "HbbTV Applications" +msgstr "" + +#: plugin.py:436 msgid "Opera Web Browser" msgstr "" -#: plugin.py:2085 +#: plugin.py:436 msgid "start opera web browser" msgstr "" +#: youtube.py:54 +msgid "Start YouTube TV" +msgstr "" + +#: youtube.py:55 +msgid "YouTube TV is a new way to watch YouTube videos on Vu+" +msgstr "" + +#: youtube.py:56 +msgid "* Start YouTube TV" +msgstr "" + +#: youtube.py:57 +msgid "* RC Help" +msgstr "" + +#: youtube.py:62 +msgid "Play ther selected the video" +msgstr "" + +#: youtube.py:63 +msgid "Exit the YouTube TV" +msgstr "" + +#: youtube.py:66 +msgid "Move up" +msgstr "" + +#: youtube.py:67 +msgid "Move down" +msgstr "" + +#: youtube.py:68 +msgid "Move left" +msgstr "" + +#: youtube.py:69 +msgid "Move right" +msgstr "" + +#: youtube.py:72 +msgid "Search a video" +msgstr "" + +#: youtube.py:73 +msgid "Skip forward 10 sec" +msgstr "" + +#: youtube.py:74 +msgid "Skip backward 10 sec" +msgstr "" + +#: youtube.py:77 +msgid "Play current video" +msgstr "" + +#: youtube.py:78 +msgid "Pause current video" +msgstr "" + +#: youtube.py:79 +msgid "Stop current video" +msgstr "" + +#: youtube.py:82 +msgid "Back" +msgstr "" + +#: youtube.py:166 +msgid "YouTube TV URL" +msgstr "" + +#: youtube.py:167 +msgid "Do not show YouTube TV Starter again" +msgstr "" + diff --git a/lib/python/Plugins/Extensions/HbbTV/locale/it.po b/lib/python/Plugins/Extensions/HbbTV/locale/it.po index dcfa9d8..a389211 100644 --- a/lib/python/Plugins/Extensions/HbbTV/locale/it.po +++ b/lib/python/Plugins/Extensions/HbbTV/locale/it.po @@ -1,3 +1,7 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR ORGANIZATION +# FIRST AUTHOR , YEAR. +# msgid "" msgstr "" "Project-Id-Version: \n" @@ -15,55 +19,44 @@ msgstr "" "X-Poedit-Language: Italian\n" "X-Poedit-SearchPath-0: .\n" -#: plugin.py:864 -msgid "HbbTV Plugin" -msgstr "Plugin HbbTV" -#: plugin.py:977 -msgid "" -"HbbTV Browser was not running.\n" -"Please running browser before start HbbTV Application." -msgstr "" -"Il Browser per HbbTV non è attivo.\n" -"Lancia il browser Opera prima di avviare l'applicazione HbbTV." +#: browser.py:152 browser.py:266 browser.py:405 youtube.py:134 +msgid "Cancel" +msgstr "Annulla" -#: plugin.py:1049 -msgid "No detected HbbTV applications." -msgstr "Nessuna applicazione HbbTV trovata." +#: browser.py:153 browser.py:267 browser.py:406 youtube.py:135 +msgid "Save" +msgstr "Salva" -#: plugin.py:1050 -msgid "Please choose an HbbTV application." -msgstr "Seleziona un'applicazione HbbTV." +#: browser.py:154 +msgid " " +msgstr " " -#: plugin.py:1061 -msgid "Stop" -msgstr "Chiudi" +#: browser.py:174 +msgid "left" +msgstr "" -#: plugin.py:1062 -msgid "Start" -msgstr "Avvia" +#: browser.py:175 +msgid "width" +msgstr "" -#: plugin.py:1063 -msgid "Please choose one." -msgstr "Seleziona" +#: browser.py:176 +msgid "top" +msgstr "" -#: plugin.py:1179 -#: plugin.py:1317 -msgid "Cancel" -msgstr "Annulla" +#: browser.py:177 +msgid "height" +msgstr "" -#: plugin.py:1180 -#: plugin.py:1318 -msgid "Save" -msgstr "Salva" +#: browser.py:229 +msgid "Really close without saving settings?" +msgstr "" -#: plugin.py:1192 -#: plugin.py:1730 -#: plugin.py:1968 +#: browser.py:279 browser.py:910 browser.py:919 msgid "Preference" msgstr "Preferenze" -#: plugin.py:1205 +#: browser.py:292 msgid "" "Invalid URL!!(Empty)\n" "Please, Input to the URL." @@ -71,148 +64,127 @@ msgstr "" "Indirizzo non valido!!\n" "Devi inserire un indirizzo (URL)." -#: plugin.py:1225 -#: plugin.py:1916 +#: browser.py:313 browser.py:1037 msgid "Please enter URL here" msgstr "Inserisci indirizzo (url)." -#: plugin.py:1247 +#: browser.py:335 msgid "Start Page" msgstr "Pagina iniziale" -#: plugin.py:1249 +#: browser.py:337 msgid "Current Page" msgstr "Pagina corrente" -#: plugin.py:1250 +#: browser.py:338 msgid "Direct Input" msgstr "Input diretto" -#: plugin.py:1252 +#: browser.py:340 msgid "Startpage" msgstr "Pagina iniziale" -#: plugin.py:1267 +#: browser.py:355 msgid "Keyboard Layout" msgstr "Layout tastiera." -#: plugin.py:1332 -#: plugin.py:1483 -#: plugin.py:1730 -#: plugin.py:1967 +#: browser.py:420 browser.py:575 browser.py:910 browser.py:918 msgid "Bookmark" msgstr "Preferiti" -#: plugin.py:1337 -#: plugin.py:1419 +#: browser.py:425 browser.py:511 msgid "Name" msgstr "Nome" -#: plugin.py:1340 -#: plugin.py:1426 +#: browser.py:428 browser.py:518 msgid "Title" msgstr "Titolo" -#: plugin.py:1342 -#: plugin.py:1427 +#: browser.py:430 browser.py:519 msgid "Url" msgstr "Url" -#: plugin.py:1346 -msgid "Invalid " -msgstr "Non valido" - -#: plugin.py:1346 +#: browser.py:434 msgid "" "!!(Empty)\n" -"Please, Input to the " +"Please, Input to the" msgstr "" "!!(Vuoto)\n" -"Inserisici in " +"Inserisici in" + +#: browser.py:434 +msgid "Invalid " +msgstr "Non valido" -#: plugin.py:1370 -#: plugin.py:1381 -#: plugin.py:1472 -#: plugin.py:1553 -#: plugin.py:1556 +#: browser.py:458 browser.py:469 browser.py:564 browser.py:652 browser.py:655 msgid "Add" msgstr "Aggiungi" -#: plugin.py:1373 -#: plugin.py:1377 +#: browser.py:461 browser.py:465 msgid "Category Name" msgstr "Nome Categoria" -#: plugin.py:1386 -#: plugin.py:1394 +#: browser.py:474 browser.py:482 msgid "Bookmark Title" msgstr "Titolo bookmark" -#: plugin.py:1389 -#: plugin.py:1397 +#: browser.py:477 browser.py:485 msgid "Bookmark URL" msgstr "Indirizzo Bookmark" -#: plugin.py:1471 -#: plugin.py:1618 -#: plugin.py:1729 -#: plugin.py:1962 +#: browser.py:563 browser.py:720 browser.py:909 browser.py:917 msgid "Exit" msgstr "Esci" -#: plugin.py:1473 -#: plugin.py:1564 -#: plugin.py:1565 +#: browser.py:565 browser.py:664 browser.py:665 msgid "Edit" msgstr "Modifica" -#: plugin.py:1474 +#: browser.py:566 msgid "Delete" msgstr "Cancella" -#: plugin.py:1475 +#: browser.py:567 msgid "Set as Startpage" msgstr "Configura come Home page" -#: plugin.py:1522 +#: browser.py:621 msgid "Invalid URL. Please check again!!" msgstr "Indirizzo non valido, riprova." -#: plugin.py:1530 +#: browser.py:629 msgid "Do you want to set selected url to the Startpage?" msgstr "Vuoi Configurare l'indirizzo selezionato come pagina iniziale?" -#: plugin.py:1545 +#: browser.py:644 msgid "Current page is already exist." msgstr "La pagina corrente è già esistente." -#: plugin.py:1558 -#: plugin.py:1559 +#: browser.py:657 browser.py:658 msgid "Direct Input(Bookmark)" msgstr "Inserimento diretto(Bookmark)" -#: plugin.py:1558 -#: plugin.py:1559 +#: browser.py:657 browser.py:658 msgid "Direct Input(Category)" msgstr "Inserimento diretto(Categoria)" -#: plugin.py:1559 +#: browser.py:658 msgid "Currentpage(Bookmark)" msgstr "Pagina corrente(Bookmark)" -#: plugin.py:1560 +#: browser.py:659 msgid "Please choose." msgstr "Scegli." -#: plugin.py:1575 +#: browser.py:676 msgid "Do you want to delete the category and the bookmarks?" msgstr "Vuoi davvero cancellare la categoria e i suoi preferiti ?" -#: plugin.py:1576 +#: browser.py:677 msgid "Do you want to delete the bookmark?" msgstr "Vuoi davvero cancellare il Bookmark ?" -#: plugin.py:1584 +#: browser.py:686 msgid "" "Can't open selected bookmark.\n" " - URL data is empty!!" @@ -220,159 +192,147 @@ msgstr "" "Impossibile apreire il Bookmark selezionato.\n" " - l'indirizzo URL è mancante!!" -#: plugin.py:1619 +#: browser.py:721 msgid "Global" msgstr "Globale" -#: plugin.py:1620 +#: browser.py:722 msgid "Mouse" msgstr "Mouse" -#: plugin.py:1621 +#: browser.py:723 msgid "Keyboard" msgstr "Tastiera" -#: plugin.py:1639 +#: browser.py:741 msgid "Browser Help" msgstr "Aiuto Browser" -#: plugin.py:1649 -msgid "Exit the Opera browser." -msgstr "Esci da Opera." +#: browser.py:751 +msgid "Exit the Browser." +msgstr "Esci da Browser" -#: plugin.py:1652 +#: browser.py:754 msgid "Show the Menu window." msgstr "Mostra i Menu." -#: plugin.py:1655 -#: plugin.py:1686 +#: browser.py:757 browser.py:788 msgid "Enter Key" msgstr "Tasto Invio" -#: plugin.py:1656 +#: browser.py:758 msgid "Show the Virtual keyboard window." msgstr "Mostra la tastiera virtuale." -#: plugin.py:1657 +#: browser.py:759 msgid "Backspace Key" msgstr "Tasto Backsapce" -#: plugin.py:1660 +#: browser.py:762 msgid "Switch to keyboard/mouse mode." msgstr "Usa modalità tastiera/mouse." -#: plugin.py:1665 +#: browser.py:767 msgid "It will move the mouse pointer up." msgstr "Muove il puntatore del mouse verso l'alto." -#: plugin.py:1666 +#: browser.py:768 msgid "It will move the mouse pointer down." msgstr "Muove il puntatore del mouse verso il basso." -#: plugin.py:1667 +#: browser.py:769 msgid "It will move the mouse pointer left." msgstr "Muove il puntatore del mouse a sinistra." -#: plugin.py:1668 +#: browser.py:770 msgid "It will move the mouse pointer right." msgstr "Muove il puntatore del mouse a destra." -#: plugin.py:1671 +#: browser.py:773 msgid "Left Mouse Button" msgstr "Bottone sinistro mouse" -#: plugin.py:1674 +#: browser.py:776 msgid "Right Mouse Button" msgstr "Bottone destro mouse" -#: plugin.py:1675 -#: plugin.py:1682 +#: browser.py:777 browser.py:784 msgid "Left Key" msgstr "Tasto freccia sinistra" -#: plugin.py:1676 -#: plugin.py:1683 +#: browser.py:778 browser.py:785 msgid "Right Key" msgstr "Tasto freccia destra" -#: plugin.py:1680 +#: browser.py:782 msgid "Up Key" msgstr "Tasto freccia alto" -#: plugin.py:1681 +#: browser.py:783 msgid "Down Key" msgstr "Tasto freccia basso" -#: plugin.py:1689 +#: browser.py:791 msgid "PageUp Key" msgstr "Tasto pagina precedente" -#: plugin.py:1690 +#: browser.py:792 msgid "PageDown Key" msgstr "Tasto pagina successiva" -#: plugin.py:1691 +#: browser.py:793 msgid "Go to previous page." msgstr "Vai alla pagina precedente." -#: plugin.py:1692 +#: browser.py:794 msgid "Go to next page." msgstr "Vai alla pagina successiva." -#: plugin.py:1729 -#: plugin.py:1970 +#: browser.py:888 +msgid "File" +msgstr "File" + +#: browser.py:889 +msgid "Tools" +msgstr "Strumenti" + +#: browser.py:890 browser.py:911 browser.py:922 youtube.py:45 +msgid "Help" +msgstr "Aiuto" + +#: browser.py:895 browser.py:1066 +msgid "Opera Web Browser Plugin v2.0" +msgstr "Plugin Opera Web Browser v1.0" + +#: browser.py:896 browser.py:998 +msgid "BrowserMain" +msgstr "Browser" + +#: browser.py:909 browser.py:914 msgid "Open Startpage" msgstr "Apri pagina iniziale" -#: plugin.py:1729 -#: plugin.py:1965 +#: browser.py:909 browser.py:915 msgid "Open URL" msgstr "Apri Url" -#: plugin.py:1729 -#: plugin.py:1966 +#: browser.py:909 browser.py:916 msgid "Start/Stop" msgstr "Avvia/Chiudi" -#: plugin.py:1731 -#: plugin.py:1964 +#: browser.py:910 browser.py:920 +msgid "Position Setup" +msgstr "" + +#: browser.py:911 browser.py:921 msgid "About" msgstr "Informazioni" -#: plugin.py:1731 -#: plugin.py:1782 -#: plugin.py:1963 -msgid "Help" -msgstr "Aiuto" - -#: plugin.py:1780 -msgid "File" -msgstr "File" - -#: plugin.py:1781 -msgid "Tools" -msgstr "Strumenti" - -#: plugin.py:1787 -#: plugin.py:1918 -msgid "Opera Web Browser Plugin v1.0" -msgstr "Plugin Opera Web Browser v1.0" - -#: plugin.py:1788 -msgid "BrowserMain" -msgstr "Browser" - -#: plugin.py:1811 -#: plugin.py:1969 +#: browser.py:923 browser.py:1083 msgid "Return" msgstr "Indietro" -#: plugin.py:1860 -msgid "Opera Browser" -msgstr "Browser Opera" - -#: plugin.py:1913 -#: plugin.py:1942 +#: browser.py:1011 browser.py:1019 browser.py:1034 msgid "" "Opera Browser was not running.\n" "Please running browser using [File]>[Start/Stop] menu." @@ -380,19 +340,135 @@ msgstr "" "Il Browser non è attivo.\n" "Lancia il browser dal menu [File]>[Avvia/Chiudi]." -#: plugin.py:2161 -msgid "HbbTV Applications" -msgstr "Applicazioni HbbTV" +#: hbbtv.py:52 +msgid "HbbTV Plugin" +msgstr "Plugin HbbTV" + +#: plugin.py:234 +msgid "" +"HbbTV Browser was not running.\n" +"Please running browser before start HbbTV Application." +msgstr "" +"Il Browser per HbbTV non è attivo.\n" +"Lancia il browser Opera prima di avviare l'applicazione HbbTV." + +#: plugin.py:263 +msgid "Stop" +msgstr "Chiudi" + +#: plugin.py:265 youtube.py:44 +msgid "Start" +msgstr "Avvia" + +#: plugin.py:266 +msgid "Please choose one." +msgstr "Seleziona" -#: plugin.py:2162 +#: plugin.py:289 +msgid "No detected HbbTV applications." +msgstr "Nessuna applicazione HbbTV trovata." + +#: plugin.py:290 +msgid "Please choose an HbbTV application." +msgstr "Seleziona un'applicazione HbbTV." + +#: plugin.py:411 plugin.py:432 +msgid "YouTube TV" +msgstr "" + +#: plugin.py:433 youtube.py:141 +msgid "YouTube TV Settings" +msgstr "" + +#: plugin.py:434 msgid "Browser Start/Stop" msgstr "Avvia/Chiudi browser" -#: plugin.py:2163 +#: plugin.py:435 +msgid "HbbTV Applications" +msgstr "Applicazioni HbbTV" + +#: plugin.py:436 msgid "Opera Web Browser" msgstr "Web Browser Opera" -#: plugin.py:2163 +#: plugin.py:436 msgid "start opera web browser" -msgstr "avvia il browser Opera" +msgstr "avvia il browser opera" + +#: youtube.py:54 +msgid "Start YouTube TV" +msgstr "" + +#: youtube.py:55 +msgid "YouTube TV is a new way to watch YouTube videos on Vu+" +msgstr "" + +#: youtube.py:56 +msgid "* Start YouTube TV" +msgstr "" + +#: youtube.py:57 +msgid "* RC Help" +msgstr "" + +#: youtube.py:62 +msgid "Play ther selected the video" +msgstr "" + +#: youtube.py:63 +msgid "Exit the YouTube TV" +msgstr "" + +#: youtube.py:66 +msgid "Move up" +msgstr "" + +#: youtube.py:67 +msgid "Move down" +msgstr "" + +#: youtube.py:68 +msgid "Move left" +msgstr "" + +#: youtube.py:69 +msgid "Move right" +msgstr "" + +#: youtube.py:72 +msgid "Search a video" +msgstr "" + +#: youtube.py:73 +msgid "Skip forward 10 sec" +msgstr "" + +#: youtube.py:74 +msgid "Skip backward 10 sec" +msgstr "" + +#: youtube.py:77 +msgid "Play current video" +msgstr "" + +#: youtube.py:78 +msgid "Pause current video" +msgstr "" + +#: youtube.py:79 +msgid "Stop current video" +msgstr "" + +#: youtube.py:82 +msgid "Back" +msgstr "" + +#: youtube.py:166 +msgid "YouTube TV URL" +msgstr "" + +#: youtube.py:167 +msgid "Do not show YouTube TV Starter again" +msgstr "" diff --git a/lib/python/Plugins/Extensions/HbbTV/meta/plugin_hbbtv.xml b/lib/python/Plugins/Extensions/HbbTV/meta/plugin_hbbtv.xml index 830b46e..193fdea 100644 --- a/lib/python/Plugins/Extensions/HbbTV/meta/plugin_hbbtv.xml +++ b/lib/python/Plugins/Extensions/HbbTV/meta/plugin_hbbtv.xml @@ -1,21 +1,16 @@ - - - - - kos - HbbTV - enigma2-plugin-extensions-hbbtv - this is hbbtv plugin - this is hbbtv plugin - - + + + + + smlee + HbbTV + enigma2-plugin-extensions-hbbtv + this is hbbtv plugin + this is hbbtv plugin + + - - - - - - - + + diff --git a/lib/python/Plugins/Extensions/HbbTV/plugin.py b/lib/python/Plugins/Extensions/HbbTV/plugin.py index 96d19cc..7b40106 100644 --- a/lib/python/Plugins/Extensions/HbbTV/plugin.py +++ b/lib/python/Plugins/Extensions/HbbTV/plugin.py @@ -1,2500 +1,437 @@ from Plugins.Plugin import PluginDescriptor - from Screens.Screen import Screen from Screens.InfoBar import InfoBar from Screens.ChoiceBox import ChoiceBox +from Screens.HelpMenu import HelpableScreen from Screens.MessageBox import MessageBox from Screens.VirtualKeyBoard import VirtualKeyBoard -from Screens.HelpMenu import HelpableScreen -from Screens.ChannelSelection import service_types_tv - +from Components.config import config +from Components.ActionMap import ActionMap from Components.Language import language -from Components.PluginComponent import plugins -from Components.Button import Button -from Components.Sources.StaticText import StaticText -from Components.ActionMap import NumberActionMap, ActionMap, HelpableActionMap from Components.ServiceEventTracker import ServiceEventTracker -from Components.MenuList import MenuList -from Components.Label import Label, MultiColorLabel -from Components.ConfigList import ConfigListScreen from Components.VolumeControl import VolumeControl -from Components.Pixmap import Pixmap -from Components.config import config, ConfigYesNo, ConfigSubsection, ConfigPosition, getConfigListEntry, ConfigBoolean, ConfigInteger, ConfigText, ConfigSelection, configfile - -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 +from enigma import eTimer, fbClass, eRCInput, iServiceInformation, iPlayableService -import os, struct, threading, stat, select, time, socket, select +import os, struct, vbcfg from __init__ import _ +from hbbtv import HbbTVWindow +from browser import Browser +from youtube import YoutubeTVWindow, YoutubeTVSettings +from vbipc import VBController, VBServerThread, VBHandlers 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 - - before_service = None - - channel_info_sid = None - channel_info_onid = None - channel_info_tsid = None - channel_info_name = None - channel_info_orgid = None - - hbbtv_handelr = None - - packet_m = 0xBBADBEE - packet_h = '!IIII' - packet_hl = struct.calcsize(packet_h) - - 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 -def getPluginBrowser(): - global __gval__ - return __gval__.plugin_browser - -def getPacketHeaders(): - global __gval__ - return (__gval__.packet_m, __gval__.packet_h, __gval__.packet_hl) - -def setChannelInfo(sid, onid, tsid, name, orgid): - if sid is None: sid = 0 - if onid is None: onid = 0 - if tsid is None: tsid = 0 - if name is None: name = "" - if orgid is None: orgid = 0 - global __gval__ - __gval__.channel_info_sid = sid - __gval__.channel_info_onid = onid - __gval__.channel_info_tsid = tsid - __gval__.channel_info_name = name - __gval__.channel_info_orgid = orgid - print "Set Channel Info >> sid : %X, onid : %X, tsid : %X, name : %s, orgid : %d " % (sid, onid, tsid, name, orgid) -def getChannelInfos(): - global __gval__ - print "Get Channel Info >> sid : %X, onid : %X, tsid : %X, name : %s, orgid : %d " % (__gval__.channel_info_sid, - __gval__.channel_info_onid, __gval__.channel_info_tsid, __gval__.channel_info_name, __gval__.channel_info_orgid) - return (__gval__.channel_info_sid, - __gval__.channel_info_onid, - __gval__.channel_info_tsid, - __gval__.channel_info_name, - __gval__.channel_info_orgid) - -def isNeedRestart(): - global __gval__ - print "Need Restart(GET) : ", __gval__.need_restart - return __gval__.need_restart -def setNeedRestart(n): - global __gval__ - __gval__.need_restart = n - print "Need Restart(SET) : ", __gval__.need_restart - -def getCommandUtil(): - global __gval__ - return __gval__.command_util -def getCommandServer(): - global __gval__ - return __gval__.command_server - -def setBeforeService(s): - global __gval__ - __gval__.before_service = s -def getBeforeService(): - global __gval__ - return __gval__.before_service - -def _unpack(packed_data): - (mg, h, hlen) = getPacketHeaders() - - if strIsEmpty(packed_data): - return None - (m, o, l, s) = struct.unpack(h, packed_data[:hlen]) - if m != mg: - return None - d = 0 - if l > 0: - d = packed_data[hlen:hlen+l] - return (o,d,s) - -def _pack(opcode, params=None, reserved=0): - (m, h, hlen) = getPacketHeaders() - if strIsEmpty(params): - params = '' - packed_data = struct.pack(h, m, opcode, len(params), reserved) - return packed_data + params - -class OpCodeSet: - def __init__(self): - self._opcode_ = { - "OP_UNKNOWN" : 0x0000 - ,"OP_HBBTV_EXIT" : 0x0001 - ,"OP_HBBTV_OPEN_URL" : 0x0002 - ,"OP_HBBTV_LOAD_AIT" : 0x0003 - ,"OP_HBBTV_UNLOAD_AIT" : 0x0004 - ,"OP_HBBTV_FULLSCREEN" : 0x0005 - ,"OP_HBBTV_TITLE" : 0x0006 - ,"OP_HBBTV_RETRY_OPEN_URL" : 0x0009 - ,"OP_HBBTV_CHANGE_CHANNEL" : 0x000A - ,"OP_HBBTV_ABORT_SIG" : 0x000B - ,"OP_OIPF_GET_CHANNEL_INFO_URL" : 0x0101 - ,"OP_OIPF_GET_CHANNEL_INFO_AIT" : 0x0102 - ,"OP_OIPF_GET_CHANNEL_INFO_LIST" : 0x0103 - ,"OP_VOD_URI" : 0x0201 - ,"OP_VOD_PLAY" : 0x0202 - ,"OP_VOD_STOP" : 0x0203 - ,"OP_VOD_PAUSE" : 0x0204 - ,"OP_VOD_STATUS" : 0x0205 - ,"OP_VOD_FORBIDDEN" : 0x0206 - ,"OP_VOD_STOPED" : 0x0207 - ,"OP_VOD_SPEED_CTRL" : 0x0208 - ,"OP_VOD_SEEK_CTRL" : 0x0209 - ,"OP_BROWSER_OPEN_URL" : 0x0301 - ,"OP_BROWSER_VKBD_REQ" : 0x0309 - ,"OP_BROWSER_VKBD_RES" : 0x030A - ,"OP_BROWSER_VKBD_PASTE_REQ" : 0x030B - ,"OP_BROWSER_VKBD_PASTE_KEY" : 0x030C - ,"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_DVBAPP_SET_VOL" : 0x0403 - ,"OP_SYSTEM_OUT_OF_MEMORY" : 0x0501 - ,"OP_SYSTEM_NOTIFY_MY_PID" : 0x0502 - ,"OP_VIDEOBACKEND_ENABLE" : 0x0601 - ,"OP_VIDEOBACKEND_DISABLE" : 0x0602 - ,"OP_BROWSER_OPEN_YOUTUBETV" : 0x0603 - } - self._opstr_ = { - 0x0000 : "OP_UNKNOWN" - ,0x0001 : "OP_HBBTV_EXIT" - ,0x0002 : "OP_HBBTV_OPEN_URL" - ,0x0003 : "OP_HBBTV_LOAD_AIT" - ,0x0004 : "OP_HBBTV_UNLOAD_AIT" - ,0x0005 : "OP_HBBTV_FULLSCREEN" - ,0x0006 : "OP_HBBTV_TITLE" - ,0x0009 : "OP_HBBTV_RETRY_OPEN_URL" - ,0x000A : "OP_HBBTV_CHANGE_CHANNEL" - ,0x000B : "OP_HBBTV_ABORT_SIG" - ,0x0101 : "OP_OIPF_GET_CHANNEL_INFO_URL" - ,0x0102 : "OP_OIPF_GET_CHANNEL_INFO_AIT" - ,0x0103 : "OP_OIPF_GET_CHANNEL_INFO_LIST" - ,0x0201 : "OP_VOD_URI" - ,0x0202 : "OP_VOD_PLAY" - ,0x0203 : "OP_VOD_STOP" - ,0x0204 : "OP_VOD_PAUSE" - ,0x0205 : "OP_VOD_STATUS" - ,0x0206 : "OP_VOD_FORBIDDEN" - ,0x0207 : "OP_VOD_STOPED" - ,0x0208 : "OP_VOD_SPEED_CTRL" - ,0x0209 : "OP_VOD_SEEK_CTRL" - ,0x0301 : "OP_BROWSER_OPEN_URL" - ,0x0309 : "OP_BROWSER_VKBD_REQ" - ,0x030A : "OP_BROWSER_VKBD_RES" - ,0x030B : "OP_BROWSER_VKBD_PASTE_REQ" - ,0x030C : "OP_BROWSER_VKBD_PASTE_KEY" - ,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" - ,0x0403 : "OP_DVBAPP_SET_VOL" - ,0x0501 : "OP_SYSTEM_OUT_OF_MEMORY" - ,0x0502 : "OP_SYSTEM_NOTIFY_MY_PID" - ,0x0601 : "OP_VIDEOBACKEND_ENABLE" - ,0x0602 : "OP_VIDEOBACKEND_DISABLE" - ,0x0603 : "OP_BROWSER_OPEN_YOUTUBETV" - } - - def get(self, opstr): - try: - return self._opcode_[opstr] - except: pass - return self._opcode_["OP_UNKNOWN"] - - def what(self, opcode): - try: - return self._opstr_[opcode] - except: pass - return self._opstr_["0x0000"] - -class SocketParams: - def __init__(self): - self.protocol = None - self.type = None - self.addr = None - self.buf_size = 4096 - self.handler = None - self.timeout = 5 - self.destroy = None - -class StreamServer: - def __init__(self, params): - self._protocol = params.protocol - self._type = params.type - self._addr = params.addr - self._buf_size = params.buf_size - self._handler = params.handler - self._timeout = params.timeout - self._destroy = params.destroy - - self._terminated = False - self._server_thread = None - - self.onHbbTVCloseCB = [] - self.onSetPageTitleCB = [] - - def __del__(self): - if self._destroy is not None: - self._destroy(self._addr) - - def stop(self): - self._terminated = True - if self._server_thread is not None: - self._server_thread.join() - self._server_thread = None - - def start(self): - self._socket = socket.socket(self._protocol, self._type) - self._socket.settimeout(self._timeout) - self._socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) - self._socket.bind(self._addr) - self._socket.listen(True) - - self._server_thread = threading.Thread(target=self._listen) - self._server_thread.start() - - def _listen(self): - select_list = [self._socket] - def _accept(): - try: - conn, addr = self._socket.accept() - self._client(conn, addr) - except Exception, ErrMsg: - print "ServerSocket Error >>", ErrMsg - pass - - while not self._terminated: - readable, writable, errored = select.select(select_list, [], [], self._timeout) - for s in readable: - if s is self._socket: - _accept() - - def _client(self, conn, addr): - try: - send_data = '' - received_data = conn.recv(self._buf_size) - if self._handler is not None and not strIsEmpty(received_data): - send_data = self._handler.doHandle(received_data, self.onHbbTVCloseCB, self.onSetPageTitleCB) - self._send(conn, send_data) - except Exception, ErrMsg: - try: conn.close() - except:pass - if self._handler is not None: - self._handler.printError(ErrMsg) - def _send(self, conn, data) : - conn.send(data) - conn.close() - -class ServerFactory: - def doListenUnixTCP(self, name, handler): - def destroy(name): - try: - if os.path.exists(name): - os.unlink(name) - print "Removed ", name - except: pass - destroy(name) - - params = SocketParams() - params.protocol = socket.AF_UNIX - params.type = socket.SOCK_STREAM - params.addr = name - params.handler = handler - params.destroy = destroy - - streamServer = StreamServer(params) - streamServer.start() - return streamServer - - def doListenInetTCP(self, ip, port, handler): - print "Not implemented yet!!" - def doListenUnixDGRAM(self, name, handler): - print "Not implemented yet!!" - def doListenInetDGRAM(self, ip, port, handler): - print "Not implemented yet!!" - -class Handler: - def doUnpack(self, data): - return _unpack(data) - - def doPack(self, opcode, params, reserved=0): - return _pack(opcode, params, reserved) - - def doHandle(self, data, onCloseCB): - opcode, params = 0x0, 'Invalid Request!!' - return _pack(opcode, params) - - def printError(self, reason): - print reason - -class BrowserCommandUtil(OpCodeSet): - def __init__(self): - self._fd = None - OpCodeSet.__init__(self) - - def isConnected(self): - if self._fd is None: - return False - return True - - def doConnect(self, filename): - if not os.path.exists(filename): - print "File not exists :", filename - return False - try: - self._fd = os.open(filename, os.O_WRONLY|os.O_NONBLOCK) - if self._fd is None: - print "Fail to open file :", filename - return False - except Exception, ErrMsg: - print ErrMsg - self._fd = None - return False - return True - - def doDisconnect(self): - if self._fd is None: - return - os.close(self._fd) - self._fd = None - - def doSend(self, command, params=None, reserved=0): - if self._fd is None: - print "No found pipe!!" - return False - data = '' - try: - data = _pack(self.get(command), params, reserved) - if data is None: - return False - os.write(self._fd, data) - print "Send OK!! :", command - except: return False - return True - - def sendCommand(self, command, params=None, reserved=0): - if not self.isConnected(): - global COMMAND_PATH - self.doConnect(COMMAND_PATH) - result = self.doSend(command, params, reserved) - self.doDisconnect() - return result - -class HandlerHbbTV(Handler): - _vod_service = None +vbcfg.SOCKETFILE = '/tmp/.browser.support' +vbcfg.CONTROLFILE = '/tmp/.browser.controller' +_OPCODE_LIST = [ + 'CONTROL_BACK', + 'CONTROL_FORWARD', + 'CONTROL_STOP', + 'CONTROL_RELOAD', + 'CONTROL_OPENURL', + 'CONTROL_EXIT', + 'CONTROL_TITLE', + 'CONTROL_OK', + 'CONTROL_OUT_OF_MEMORY', + 'CONTROL_GET_VOLUME', + 'CONTROL_SET_VOLUME', + 'CONTROL_VOLUME_UP', + 'CONTROL_VOLUME_DOWN', + 'HBBTV_LOADAIT', + 'HBBTV_OPENURL', + 'YOUTUBETV_OPENURL', + 'BROWSER_OPENURL', + 'BROWSER_MENU_OPEN', + 'BROWSER_MENU_CLOSE', + 'BROWSER_VKB_OPEN', + 'BROWSER_VKB_CLOSE', + 'OOIF_GET_CURRENT_CHANNEL', + 'OOIF_BROADCAST_PLAY', + 'OOIF_BROADCAST_STOP', + 'OOIF_BROADCAST_CHECK', + 'OPCODE_END' + ] + +class VBHandler(VBHandlers): def __init__(self, session): self._session = session - self.opcode = OpCodeSet() - self.handle_map = { - 0x0001 : self._cb_handleCloseHbbTVBrowser - ,0x0006 : self._cb_handleSetPageTitle - ,0x0009 : self._cb_handleHbbTVRetryOpen - ,0x000A : self._cb_handleHbbTVChangeChannel - ,0x000B : self._cb_handleHbbTVAbortSig - ,0x0101 : self._cb_handleGetChannelInfoForUrl - ,0x0102 : self._cb_handleGetChannelInfoForAIT - ,0x0103 : self._cb_handleGetChannelInfoList - ,0x0201 : self._cb_handleVODPlayerURI - ,0x0202 : self._cb_handleVODPlayerPlay - ,0x0203 : self._cb_handleVODPlayerStop - ,0x0204 : self._cb_handleVODPlayerPlayPause - ,0x0401 : self._cb_handleDVBAppVolUp - ,0x0402 : self._cb_handleDVBAppVolDown - ,0x0403 : self._cb_handleDVBAppSetVol - ,0x0208 : self._cb_handleVODSpeedCtrl - ,0x0209 : self._cb_handleVODSeekCtrl - ,0x0501 : self._cb_handleSystemOutOfMemory - ,0x0502 : self._cb_handleSystemNotufyMyPID - ,0x0309 : self._cb_handleShowVirtualKeyboard - ,0x030B : self._cb_handlePasteVirtualKeyboard - ,0x030E : self._cb_handleBrowserMenuReq - ,0x0601 : self._cb_handleVideobackendEnable - ,0x0602 : self._cb_handleVideobackendDisable - } - self._on_close_cb = None - self._on_set_title_cb = None - - self._vod_uri = None - - self._retry_open_url = None - self._timer_retry_open = eTimer() - self._timer_paste_vkbd = eTimer() - self._curren_title = None - self._max_volume = -1 - self._soft_volume = -1 - self._videobackend_activate = False - - def _handle_dump(self, handle, opcode, data=None): - if True: return - print str(handle) - try: - print " - opcode : ", self.opcode.what(opcode) - except: pass - print " - data : ", data - - def doHandle(self, data, onCloseCB, onSetPageTitleCB): - opcode, params, reserved = None, None, 0 - self._on_close_cb = onCloseCB - self._on_set_title_cb = onSetPageTitleCB - try: - datas = self.doUnpack(data) - except Exception, ErrMsg: - print "Unpacking packet ERR :", ErrMsg - params = 'fail to unpack packet!!' - opcode = self.opcode.get("OP_UNKNOWN") - return self.doPack(opcode, params) + self.current_title = None + self.max_volume = -1 + self.soft_volume = -1 + self.videobackend_activate = False + self.onSetTitleCB = [] + self.onCloseCB = [] + VBHandlers.__init__(self, _OPCODE_LIST, '_CB_') + + def set_volume(self, volume): + if self.max_volume < 0: + self.max_volume = VolumeControl.instance.volctrl.getVolume() + + self.max_volume += volume + if self.max_volume > 100: + self.max_volume = 100 + elif self.max_volume < 0: + self.max_volume = 0 + + if self.soft_volume > 0: + v = int((self.max_volume * self.soft_volume) / 100) + VolumeControl.instance.volctrl.setVolume(v, v) else: - opcode = datas[0] - params = datas[1] - self.opcode.what(opcode) + VolumeControl.instance.volctrl.setVolume(self.max_volume, self.max_volume) - try: - #print self.handle_map[opcode] - (reserved, params) = self.handle_map[opcode](opcode, params) - except Exception, ErrMsg: - print "Handling packet ERR :", ErrMsg - params = 'fail to handle packet!!' - opcode = self.opcode.get("OP_UNKNOWN") - return self.doPack(opcode, params) - self._on_close_cb = None - self._on_set_title_cb = None - return self.doPack(opcode, params, reserved) - - def _cb_handleVideobackendEnable(self, opcode, data): - self._handle_dump(self._cb_handleVideobackendEnable, opcode, data) - service = self._session.nav.getCurrentlyPlayingServiceReference() - setBeforeService(service) - self._session.nav.stopService() - self._videobackend_activate = True - return (0, "OK") - - def _cb_handleVideobackendDisable(self, opcode, data): - self._handle_dump(self._cb_handleVideobackendDisable, opcode, data) - before_service = getBeforeService() - if before_service is not None: - self._session.nav.playService(before_service) - self._videobackend_activate = False - return (0, "OK") - - 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: - browser.setCurrentPageUrl(data, self._curren_title) - return (0, "OK") - - def _cb_handlePasteVirtualKeyboard(self, opcode, data): - self._handle_dump(self._cb_handlePasteVirtualKeyboard, opcode, data) - def _cb_PasteRefocusVirtualKeyboard(): - self._timer_paste_vkbd.stop() - command_util = getCommandUtil() - command_util.sendCommand('OP_BROWSER_VKBD_PASTE_MOUSE') - try: - self._timer_paste_vkbd.callback.remove(_cb_PasteMouseVirtualKeyboard) - except: pass - def _cb_PasteKeyVirtualKeyboard(): - self._timer_paste_vkbd.stop() - command_util = getCommandUtil() - command_util.sendCommand('OP_BROWSER_VKBD_PASTE_KEY') - try: - self._timer_paste_vkbd.callback.remove(_cb_PasteKeyVirtualKeyboard) - except: pass - self._timer_paste_vkbd.callback.append(_cb_PasteRefocusVirtualKeyboard) - self._timer_paste_vkbd.start(100) - def _cb_PasteMouseVirtualKeyboard(): - self._timer_paste_vkbd.stop() - command_util = getCommandUtil() - command_util.sendCommand('OP_BROWSER_VKBD_PASTE_MOUSE') - #time.sleep(1) - #command_util.sendCommand('OP_BROWSER_VKBD_PASTE_MOUSE') - try: - self._timer_paste_vkbd.callback.remove(_cb_PasteMouseVirtualKeyboard) - except: pass - #self._timer_paste_vkbd.callback.append(_cb_PasteKeyVirtualKeyboard) - #self._timer_paste_vkbd.start(1000) - self._timer_paste_vkbd.callback.append(_cb_PasteMouseVirtualKeyboard) - self._timer_paste_vkbd.start(50) - return (0, "OK") - - def _cb_virtualKeyboardClosed(self, data=None): + def close_vkb(self, data=""): 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 = "" - self._session.openWithCallback(self._cb_virtualKeyboardClosed, VirtualKeyBoard, title=("Please enter URL here"), text=data) - return (0, "OK") - - def _cb_handleVODSeekCtrl(self, opcode, data): - self._handle_dump(self._cb_handleVODSeekCtrl, opcode, data) - headLen = struct.calcsize('!I') - unpackedData = struct.unpack('!I', data[:headLen]) - seekTime = unpackedData[0] - service = self._session.nav.getCurrentService() - seekable = service.seek() - if seekable is None or not seekable.isCurrentlySeekable(): - raise Exception("This stream is not support manual seek.") - pts = seekTime - seekable.seekRelative(pts<0 and -1 or 1, abs(pts)) - return (0, "OK") - - def _cb_handleHbbTVRetryOpen(self, opcode, data): - def _cb_HbbTVRetryOpenURL(): - self._timer_retry_open.stop() - if self._retry_open_url is not None: - command_util = getCommandUtil() - command_util.sendCommand('OP_HBBTV_RETRY_OPEN_URL', params=self._retry_open_url) - self._retry_open_url = None - try: - self._timer_retry_open.callback.remove(_cb_HbbTVRetryOpenURL) - except: pass - self._handle_dump(self._cb_handleHbbTVRetryOpen, opcode, data) - headLen = struct.calcsize('!I') - unpackedData = struct.unpack('!I', data[:headLen]) - delayTime = unpackedData[0] - restartUrl = data[headLen:] - - self._retry_open_url = restartUrl.strip() - self._timer_retry_open.callback.append(_cb_HbbTVRetryOpenURL) - self._timer_retry_open.start(delayTime*1000) - return (0, "OK") - - def _cb_handleSystemNotufyMyPID(self, opcode, data): - self._handle_dump(self._cb_handleSystemNotufyMyPID, opcode, data) - return (0, "OK") - - def _cb_handleSystemOutOfMemory(self, opcode, data): - self._handle_dump(self._cb_handleSystemOutOfMemory, opcode, data) - setNeedRestart(True) - return (0, "OK") - - def _cb_handleVODSpeedCtrl(self, opcode, data): - self._handle_dump(self._cb_handleVODSpeedCtrl, opcode, data) - headLen = struct.calcsize('!I') - unpackedData = struct.unpack('!I', data[:headLen]) - playSpeed = unpackedData[0] - service = self._session.nav.getCurrentService() - pauseable = service.pause() - if playSpeed > 2: - playSpeed = 2 - if pauseable.setFastForward(playSpeed) == -1: - pauseable.setFastForward(1) - raise Exception("This stream is not support trick play.") - return (0, "OK") - - def SetVolume(self, volume): - if self._max_volume < 0: - self._max_volume = VolumeControl.instance.volctrl.getVolume() - - self._max_volume += volume - if self._max_volume > 100: - self._max_volume = 100 - elif self._max_volume < 0: - self._max_volume = 0 - - if self._soft_volume > 0: - v = int((self._max_volume * self._soft_volume) / 100) - VolumeControl.instance.volctrl.setVolume(v, v) - else: VolumeControl.instance.volctrl.setVolume(self._max_volume, self._max_volume) - - def _cb_handleDVBAppVolUp(self, opcode, data): - self._handle_dump(self._cb_handleDVBAppVolUp, opcode, data) - self.SetVolume(5) - return (0, "OK") - - def _cb_handleDVBAppVolDown(self, opcode, data): - self._handle_dump(self._cb_handleDVBAppVolDown, opcode, data) - self.SetVolume(-5) - return (0, "OK") - def _cb_handleDVBAppSetVol(self, opcode, data): - self._handle_dump(self._cb_handleDVBAppSetVol, opcode, data) - if self._max_volume < 0: - self._max_volume = VolumeControl.instance.volctrl.getVolume() - self._soft_volume = int(data) - - v = 0 - if self._soft_volume > 0 and self._max_volume > 0: - v = int((self._max_volume * self._soft_volume) / 100) - VolumeControl.instance.volctrl.setVolume(v, v) - return (0, "OK") - - def _cb_handleGetChannelInfoForUrl(self, opcode, data): - self._handle_dump(self._cb_handleGetChannelInfoForUrl, opcode, data) - (sid, onid, tsid, name, orgid) = getChannelInfos() - namelen = len(name) - return (0, struct.pack('!IIII', sid, onid, tsid, namelen) + name) - - def _cb_handleGetChannelInfoForAIT(self, opcode, data): - self._handle_dump(self._cb_handleGetChannelInfoForAIT, opcode, data) - (sid, onid, tsid, name, orgid) = getChannelInfos() - namelen = len(name) - return (0, struct.pack('!IIIII', orgid, sid, onid, tsid, namelen) + name) - - def _cb_handleGetChannelInfoList(self, opcode, data): - self._handle_dump(self._cb_handleGetChannelInfoList, opcode, data) - (sid, onid, tsid, name, orgid) = getChannelInfos() - namelen = len(name) - channel_list_size = 1 - return (channel_list_size, struct.pack('!IIII', sid, onid, tsid, namelen) + name) - - def _cb_handleSetPageTitle(self, 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: - for x in self._on_set_title_cb: - try: - x(data) - self._curren_title = data - except Exception, ErrMsg: - if x in self._on_set_title_cb: - self._on_set_title_cb.remove(x) - return (0, "OK") - - def _cb_handleHbbTVAbortSig(self, opcode, data): - self._cb_handleCloseHbbTVBrowser(opcode, data) - global __gval__ - return (0, struct.pack('!II', __gval__.resX, __gval__.resY)); - - def _cb_handleCloseHbbTVBrowser(self, opcode, data): - self._timer_retry_open.stop() - try: - self._timer_retry_open.callback.remove(_cb_HbbTVRetryOpenURL) - except: pass - self._handle_dump(self._cb_handleCloseHbbTVBrowser, opcode, data) + if strIsEmpty(data): + data = "" + VBController.command("BROWSER_VKB_CLOSE", data) - if self._on_close_cb: - for x in self._on_close_cb: + def _CB_CONTROL_EXIT(self, result, packet): + if self.onCloseCB: + for x in self.onCloseCB: try: x() - except Exception, ErrMsg: - if x in self._on_close_cb: - self._on_close_cb.remove(x) - - command_util = getCommandUtil() - command_util.sendCommand('OP_HBBTV_FULLSCREEN', None) - if self._videobackend_activate == False: - before_service = getBeforeService() - 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): - self._vod_uri = None - hl = struct.calcsize('!II') - datas = struct.unpack('!II', data[:hl]) - uriLength = datas[1] - vodUri = data[hl:hl+uriLength] - self._handle_dump(self._cb_handleVODPlayerURI, opcode, vodUri) - self._vod_uri = vodUri - return (0, "OK") - - def doStop(self, restoreBeforeService=True, needStop=True): - if needStop == True: - self._session.nav.stopService() - if self._vod_service is not None and restoreBeforeService: - before_service = getBeforeService() - self._session.nav.playService(before_service) - self._vod_uri = None - self._vod_service = None - - def getUrl(self): - return self._vod_uri - - def doRetryOpen(self, url): - if url is None: - return False - for ii in range(5): - self._vod_service = None + except Exception: + if x in self.onCloseCB: + self.onCloseCB.remove(x) + if self.videobackend_activate is False: + if vbcfg.g_service is not None: + self._session.nav.playService(vbcfg.g_service) + return (True, None) + + def _CB_CONTROL_TITLE(self, result, packet): + if packet.startswith('file://') or packet.startswith('http://'): + return (True, None) + for x in self.onSetTitleCB: try: - #print "Try to open vod [%d] : %s" % (ii, url) - print "Try to open vod" - self._vod_service = eServiceReference(4097, 0, url) - self._session.nav.playService(self._vod_service) - if self._vod_service is not None: - return True - except Exception, ErrMsg: - print "OpenVOD ERR :", ErrMsg - time.sleep(1) - return False - - def _cb_handleVODPlayerPlay(self, opcode, data): - self._handle_dump(self._cb_handleVODPlayerPlay, opcode, data) - self.doStop(restoreBeforeService=False) - if self.doRetryOpen(url=self._vod_uri) == False: - self.doStop() - return (0, "OK") - - def _cb_handleVODPlayerStop(self, opcode, data): - self._handle_dump(self._cb_handleVODPlayerStop, opcode, data) - self.doStop() - return (0, "OK") - - def _cb_handleVODPlayerPlayPause(self, opcode, data): - self._handle_dump(self._cb_handleVODPlayerPlayPause, opcode, data) - service = self._session.nav.getCurrentService() - try: - pauseFlag = data[0] - servicePause = service.pause() - if pauseFlag == 'U': - servicePause.unpause() - elif pauseFlag == 'P': - servicePause.pause() - except Exception, ErrMsg: - print "onPause ERR :", ErrMsg - return (0, "OK") - -from libshm import SimpleSharedMemory -_g_ssm_ = None -class HbbTVWindow(Screen): - skin = """ - - - """ - 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) - self.__event_tracker = ServiceEventTracker(screen = self, eventmap = { - iPlayableService.evStart: self._serviceStarted, - iPlayableService.evEOF: self._serviceEOF, - }) - - self._url = url - self._use_ait = useAIT - self._profile = profile - self._cb_closed_func = cbf - self.onLayoutFinish.append(self._layoutFinished) + x(packet) + self.current_title = packet + except Exception: + if x in self.onSetTitleCB: + self.onSetTitleCB.remove(x) + return (True, None) + + def _CB_CONTROL_OK(self, result, packet): + if vbcfg.g_browser and packet.startswith('stop'): + vbcfg.g_browser.keyOK() + return (True, None) + + def _CB_CONTROL_OUT_OF_MEMORY(self, result, packet): + vbcfg.need_restart = True; + return (True, None) + + def _CB_CONTROL_SET_VOLUME(self, result, packet): + if self.max_volume < 0: + self.max_volume = VolumeControl.instance.volctrl.getVolume() + self.soft_volume = int(packet) - command_server = getCommandServer() - if self._cb_set_page_title not in command_server.onSetPageTitleCB: - command_server.onSetPageTitleCB.append(self._cb_set_page_title) - - if self._cb_close_window not in command_server.onHbbTVCloseCB: - command_server.onHbbTVCloseCB.append(self._cb_close_window) - - self._closeTimer = eTimer() - self._closeTimer.callback.append(self._do_close) - - self._currentServicePositionTimer = eTimer() - self._currentServicePositionTimer.callback.append(self._cb_currentServicePosition) - self._vodLength = 0 - - global _g_ssm_ - self._ssm = _g_ssm_ - self._vod_length = 0 - - def getVodPlayTime(self): - try: - service = self._session.nav.getCurrentService() - seek = service and service.seek() - l = seek.getLength() - p = seek.getPlayPosition() - if(not l[0] and not p[0]): - return (p[1], l[1]) - return (90000,90000) - except: pass - return (-1,-1) - - def _cb_currentServicePosition(self): - def getTimeString(t): - t = time.localtime(t/90000) - return "%2d:%02d:%02d" % (t.tm_hour, t.tm_min, t.tm_sec) - position,length = 0,0 - try: - (position,length) = self.getVodPlayTime() - self._vod_length = length - if position == -1 and length == -1: - raise Exception("Can't get play status") - #print position, "/", length, " - ", getTimeString(position), "/", getTimeString(length) - self._ssm.setStatus(position, length, 1) - except Exception, ErrMsg: - print ErrMsg - self._serviceEOF() + v = 0 + if self.soft_volume > 0 and self.max_volume > 0: + v = int((self.max_volume * self.soft_volume) / 100) + VolumeControl.instance.volctrl.setVolume(v, v) + return (True, None) + + def _CB_CONTROL_VOLUME_UP(self, result, packet): + self.set_volume(5) + return (True, None) + + def _CB_CONTROL_VOLUME_DOWN(self, result, packet): + self.set_volume(-5) + return (True, None) + + def _CB_BROWSER_MENU_OPEN(self, result, packet): + if vbcfg.g_browser and vbcfg.g_browser.is_browser_opened: + vbcfg.setPosition(vbcfg.g_position) + fbClass.getInstance().unlock() + eRCInput.getInstance().unlock() + + vbcfg.g_browser.toggle_browser(packet, self.current_title) + return (True, None) + + def _CB_BROWSER_VKB_OPEN(self, result, packet): + if vbcfg.g_browser and vbcfg.g_browser.is_browser_opened: + vbcfg.setPosition(vbcfg.g_position) + fbClass.getInstance().unlock() + eRCInput.getInstance().unlock() + + if strIsEmpty(packet): + packet = "" + self._session.openWithCallback(self.close_vkb, VirtualKeyBoard, title=("Please enter URL here"), text=str(packet)) + return (True, None) + + def _CB_OOIF_GET_CURRENT_CHANNEL(self, result, packet): + if (vbcfg.g_channel_info): + try: + data = struct.pack('iiii', vbcfg.g_channel_info[1], vbcfg.g_channel_info[2], vbcfg.g_channel_info[0], len(vbcfg.g_channel_info[3])) + vbcfg.g_channel_info[3] + except Exception, err: + vbcfg.ERR(err) + return (False, None) + else: + return (False, None) + return (True, data) - def _serviceStarted(self): - try: - self._ssm.setStatus(0, 0, 0) - self._currentServicePositionTimer.start(1000) - except Exception, ErrMsg: - print ErrMsg - - def _serviceEOF(self): - (position,length) = self.getVodPlayTime() - self._ssm.setStatus(length, length, 1) - print "service EOF" - self._currentServicePositionTimer.stop() - - def _layoutFinished(self): - global __gval__ - __gval__.hbbtv_handelr._soft_volume = -1 - self.setTitle(_('HbbTV Plugin')) - command_util = getCommandUtil() - profile = self._profile - (sid, onid, tsid, name, orgid) = getChannelInfos() - params = struct.pack('!IIIIII', orgid, profile, sid, onid, tsid, len(name)) + name - if self._use_ait: - command_util.sendCommand('OP_HBBTV_UNLOAD_AIT') - time.sleep(1) - command_util.sendCommand('OP_HBBTV_LOAD_AIT', params, 1) - return - command_util.sendCommand('OP_HBBTV_LOAD_AIT', params) - time.sleep(1) - command_util.sendCommand('OP_HBBTV_OPEN_URL', self._url) + def _CB_OOIF_BROADCAST_PLAY(self, result, packet): + if vbcfg.g_service is not None: + self._session.nav.playService(vbcfg.g_service) + self.videobackend_activate = False + return (True, None) - def _cb_close_window(self): - self._closeTimer.start(1000) + def _CB_OOIF_BROADCAST_STOP(self, result, packet): + vbcfg.g_service = self._session.nav.getCurrentlyPlayingServiceReference() + self._session.nav.stopService() + self.videobackend_activate = True + return (True, None) - def _do_close(self): - self._closeTimer.stop() - command_server = getCommandServer() - try: - if self._cb_set_page_title in command_server.onSetPageTitleCB: - command_server.onSetPageTitleCB.remove(self._cb_set_page_title) - except Exception, ErrMsg: pass - try: - if self._cb_close_window in command_server.onHbbTVCloseCB: - command_server.onHbbTVCloseCB.remove(self._cb_close_window) - except Exception, ErrMsg: pass - try: - if self._cb_closed_func is not None: - self._cb_closed_func() - except: pass - restoreResolution() - fbClass.getInstance().unlock() - eRCInput.getInstance().unlock() - self.close() - - def _cb_set_page_title(self, title=None): - print "page title :",title - if title is None: - return - self.setTitle(title) + def _CB_OOIF_BROADCAST_CHECK(self, result, packet): + if self._session.nav.getCurrentService() is None: + return (False, None) + return (True, None) -class HbbTVHelper(Screen): - skin = """""" +class VBMain(Screen): + skin = """""" def __init__(self, session): - global __gval__ - __gval__.hbbtv_handelr = HandlerHbbTV(session) - __gval__.command_server = ServerFactory().doListenUnixTCP('/tmp/.sock.hbbtv.url', __gval__.hbbtv_handelr) - Screen.__init__(self, session) - self._session = session + self.vbcallback = None + self.vbhandler = VBHandler(session) + self.vbserver = VBServerThread() + self.vbserver.open(1) + self.vbserver.start() - self._restart_opera() + # comment for dev + self.restart_browser() + vbcfg.LOG("browser start") self._timer_infobar = eTimer() - self._timer_infobar.callback.append(self._cb_registrate_infobar) + self._timer_infobar.callback.append(self._cb_register_infobar) self._timer_infobar.start(1000) - self._excuted_browser = False - self._profile = 0 - - __gval__.command_util = BrowserCommandUtil() - - global _g_ssm_ - if _g_ssm_ is None: - _g_ssm_ = SimpleSharedMemory() - _g_ssm_.doConnect() - - self._callbackStartStop = None - - self.__et = ServiceEventTracker(screen=self, eventmap={ - iPlayableService.evHBBTVInfo: self._cb_detectedAIT, - iPlayableService.evUpdatedInfo: self._cb_updateInfo + self._event = ServiceEventTracker(screen=self, eventmap={ + iPlayableService.evHBBTVInfo: self._cb_ait_detected, + iPlayableService.evUpdatedInfo: self._cb_info_updated }) self._applicationList = None + self._app_info = None try: from Screens.InfoBarGenerics import gHbbtvApplication - self.mVuplusBox = gHbbtvApplication.getUseAit() + self.m_vuplus = gHbbtvApplication.getUseAit() except: - self.mVuplusBox = False + self.m_vuplus = False - def _cb_detectedAIT(self): - name = self._cb_ready_for_ait() - if name is not None and self.mVuplusBox: - from Screens.InfoBarGenerics import gHbbtvApplication - gHbbtvApplication.setApplicationName(str(name)) - - def _cb_updateInfo(self): - if not self._excuted_browser: - command_util = getCommandUtil() - command_util.sendCommand('OP_HBBTV_UNLOAD_AIT') - if self.mVuplusBox: - from Screens.InfoBarGenerics import gHbbtvApplication - gHbbtvApplication.setApplicationName("") - #self._applicationList = None - - def _cb_registrate_infobar(self): + def _cb_register_infobar(self): if InfoBar.instance: self._timer_infobar.stop() if self._cb_hbbtv_activated not in InfoBar.instance.onHBBTVActivation: InfoBar.instance.onHBBTVActivation.append(self._cb_hbbtv_activated) + vbcfg.DEBUG("registred HbbTV in InfoBar") - def _cb_ready_for_ait(self): - setChannelInfo(None, None, None, None, None) - - service = self._session.nav.getCurrentService() - info = service and service.info() - if info is not None: - sid = info.getInfo(iServiceInformation.sSID) - onid = info.getInfo(iServiceInformation.sONID) - tsid = info.getInfo(iServiceInformation.sTSID) - name = info.getName() - if name is None: - name = "" - - pmtid = info.getInfo(iServiceInformation.sPMTPID) - demux = info.getInfoString(iServiceInformation.sLiveStreamDemuxId) - - from aitreader import eAITSectionReader - reader = eAITSectionReader(demux, pmtid, sid) - if reader.doOpen(info, self.mVuplusBox): - reader.doParseApplications() - reader.doDump() - else: print "no data!!" - - try: - self._applicationList = reader.getApplicationList() - if len(self._applicationList) > 0: - orgid = int(self._applicationList[0]["orgid"]) - setChannelInfo(sid, onid, tsid, name, orgid) - return self._applicationList[0]["name"] - except: pass - return None - - def _cb_hbbtv_activated(self, title=None, url=None): - if not self._is_browser_running(): + def _cb_hbbtv_activated(self, url=None, app_info=None): + if not self.check_browser(): 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) - self._start_hbbtv_application(title, url) - - def _start_hbbtv_application(self, title, url): - use_ait = False - tmp_url = self.getStartHbbTVUrl() - if url is None: - url = tmp_url - if strIsEmpty(url): - print "can't get url of hbbtv!!" - return - print "success to get url of hbbtv!! >>", url - if self._excuted_browser: - print "already excuted opera browser!!" + self.session.open(MessageBox, message, MessageBox.TYPE_INFO) return + self.start_hbbtv_application(url, app_info) - if isNeedRestart(): - self._restart_opera() - time.sleep(2) - setNeedRestart(False) - - for x in self._applicationList: - control_code = int(x["control"]) - tmp_url = x["url"] - if tmp_url == url and control_code == 1: - use_ait = True - self._excuted_browser = True - self._session.open(HbbTVWindow, url, self._cb_closed_browser, use_ait, self._profile) - - def _cb_closed_browser(self): - self._excuted_browser = False - - def _start_opera(self): - if not self._is_browser_running(): - global HBBTVAPP_PATH - global __gval__ - start_command = '%s/launcher start %d %d'%(HBBTVAPP_PATH, __gval__.resX, __gval__.resY) - os.system(start_command) - return True - - def _stop_opera(self): - global HBBTVAPP_PATH - try: os.system('%s/launcher stop'%(HBBTVAPP_PATH)) - except: pass - return True + def _cb_ait_detected(self): + vbcfg.g_channel_info = None + self._applicationList = None + self._app_info = self.get_autostart_application() + vbcfg.DEBUG("detected AIT") + + def _cb_info_updated(self): + vbcfg.g_service = self.session.nav.getCurrentlyPlayingServiceReference() + vbcfg.DEBUG("updated channel info") + + def start_hbbtv_application(self, url, app_info): + if vbcfg.need_restart: + self.restart_browser() + os.time.sleep(2) + vbcfg.need_restart = False + + if not app_info: + app_info = self._app_info + self.session.open(HbbTVWindow, url, app_info) + + def menu_toggle_browser(self, callback=None): + mode = [] + self.vbcallback = callback + if self.check_browser(): + mode.append((_('Stop'), 'Stop')) + else: + mode.append((_('Start'), 'Start')) + self.session.openWithCallback(self.toggle_browser, ChoiceBox, title=_("Please choose one."), list=mode) - def _restart_opera(self): - global HBBTVAPP_PATH - global __gval__ - try: os.system('%s/launcher restart %d %d'%(HBBTVAPP_PATH, __gval__.resX, __gval__.resY)) - except: pass - return True + def toggle_browser(self, selected): + if selected is not None: + if self.vbcallback: + self.vbcallback() + try: + mode = selected[1] + if mode == 'Start': + if not self.check_browser(): + self.start_browser() + elif mode == 'Stop': + self.stop_browser() - def getStartHbbTVUrl(self): - url, self._profile = None, 0 - if self._applicationList is not None: - for u in self._applicationList: - if u["control"] in (1, -1): - url = u["url"] - self._profile = u["profile"] - if url is None: - service = self._session.nav.getCurrentService() - info = service and service.info() - if info: - url = info.getInfoString(iServiceInformation.sHBBTVUrl) - return url + except Exception, ErrMsg: + vbcfg.ERR("toggle browser: %s" % ErrMsg) - def showApplicationSelectionBox(self): + def menu_hbbtv_applications(self): applications = [] - - if self.getStartHbbTVUrl(): + if self._applicationList is not None: for x in self._applicationList: applications.append((x["name"], x)) - else: applications.append((_("No detected HbbTV applications."), None)) - self._session.openWithCallback(self._application_selected, ChoiceBox, title=_("Please choose an HbbTV application."), list=applications) + else: + applications.append((_("No detected HbbTV applications."), None)) + self.session.openWithCallback(self.start_application_selected, ChoiceBox, title=_("Please choose an HbbTV application."), list=applications) - def _application_selected(self, selected): - print selected - try: - if selected[1] is None: return - self._cb_hbbtv_activated(selected[1]["name"], selected[1]["url"]) - except Exception, ErrMsg: print ErrMsg - - 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')) - 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[1] - if mode == 'Start': - if not self._is_browser_running(): - self._start_opera() - elif mode == 'Stop': - self._stop_opera() - except Exception, ErrMsg: print "Config ERR :", ErrMsg - - def _is_browser_running(self): + def start_application_selected(self, selected): + vbcfg.DEBUG(selected) try: - global HBBTVAPP_PATH - ret = os.popen('%s/launcher check'%(HBBTVAPP_PATH)).read() - return ret.strip() != "0" + if selected[1] is not None: + self._cb_hbbtv_activated(selected[1]["url"], selected[1]) except Exception, ErrMsg: - 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 + vbcfg.ERR(ErrMsg) -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='): - 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 %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, 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 = """ - - - - - - - - - - - """ - def __init__(self, session, currentUrl): - self.session = session - Screen.__init__(self, session) - - self.menulist = [] - ConfigListScreen.__init__(self, self.menulist) - - self["actions"] = ActionMap(["OkCancelActions", "ShortcutActions", "WizardActions", "ColorActions", "SetupActions", ], { - "red" : self.keyRed, - "green" : self.keyGreen, - "ok" : self.keyOK, - "cancel" : self.keyRed - }, -2) - self["key_red"] = StaticText(_("Cancel")) - self["key_green"] = StaticText(_("Save")) - self["url"] = Label() - - self._currentPageUrl = currentUrl - 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')) - - def updateStartPageUrl(self): - if self.menuItemStartpage.value == "startpage": - self["url"].setText(self._startPageUrl) - elif self.menuItemStartpage.value == "current": - self["url"].setText(self._currentPageUrl) - elif self.menuItemStartpage.value == "direct": - self["url"].setText('') - - 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) - return - 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): - self.close() - - def keyOK(self): - def _cb_directInputUrl(data): - if strIsEmpty(data): - return - self["url"].setText(data) - if self.menuItemStartpage.value == "direct": - self.session.openWithCallback(_cb_directInputUrl, VirtualKeyBoard, title=(_("Please enter URL here")), text='http://') - - def keyLeft(self): - ConfigListScreen.keyLeft(self) - self.updateStartPageUrl() - - def keyRight(self): - 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"))) - if not strIsEmpty(self._currentPageUrl): - l.append(("current", _("Current Page"))) - 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) - -class BookmarkEditWindow(ConfigListScreen, Screen): - CATEGORY,BOOKMARK = 0,1 - skin = """ - - - - - - - - - - - - - """ - def __init__(self, session, _mode, _type, _data, _bm): - self.mMode = _mode - self.mType = _type - self.mData = _data - self.mSession = session - self.mBookmarkManager = _bm - - if _data is not None: - print _data.mId - - Screen.__init__(self, session) - - self.menulist = [] - ConfigListScreen.__init__(self, self.menulist) - - self["actions"] = ActionMap(["OkCancelActions", "ColorActions",], { - "ok" : self.keyGreen, - "green" : self.keyGreen, - "red" : self.keyRed, - "cancel" : self.keyRed, - }, -2) - - self["VKeyIcon"] = Pixmap() - self["key_red"] = StaticText(_("Cancel")) - self["key_green"] = StaticText(_("Save")) - - self.menuItemTitle = None - self.menuItemUrl = None - self.menuItemName = None - - self.menuEntryName = None - self.menuEntryTitle = None - self.menuEntryUrl = None - - self.makeConfigList() - self.onLayoutFinish.append(self.layoutFinished) + def get_autostart_application(self): + if self._applicationList is None: + service = self.session.nav.getCurrentService() + info = service and service.info() + if info is not None: + sid = info.getInfo(iServiceInformation.sSID) + onid = info.getInfo(iServiceInformation.sONID) + tsid = info.getInfo(iServiceInformation.sTSID) + name = info.getName() + vbcfg.g_channel_info = (sid, onid, tsid, name) + + pmtid = info.getInfo(iServiceInformation.sPMTPID) + demux = info.getInfoString(iServiceInformation.sLiveStreamDemuxId) + vbcfg.DEBUG("demux = %s, pmtid = 0x%x, sid = 0x%x" % (demux, pmtid, sid)) + + from aitreader import eAITSectionReader + reader = eAITSectionReader(demux, pmtid, sid) + if reader.doOpen(info, self.m_vuplus): + reader.doParseApplications() + reader.doDump() + else: + vbcfg.ERR("no AIT") - def layoutFinished(self): - self.setTitle(_('Bookmark') + ' ' + self.mMode) + try: + self._applicationList = reader.getApplicationList() + except: + pass - 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) + if self._applicationList is not None: + for app in self._applicationList: + if app["control"] in (1, -1): + return app 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'): - categoryName = self.menuItemName.value - if strIsEmpty(categoryName): - return self.showMessageBox(_("Category Name")) - self.mBookmarkManager.addCategory(categoryName) - else: - if strIsEmpty(self.menuItemName.value): - return self.showMessageBox(_("Category Name")) - self.mData.mName = self.menuItemName.value - self.mBookmarkManager.updateCategory(self.mData) - else: - if self.mMode == _('Add'): - bookmarkTitle = self.menuItemTitle.value - bookmarkUrl = self.menuItemUrl.value - if strIsEmpty(bookmarkTitle): - 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): - 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) + def start_browser(self): + if not self.check_browser(): + os.system("%s/%s start"%(vbcfg.APPROOT, vbcfg.APP_RUN)) return True - def keyGreen(self): - if not self.saveData(): - return - self.close(True) - def keyRed(self): - self.close(False) - def keyLeft(self): - ConfigListScreen.keyLeft(self) - def keyRight(self): - ConfigListScreen.keyRight(self) - def makeConfigList(self): - self.menulist = [] - - if self.mType == BookmarkEditWindow.CATEGORY: - self.menuItemName = ConfigText(default=self.mData.mName, visible_width=65, fixed_size=False) - - 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) - - 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 = """ - - - - - - - - - - - - - - - - - """ - - def __init__(self, _session, _url=None, _title=None): - self.mUrl = _url - self.mTitle = _title - self.mBookmarkManager = BookmarkManager.getInstance() - self.mSession = _session - Screen.__init__(self, _session) - self["actions"] = ActionMap(["DirectionActions", "OkCancelActions","ColorActions", "NumberActions"], { - "ok" : self.keyOK, - "cancel": self.keyCancel, - "red" : self.keyRed, - "green" : self.keyGreen, - "yellow": self.keyYellow, - "blue" : self.keyBlue, - "0" : self.keyNumber, - },-2) - - self["key_red"] = StaticText(_("Exit")) - self["key_green"] = StaticText(_("Add")) - self["key_yellow"] = StaticText(_("Edit")) - self["key_blue"] = StaticText(_("Delete")) - self["key_0"] = StaticText(_("Set as Startpage")) - - 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() - cd = self.mBookmarkManager.getBookmarkRoot() - for ck in cd.iterkeys(): - l.append(('# ' + cd[ck].mName, cd[ck])) - bd = cd[ck].mBookmarks - for bk in bd.iterkeys(): - l.append((' - ' + bd[bk].mTitle, bd[bk])) - return l - def updateBookmarkList(self): - self.mBookmarkList = self.setBookmarkList() - self["bookmarklist"].setList(self.mBookmarkList) - def cbEditWindow(self, ret=False): - if not ret: - return - self.updateBookmarkList() - def getParentCategory(self): - idx = self["bookmarklist"].getSelectedIndex() - try: - while idx >= 0: - data = self.mBookmarkList[idx][0].strip() - if data[0] == '#': - return self.mBookmarkList[idx][1] - idx -= 1 - except: pass - return None - def isCategoryItem(self): - try: - head = self["bookmarklist"].getCurrent()[0].strip() - if head[0] == '#': - return True - except: pass - return False - def keyNumber(self): - data = self["bookmarklist"].getCurrent()[1] - if strIsEmpty(data.mUrl): - 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, 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): - def cbGreen(data): - if data is None: - return - if data[1] == 1: - parent = self.getParentCategory() - if parent is None: - return - if strIsEmpty(self.mTitle): - return - retAdd = self.mBookmarkManager.addBookmark(self.mTitle, self.mUrl, parent.mId, 0) - if not retAdd: - 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, 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) - 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,)] - 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) - def keyBlue(self): - def cbBlue(ret=None): - if not ret: return - data = self["bookmarklist"].getCurrent()[1] - if self.isCategoryItem(): - self.mBookmarkManager.deleteCategory(data.mId) - 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?") - self.mSession.openWithCallback(cbBlue, MessageBox, msg, MessageBox.TYPE_YESNO, default=True) - def keyOK(self): - if self.isCategoryItem(): return - - 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) - return - 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 = """ - - - - - - - - - - - - """ - def __init__(self, session): - Screen.__init__(self, session) - HelpableScreen.__init__(self) - - self["key_red"] = StaticText(_("Exit")) - self["key_green"] = StaticText(_("Global")) - self["key_yellow"] = StaticText(_("Mouse")) - self["key_blue"] = StaticText(_("Keyboard")) - - self["actions"] = ActionMap(["DirectionActions", "OkCancelActions","ColorActions"], { - "ok" : self.keyRed, - "cancel": self.keyRed, - "red" : self.keyRed, - "green" : self.keyGreen, - "yellow": self.keyYellow, - "blue" : self.keyBlue, - },-2) - - self.showHelpTimer = eTimer() - 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) - - def setHelpModeActions(self, _mode=0): - self.helpList = [] - if _mode == self.MODE_GLOBAL: - self["OkCancelActions"] = HelpableActionMap(self, "OkCancelActions", { - "cancel" : (self.keyPass, _("Exit the Opera browser.")), - }) - self["MenuActions"] = HelpableActionMap(self, "MenuActions", { - "menu" : (self.keyPass, _("Show the Menu window.")), - }) - self["ColorActions"] = HelpableActionMap(self, "ColorActions", { - "green" : (self.keyPass, _("Enter Key")), - "yellow" : (self.keyPass, _("Show the Virtual keyboard window.")), - "blue" : (self.keyPass, _("Backspace Key")), - }) - self["EPGSelectActions"] = HelpableActionMap(self, "EPGSelectActions", { - "info" : (self.keyPass, _("Switch to keyboard/mouse mode.")), - }) - - elif _mode == self.MODE_MOUSE: - self["DirectionActions"] = HelpableActionMap(self, "DirectionActions", { - "up" : (self.keyPass, _("It will move the mouse pointer up.")), - "down" : (self.keyPass, _("It will move the mouse pointer down.")), - "left" : (self.keyPass, _("It will move the mouse pointer left.")), - "right" : (self.keyPass, _("It will move the mouse pointer right.")), - }) - self["OkCancelActions"] = HelpableActionMap(self, "OkCancelActions", { - "ok" : (self.keyPass, _("Left Mouse Button")), - }) - self["EPGSelectActions"] = HelpableActionMap(self, "EPGSelectActions", { - "nextBouquet" : (self.keyPass, _("Right Mouse Button")), - "nextService" : (self.keyPass, _("Left Key")), - "prevService" : (self.keyPass, _("Right Key")), - }) - elif _mode == self.MODE_KEYBOARD: - self["DirectionActions"] = HelpableActionMap(self, "DirectionActions", { - "up" : (self.keyPass, _("Up Key")), - "down" : (self.keyPass, _("Down Key")), - "left" : (self.keyPass, _("Left Key")), - "right" : (self.keyPass, _("Right Key")), - }) - self["OkCancelActions"] = HelpableActionMap(self, "OkCancelActions", { - "ok" : (self.keyPass, _("Enter Key")), - }) - self["EPGSelectActions"] = HelpableActionMap(self, "EPGSelectActions", { - "nextBouquet" : (self.keyPass, _("PageUp Key")), - "prevBouquet" : (self.keyPass, _("PageDown Key")), - "nextService" : (self.keyPass, _("Go to previous page.")), - "prevService" : (self.keyPass, _("Go to next page.")), - }) - - if _mode > 0: - self.showHelp() - - def keyPass(self): - pass - - def keyRed(self): - self.close() - def keyGreen(self): - self.setHelpModeActions(self.MODE_GLOBAL) - def keyYellow(self): - self.setHelpModeActions(self.MODE_MOUSE) - def keyBlue(self): - self.setHelpModeActions(self.MODE_KEYBOARD) - -class OperaBrowser(Screen): - MENUBAR_ITEM_WIDTH = 150 - MENUBAR_ITEM_HEIGHT = 30 - SUBMENULIST_WIDTH = 200 - 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 - - size = getDesktop(0).size() - WIDTH = int(size.width()) - HEIGHT = int(size.height()) - skin = """ - - - - - - - - - - """ % { 'width' :WIDTH, - 'height' :HEIGHT, - 'bottom_pos_y' :HEIGHT-80, - 'bottom_size_x' :WIDTH } - - COMMAND_MAP = {} - MENUITEMS_LIST =[] - def __init__(self, session, url=None, isWebAppMode=False): - Screen.__init__(self, session) - self["actions"] = ActionMap(["DirectionActions", "MenuActions", "OkCancelActions"], { - "cancel" : self.keyCancel - ,"ok" : self.keyOK - ,"left" : self.keyLeft - ,"right" : self.keyRight - ,"up" : self.keyUp - ,"down" : self.keyDown - ,"menu" : self.keyMenu - }, -2) - - self.UpdateLanguageCB() - - self._terminatedBrowser = True - self._enableKeyEvent = True - self._currentPageUrl = None - self._currentPageTitle = None - self.menubarCurrentIndex = 0 - self.lvMenuItems = [] - self.lvSubMenuItems = [] - - self["topArea"] = Label() - self["bottomArea"] = Label() - - self["menuitemFile"] = MultiColorLabel()# modify menu - self["menuitemTool"] = MultiColorLabel() - self["menuitemHelp"] = MultiColorLabel() - - self["menulist"] = MenuList(self.setListOnView()) - self["submenulist"] = MenuList(self.setSubListOnView()) - - self.toggleMainScreenFlag = True - self.toggleListViewFlag = False - self.toggleSubListViewFlag = False - self.currentListView = self["menulist"] - - self.onLayoutFinish.append(self.layoutFinished) - - self._onCloseTimer = eTimer() - self._onCloseTimer.callback.append(self._cb_onClose) - - self.paramUrl = url - self.paramIsWebAppMode = isWebAppMode - 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" - 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["menulist"].hide() - self["submenulist"].hide() - - self["bottomArea"].setText(_("Opera Web Browser Plugin v1.0")) - self.setTitle(_("BrowserMain")) - self.selectMenuitem() - - if self.paramUrl is not None: - self.keyMenu() - if self.paramIsWebAppMode: - self.cbUrlText(data=self.paramUrl, mode=1, opcode='OP_BROWSER_OPEN_YOUTUBETV') - else: self.cbUrlText(data=self.paramUrl, mode=1) - - def selectMenuitem(self): - tmp = [self["menuitemFile"], self["menuitemTool"], self["menuitemHelp"]]# modify menu - self["menuitemFile"].setForegroundColorNum(0) - self["menuitemTool"].setForegroundColorNum(0) - self["menuitemHelp"].setForegroundColorNum(0) - tmp[self.menubarCurrentIndex].setForegroundColorNum(1) - - def popupCloseAll(self): - self.keyLeft() - self.keyLeft() - self.keyUp() - self.keyCancel() - - def setListOnView(self): - l = self.MENUITEMS_LIST[self.menubarCurrentIndex] - if not self._terminatedBrowser and self.menubarCurrentIndex == 0: # running - l = [(_('Return'), None)] - self.lvMenuItems = l #self.MENUITEMS_LIST[self.menubarCurrentIndex] - return self.lvMenuItems - - def setSubListOnView(self): - self.lvSubMenuItems = [] - xl = self["menulist"].getCurrent()[1] - if xl is None: return [] - for x in xl: - self.lvSubMenuItems.append((x,None)) - return self.lvSubMenuItems - - def toggleMainScreen(self): - if not self.toggleMainScreenFlag: - self.show() - else: self.hide() - self.toggleMainScreenFlag = not self.toggleMainScreenFlag - - def toggleListView(self): - if not self.toggleListViewFlag: - self["menulist"].show() - else: self["menulist"].hide() - self.toggleListViewFlag = not self.toggleListViewFlag - - def toggleSubListView(self): - if not self.toggleSubListViewFlag: - self["submenulist"].show() - else: self["submenulist"].hide() - self.toggleSubListViewFlag = not self.toggleSubListViewFlag - - def setCurrentListView(self, listViewIdx): - if listViewIdx == 0: - self.currentListView = None - elif listViewIdx == 1: - self.currentListView = self["menulist"] - elif listViewIdx == 2: - self.currentListView = self["submenulist"] - - def _cb_onClose(self): - self._onCloseTimer.stop() - command_server = getCommandServer() - try: - if self._on_close_window in command_server.onHbbTVCloseCB: - command_server.onHbbTVCloseCB.remove(self._on_close_window) - except Exception, ErrMsg: pass + def stop_browser(self): + VBController.command('CONTROL_EXIT') + return True try: - 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.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() - else: - self.keyRight() - self.keyLeft() - - def _on_setPageTitle(self, title=None): - print "Title :",title - if title is None: - return - self.setTitle(title) - - def cbUrlText(self, data=None, mode=0, opcode='OP_BROWSER_OPEN_URL'): - global _g_helper - if not _g_helper._is_browser_running(): - return - print "Inputed Url :", data, mode - if strIsEmpty(data): - return - #self.hideSubmenu() - command_server = getCommandServer() - if self._on_setPageTitle not in command_server.onSetPageTitleCB: - command_server.onSetPageTitleCB.append(self._on_setPageTitle) - if self._on_close_window not in command_server.onHbbTVCloseCB: - 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(opcode, data, mode) - self._terminatedBrowser = False - self._enableKeyEvent = False - - global __gval__ - __gval__.hbbtv_handelr._soft_volume = -1 - - def _on_close_window(self): - self._onCloseTimer.start(1000) - - def _cb_bookmarkWindowClosed(self, data=None): - 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) + os.system("%s/%s stop"%(vbcfg.APPROOT, vbcfg.APP_RUN)) + except: + pass + return True - 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.") - self.session.open(MessageBox, message, MessageBox.TYPE_INFO) - return - 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) - 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(self._cb_cmdOnStartSTop) - - def _cmd_on_Bookmark(self): - url = self._currentPageUrl - if url is None: - url = '' - title = self._currentPageTitle - if title is None: - title = '' - self.session.openWithCallback(self._cb_bookmarkWindowClosed, OperaBrowserBookmarkWindow, url, title) - def _cmd_on_Preference(self): - url = self._currentPageUrl - if url is None: - url = '' - self.session.open(OperaBrowserPreferenceWindow, url) - 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.") - self.session.open(MessageBox, message, MessageBox.TYPE_INFO) - return - mode = 0 - start = 'http://vuplus.com' + def check_browser(self): try: - d = OperaBrowserSetting().getData() - start = d['start'] - mode = d['type'] - except: pass - self.cbUrlText(start, mode) - def _cmd_on_ReturnToBrowser(self): - self.keyCancel() - - def _cmd_on_Help(self): - self.session.open(BrowserHelpWindow) + ret = os.popen('%s/%s check'%(vbcfg.APPROOT, vbcfg.APP_RUN)).read() + return ret.strip() != "0" + except Exception, ErrMsg: + vbcfg.ERR("check browser running: %s" % ErrMsg) + return False - def doCommand(self, command): + def restart_browser(self): try: - 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 - if self.currentListView.getCurrent()[1] is None: - self.doCommand(self.currentListView.getCurrent()[0]) - #self.session.open(MessageBox, _(self.currentListView.getCurrent()[0]), type = MessageBox.TYPE_INFO) - return - self.keyRight() - - def updateSelectedMenuitem(self, status): - if self.menubarCurrentIndex == 0 and status < 0: - self.menubarCurrentIndex = 2 # modify menu - elif self.menubarCurrentIndex == 2 and status > 0: # modify menu - self.menubarCurrentIndex = 0 - else: self.menubarCurrentIndex += status - self.selectMenuitem() - - def keyLeft(self): - if not self.toggleMainScreenFlag: - return - if not self.toggleListViewFlag: - self.updateSelectedMenuitem(-1) - return - if self.toggleSubListViewFlag: - self.setCurrentListView(1) - self.toggleSubListView() - return - #if self.currentListView.getSelectedIndex(): - self.currentListView.pageUp() - self.keyUp() - self.keyLeft() - self.keyDown() - - def keyRight(self): - if not self.toggleMainScreenFlag: - return - if not self.toggleListViewFlag: - self.updateSelectedMenuitem(1) - return - if self.currentListView is None: - return - if self.currentListView.getCurrent()[1] is not None: - parentSelectedIndex = self.currentListView.getSelectedIndex() - self.setCurrentListView(2) - self.currentListView.setList(self.setSubListOnView()) - self.currentListView.resize(self.SUBMENULIST_WIDTH, self.SUBMENULIST_HEIGHT*len(self.lvSubMenuItems)+5) - self.currentListView.move(self.MENUBAR_ITEM_WIDTH*self.menubarCurrentIndex + self.SUBMENULIST_WIDTH+self.SUBMENULIST_NEXT + 50,self.MENUBAR_ITEM_HEIGHT+30+(parentSelectedIndex*self.SUBMENULIST_HEIGHT)) - self.toggleSubListView() - return - self.currentListView.pageUp() - self.keyUp() - self.keyRight() - self.keyDown() + os.system("%s/%s restart"%(vbcfg.APPROOT, vbcfg.APP_RUN)) + except: + pass + return True - def keyDown(self): - if not self.toggleMainScreenFlag: - return - if self.currentListView is None: - return - if not self.toggleListViewFlag: - self.currentListView.setList(self.setListOnView()) - self.currentListView.resize(self.SUBMENULIST_WIDTH, self.SUBMENULIST_HEIGHT*len(self.lvMenuItems)+5) - self.currentListView.move(self.MENUBAR_ITEM_WIDTH*self.menubarCurrentIndex+1+ 50,self.MENUBAR_ITEM_HEIGHT+30) - self.toggleListView() - return - self.currentListView.down() +def HelpableScreen__init__(self): + if isinstance(self, HelpableScreen): + HelpableScreen.showManual = showManual - def keyUp(self): - if not self.toggleMainScreenFlag: - return - if self.currentListView is None: - return - if self.currentListView == self["menulist"]: - if self.currentListView.getSelectedIndex() == 0: - self.toggleListView() - return - self.currentListView.up() - - 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 - self._currentPageTitle = None - command_util = getCommandUtil() - command_util.sendCommand('OP_BROWSER_MENU_RES') - return - self.close() - - def keyMenu(self): - self.toggleMainScreen() - - def setCurrentPageUrl(self, url, title=None): - self._currentPageUrl = url - if title is None: - idx = len(url) - if idx > 10: idx = 10 - title = url[:idx] - self._currentPageTitle = title - print self._currentPageUrl - self.toggleMainScreen() - self.hideSubmenu() - self.keyDown() - - def hideSubmenu(self): - self.currentListView.pageUp() - self.keyUp() - -config.plugins.youtubetv = ConfigSubsection() -config.plugins.youtubetv.showhelp = ConfigYesNo(default = False) -config.plugins.youtubetv.uri = ConfigText(default = "http://www.youtube.com/tv", visible_width = 50, fixed_size = False) -class YoutubeTVWindow(Screen, HelpableScreen): - skin = """ - - - - - - - - - - """ - def __init__(self, session): - Screen.__init__(self, session) - HelpableScreen.__init__(self) - - self["actions"] = ActionMap(["WizardActions", "DirectionActions", "OkCancelActions","ColorActions", "EPGSelectActions",], { - "cancel": self.keyCancel, - "red" : self.keyCancel, - "green" : self.keyGreen, - "yellow": self.keyYellow, - },-2) - - self["key_green"] = StaticText(_("Start")) - self["key_yellow"] = StaticText(_("Help")) - - self["infomation"] = Label() - self["startdesc"] = Label() - self["helpdesc"] = Label() - - self.onLayoutFinish.append(self.layoutFinished) - - def layoutFinished(self): - self.setTitle(_('Start YouTube TV')) - self["infomation"].setText(_("YouTube TV is a new way to watch YouTube videos on Vu+")) - self["startdesc" ].setText(_("* Start YouTube TV")) - self["helpdesc" ].setText(_("* RC Help")) - - def setHelpModeActions(self): - self.helpList = [] - self["OkCancelActions"] = HelpableActionMap(self, "OkCancelActions", { - "ok" : (self.keyPass, _("Play ther selected the video")), - "cancel": (self.keyPass, _("Exit the YouTube TV")), - }) - self["EventViewActions"] = HelpableActionMap(self, "EventViewActions", { - "pageUp" : (self.keyPass, _("Move up")), - "pageDown" : (self.keyPass, _("Move down")), - "prevEvent" : (self.keyPass, _("Move left")), - "nextEvent" : (self.keyPass, _("Move right")), - }) - self["EPGSelectActions"] = HelpableActionMap(self, "EPGSelectActions", { - "info" : (self.keyPass, _("Search a video")), - "nextService" : (self.keyPass, _("Skip forward 10 sec")), - "prevService" : (self.keyPass, _("Skip backward 10 sec")), - }) - self["MediaPlayerActions"] = HelpableActionMap(self, "MediaPlayerActions", { - "play" : (self.keyPass, _("Play current video")), - "pause" : (self.keyPass, _("Pause current video")), - "stop" : (self.keyPass, _("Stop current video")), - }) - self["ColorActions"] = HelpableActionMap(self, "ColorActions", { - "red" : (self.keyPass, _("Back")), - }) - self.showHelp() - - def keyPass(self): - pass - def keyCancel(self): - config.plugins.youtubetv.showhelp.cancel() - self.close(False) - def keyGreen(self): - config.plugins.youtubetv.showhelp.save() - config.plugins.youtubetv.save() - config.plugins.save() - self.close(True) - def keyYellow(self): - self.setHelpModeActions() - def keyBlue(self): - if config.plugins.youtubetv.showhelp.value == True : - config.plugins.youtubetv.showhelp.setValue(False) - else: config.plugins.youtubetv.showhelp.setValue(True) - -class YoutubeTVSettings(ConfigListScreen, Screen): - skin= """ - - - - - - - - - - """ - def __init__(self, session): - self.session = session - Screen.__init__(self, session) - - self.menulist = [] - ConfigListScreen.__init__(self, self.menulist) - - self["actions"] = ActionMap(["OkCancelActions", "ColorActions",], { - "ok" : self.keyGreen, - "green" : self.keyGreen, - "red" : self.keyRed, - "cancel" : self.keyRed, + self["helpActions"] = ActionMap(["HelpbuttonActions"], { + "help_b" : self.showHelp, + "help_l" : self.showManual, }, -2) - self["key_red"] = StaticText(_("Cancel")) - self["key_green"] = StaticText(_("Save")) - - self.makeConfigList() - self.onLayoutFinish.append(self.layoutFinished) - - def layoutFinished(self): - self.setTitle(_('YouTube TV Settings')) - - def keyGreen(self): - config.plugins.youtubetv.showhelp.save() - config.plugins.youtubetv.uri.save() - config.plugins.youtubetv.save() - config.plugins.save() - self.close() - def keyRed(self): - config.plugins.youtubetv.showhelp.cancel() - config.plugins.youtubetv.uri.cancel() - self.close() - - def keyLeft(self): - ConfigListScreen.keyLeft(self) - - def keyRight(self): - ConfigListScreen.keyRight(self) +def showManual(self): + if not os.path.exists(vbcfg.MANUALROOT): + return - def makeConfigList(self): - self.menulist = [] - entryUri = getConfigListEntry(_("YouTube TV URL"), config.plugins.youtubetv.uri) - entryShowHelp = getConfigListEntry(_("Do not show YouTube TV Starter again"), config.plugins.youtubetv.showhelp) - self.menulist.append(entryUri) - self.menulist.append(entryShowHelp) + url = 'file://' + vbcfg.MANUALROOT + '/main.html' + lang = language.getLanguage() + if os.path.exists(vbcfg.MANUALROOT + '/' + lang): + url = 'file://' + vbcfg.MANUALROOT + '/' + lang + '/main.html' - self["config"].list = self.menulist - self["config"].l.setList(self.menulist) + vbcfg.g_browser = self.session.open(Browser, url) def auto_start_main(reason, **kwargs): if reason: - command_server = getCommandServer() try: - command_server.stop() + if vbcfg.g_main.vbserver is not None: + vbcfg.g_main.vbserver.kill() except: pass -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) - + vbcfg.g_main = session.open(VBMain) 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)) - -_g_backupSession = None -def showYoutubeTV(session, **kwargs): - def _do_clean(): - _g_clearBrowserDataTimer.stop() - try: _g_clearBrowserDataTimer.callback.remove(_do_clean) - except: pass - setPluginBrowser(None) - global _g_backupSession - - service = getBeforeService() - if service is not None: - _g_backupSession.nav.playService(eServiceReference(service)) - _g_backupSession = None - def clearBrowserData(): - _g_clearBrowserDataTimer.callback.append(_do_clean) - _g_clearBrowserDataTimer.start(50) - def cbYoutubeTVClose(ret): +def start_youtubetv_main(session, **kwargs): + def _cb_youtubetv_close(ret): if ret: - global _g_backupSession - _g_backupSession = session - service = session.nav.getCurrentlyPlayingServiceReference() - if service is not None: - setBeforeService(service.toString()) + vbcfg.g_service = session.nav.getCurrentlyPlayingServiceReference() + if vbcfg.g_service is not None: session.nav.stopService() - else: setBeforeService(service) - setPluginBrowser(session.openWithCallback(clearBrowserData, OperaBrowser, config.plugins.youtubetv.uri.value, True)) + vbcfg.g_browser = session.open(Browser, vbcfg.g_youtubetv_cfg.uri.value, True) + if config.plugins.youtubetv.showhelp.value == True: - cbYoutubeTVClose(True) - else: session.openWithCallback(cbYoutubeTVClose, YoutubeTVWindow) + _cb_youtubetv_close(True) + else: + session.openWithCallback(_cb_youtubetv_close, YoutubeTVWindow) -def youtube_setting_main(session, **kwargs): - session.open(YoutubeTVSettings) -def start_menu_main(menuid, **kwargs): +def menu_start_youtube(menuid, **kwargs): if menuid == "mainmenu": - return [(_("YouTube TV"), showYoutubeTV, "youtube_tv", 46)] + return [(_("YouTube TV"), start_youtubetv_main, "youtube_tv", 46)] return [] -def plugin_start_main(session, **kwargs): - #session.open(OperaBrowser) - 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(session.openWithCallback(clearBrowserData, OperaBrowser)) - -def plugin_extension_start_application(session, **kwargs): - global _g_helper - if _g_helper is None: - return - _g_helper.showApplicationSelectionBox() +def plugin_setting_youtube(session, **kwargs): + session.open(YoutubeTVSettings) -def plugin_extension_browser_config(session, **kwargs): - global _g_helper - if _g_helper is None: - return - _g_helper.showBrowserConfigBox() +def plugin_start_browser(session, **kwargs): + vbcfg.g_browser = session.open(Browser) -def Plugins(path, **kwargs): +def extension_toggle_browser(session, **kwargs): + if vbcfg.g_main is not None: + vbcfg.g_main.menu_toggle_browser() + +def extension_start_application(session, **kwargs): + if vbcfg.g_main is not None: + vbcfg.g_main.menu_hbbtv_applications() + +def Plugins(**kwargs): l = [] l.append(PluginDescriptor(where=PluginDescriptor.WHERE_AUTOSTART, fnc=auto_start_main)) - l.append(PluginDescriptor(name=_("YouTube TV"), where=PluginDescriptor.WHERE_MENU, fnc=start_menu_main)) - l.append(PluginDescriptor(name=_("YouTube TV Settings"), where=PluginDescriptor.WHERE_PLUGINMENU, fnc=youtube_setting_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)) - + l.append(PluginDescriptor(name=_("YouTube TV"), where=PluginDescriptor.WHERE_MENU, fnc=menu_start_youtube)) + l.append(PluginDescriptor(name=_("YouTube TV Settings"), where=PluginDescriptor.WHERE_PLUGINMENU, fnc=plugin_setting_youtube)) + l.append(PluginDescriptor(name=_("Browser Start/Stop"), where=PluginDescriptor.WHERE_EXTENSIONSMENU, needsRestart=True, fnc=extension_toggle_browser)) + l.append(PluginDescriptor(name=_("HbbTV Applications"), where=PluginDescriptor.WHERE_EXTENSIONSMENU, needsRestart=True, fnc=extension_start_application)) + l.append(PluginDescriptor(name=_("Opera Web Browser"), description=_("start opera web browser"), where=PluginDescriptor.WHERE_PLUGINMENU, needsRestart=True, fnc=plugin_start_browser)) return l - diff --git a/lib/python/Plugins/Extensions/HbbTV/vbcfg.py b/lib/python/Plugins/Extensions/HbbTV/vbcfg.py new file mode 100644 index 0000000..d07c9b4 --- /dev/null +++ b/lib/python/Plugins/Extensions/HbbTV/vbcfg.py @@ -0,0 +1,84 @@ +from time import strftime, localtime +from Tools.Directories import fileExists + +g_main = None +g_browser = None +g_youtubetv_cfg = None +g_service = None +g_channel_info = None +g_position = None + +need_restart = False + +APPROOT = "/usr/local/hbb-browser" +APP_RUN = "run.sh" + +PLUGINROOT = "/usr/lib/enigma2/python/Plugins/Extensions/HbbTV" +MANUALROOT = "/usr/local/manual" + +SOCKETFILE = None +CONTROLFILE = None + +def getPosition(): + if fileExists("/proc/stb/fb/dst_left"): + try: + file = open("/proc/stb/fb/dst_left", "r") + dst_left = int(file.read().strip(), 16) + file.close() + file = open("/proc/stb/fb/dst_width", "r") + dst_width = int(file.read().strip(), 16) + file.close() + file = open("/proc/stb/fb/dst_top", "r") + dst_top = int(file.read().strip(), 16) + file.close() + file = open("/proc/stb/fb/dst_height", "r") + dst_height = int(file.read().strip(), 16) + file.close() + except Exception, Err: + ERR(Err) + return None + return (dst_left, dst_width, dst_top, dst_height) + +def setPosition(params): + if params is None: + return + if params[0] + params[1] > 720 or params[2] + params[3] > 576 : + return + else: + try: + file = open("/proc/stb/fb/dst_left", "w") + file.write('%X' % params[0]) + file.close() + file = open("/proc/stb/fb/dst_width", "w") + file.write('%X' % params[1]) + file.close() + file = open("/proc/stb/fb/dst_top", "w") + file.write('%X' % params[2]) + file.close() + file = open("/proc/stb/fb/dst_height", "w") + file.write('%X' % params[3]) + file.close() + except Exception, Err: + ERR(Err) + return + +# for debug True +g_debug = False + +def LogEntry(mode, string): + if g_debug: + print strftime("%x %X", localtime()), "%5s [%12s]" % (mode, "Plugin"), string + elif mode != "DEBUG": + print "[browser]", string + +def DEBUG(string): + LogEntry("DEBUG", string) + +def LOG(string): + LogEntry("LOG", string) + +def WARN(string): + LogEntry("WARN", string) + +def ERR(string): + LogEntry("ERROR", string) diff --git a/lib/python/Plugins/Extensions/HbbTV/vbipc.py b/lib/python/Plugins/Extensions/HbbTV/vbipc.py new file mode 100644 index 0000000..2e0e454 --- /dev/null +++ b/lib/python/Plugins/Extensions/HbbTV/vbipc.py @@ -0,0 +1,153 @@ +from enigma import fbClass, eRCInput +import os, threading, time, socket, select, struct +import vbcfg + +_OPCODE = {} +_BUFSIZE = 4096 + +def SetHandler(opcode, handler): + try: + _OPCODE[opcode][1] = handler + except: + vbcfg.ERR("Fail to set handler (unknown opcode): %s" % opcode) + return False + return True + +def GetHandler(opcode): + for key, value in _OPCODE.items(): + if value[0] == opcode: + vbcfg.DEBUG("recv socket: [%s]" % key) + return value[1] + return None + +def GetOpcode(opcode): + try: + return _OPCODE[opcode][0] + except: return -1; + +class VBController: + @staticmethod + def assamble(opcodestr, data): + opcode = _OPCODE[opcodestr][0] + header = struct.pack('i', opcode) + return header + data + + @staticmethod + def command(opcodestr, data = ""): + cmd_fd = None + vbcfg.DEBUG("send ipc: [%s]" % opcodestr) + try: + send_data = VBController.assamble(opcodestr, data) + if not os.path.exists(vbcfg.CONTROLFILE): + raise Exception("no found controller file.") + cmd_fd = os.open(vbcfg.CONTROLFILE, os.O_WRONLY) + if cmd_fd is None: + raise Exception("fail to open controller file.") + os.write(cmd_fd, send_data) + except Exception, err: + vbcfg.ERR("VBHController: %s" % err) + fbClass.getInstance().unlock() + eRCInput.getInstance().unlock() + return False + finally: + if cmd_fd is not None: + os.close(cmd_fd) + return True + +class VBServerThread(threading.Thread): + def __init__(self): + threading.Thread.__init__(self) + self.mSock = None + self.mFlag = False + self.mTimeout = 5 + + def open(self, timeout = 5): + addr = vbcfg.SOCKETFILE + self.mTimeout = timeout + + try: + os.unlink(addr) + except: + if os.path.exists(addr): + return False + try: + self.mSock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM) + self.mSock.settimeout(self.mTimeout) + self.mSock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) + self.mSock.bind(addr) + except: return False + return True + + def parse(self, data): + hlen = struct.calcsize('ibi') + packet = "" + opcode, result, length = struct.unpack('ibi', data[:hlen]) + #vbcfg.DEBUG("%s %s %d" % (opcode, result, length)) + if length > 0: + packet = data[hlen:hlen+length] + return [opcode, result, packet] + + def assamble(self, opcode, result, packet): + if packet is None: + packet = "" + header = struct.pack('ibi', opcode, (result and 1 or 0), len(packet)) + return header + packet + + def process(self, conn, addr): + read_data = conn.recv(_BUFSIZE) + request = self.parse(read_data) + opcode, result, read_packet = request[0], request[1], request[2] + result, send_packet = False,None + try: + result, send_packet = GetHandler(opcode)(result, read_packet) + except Exception, ErrMsg: + vbcfg.ERR(ErrMsg) + send_data = self.assamble(opcode, result, send_packet) + conn.sendall(send_data) + + def run(self): + if self.mSock is None: + raise + + self.mFlag = True + self.mSock.listen(1) + while self.mFlag: + readable, writable, errored = select.select([self.mSock], [], [], self.mTimeout) + for s in readable: + if s is self.mSock: + conn, addr = None, None + try: + conn, addr = self.mSock.accept() + self.process(conn, addr) + except Exception, err: + vbcfg.ERR("VBSServerThread: %s" % err) + finally: + if conn is not None: + conn.close() + + def kill(self): + self.mFlag = False + +class VBHandlers: + def __init__(self, opcode_list, szcbh): + opcode = 0 + for opcode_str in opcode_list: + if opcode_str is None and len(opcode_str) == 0: + continue + _OPCODE[opcode_str] = [opcode, None] + opcode = opcode + 1 + + registreted_idx = 0 + for fname in dir(self): + try: + if not fname.startswith(szcbh): + continue + fref = getattr(self, fname) + if fref is None: + continue + opcodestr = fname[len(szcbh):] + vbcfg.DEBUG("registrated at %s" % opcodestr) + SetHandler(opcodestr, fref) + registreted_idx += 1 + except: pass + vbcfg.DEBUG("%d registreated" % registreted_idx) diff --git a/lib/python/Plugins/Extensions/HbbTV/youtube.py b/lib/python/Plugins/Extensions/HbbTV/youtube.py new file mode 100644 index 0000000..23215dc --- /dev/null +++ b/lib/python/Plugins/Extensions/HbbTV/youtube.py @@ -0,0 +1,172 @@ +from Screens.Screen import Screen +from Screens.HelpMenu import HelpableScreen +from Components.ActionMap import ActionMap, HelpableActionMap +from Components.ConfigList import ConfigListScreen +from Components.Label import Label +from Components.Sources.StaticText import StaticText +from Components.config import config, ConfigSubsection, ConfigYesNo, ConfigText, getConfigListEntry + +import vbcfg + +from __init__ import _ + +config.plugins.youtubetv = ConfigSubsection() +config.plugins.youtubetv.showhelp = ConfigYesNo(default = False) +config.plugins.youtubetv.uri = ConfigText(default = "http://www.youtube.com/tv", visible_width = 50, fixed_size = False) +#config.plugins.youtubetv.uri = ConfigText(default = "http://tv-html.irt.de/", visible_width = 50, fixed_size = False) + +vbcfg.g_youtubetv_cfg = config.plugins.youtubetv + +class YoutubeTVWindow(Screen, HelpableScreen): + skin = """ + + + + + + + + + + """ + + def __init__(self, session): + Screen.__init__(self, session) + HelpableScreen.__init__(self) + + self["actions"] = ActionMap(["WizardActions", "DirectionActions", "OkCancelActions","ColorActions", "EPGSelectActions",], { + "cancel": self.keyCancel, + "red" : self.keyCancel, + "green" : self.keyGreen, + "yellow": self.keyYellow, + },-2) + + self["key_green"] = StaticText(_("Start")) + self["key_yellow"] = StaticText(_("Help")) + + self["infomation"] = Label() + self["startdesc"] = Label() + self["helpdesc"] = Label() + + self.onLayoutFinish.append(self.layoutFinished) + + def layoutFinished(self): + self.setTitle(_('Start YouTube TV')) + self["infomation"].setText(_("YouTube TV is a new way to watch YouTube videos on Vu+")) + self["startdesc" ].setText(_("* Start YouTube TV")) + self["helpdesc" ].setText(_("* RC Help")) + + def setHelpModeActions(self): + self.helpList = [] + self["OkCancelActions"] = HelpableActionMap(self, "OkCancelActions", { + "ok" : (self.keyPass, _("Play ther selected the video")), + "cancel": (self.keyPass, _("Exit the YouTube TV")), + }) + self["EventViewActions"] = HelpableActionMap(self, "EventViewActions", { + "pageUp" : (self.keyPass, _("Move up")), + "pageDown" : (self.keyPass, _("Move down")), + "prevEvent" : (self.keyPass, _("Move left")), + "nextEvent" : (self.keyPass, _("Move right")), + }) + self["EPGSelectActions"] = HelpableActionMap(self, "EPGSelectActions", { + "info" : (self.keyPass, _("Search a video")), + "nextService" : (self.keyPass, _("Skip forward 10 sec")), + "prevService" : (self.keyPass, _("Skip backward 10 sec")), + }) + self["MediaPlayerActions"] = HelpableActionMap(self, "MediaPlayerActions", { + "play" : (self.keyPass, _("Play current video")), + "pause" : (self.keyPass, _("Pause current video")), + "stop" : (self.keyPass, _("Stop current video")), + }) + self["ColorActions"] = HelpableActionMap(self, "ColorActions", { + "red" : (self.keyPass, _("Back")), + }) + self.showHelp() + + def keyPass(self): + pass + + def keyCancel(self): + config.plugins.youtubetv.showhelp.cancel() + self.close(False) + + def keyGreen(self): + config.plugins.youtubetv.showhelp.save() + config.plugins.youtubetv.save() + config.plugins.save() + vbcfg.g_youtubetv_cfg = config.plugins.youtubetv + self.close(True) + + def keyYellow(self): + self.setHelpModeActions() + + def keyBlue(self): + if config.plugins.youtubetv.showhelp.value == True : + config.plugins.youtubetv.showhelp.setValue(False) + else: config.plugins.youtubetv.showhelp.setValue(True) + +class YoutubeTVSettings(ConfigListScreen, Screen): + skin= """ + + + + + + + + + + """ + + def __init__(self, session): + self.session = session + self.menulist = [] + + Screen.__init__(self, session) + ConfigListScreen.__init__(self, self.menulist) + + self["actions"] = ActionMap(["OkCancelActions", "ColorActions",], { + "ok" : self.keyGreen, + "green" : self.keyGreen, + "red" : self.keyRed, + "cancel" : self.keyRed, + }, -2) + self["key_red"] = StaticText(_("Cancel")) + self["key_green"] = StaticText(_("Save")) + + self.makeConfigList() + self.onLayoutFinish.append(self.layoutFinished) + + def layoutFinished(self): + self.setTitle(_('YouTube TV Settings')) + + def keyGreen(self): + config.plugins.youtubetv.showhelp.save() + config.plugins.youtubetv.uri.save() + config.plugins.youtubetv.save() + config.plugins.save() + + vbcfg.g_youtubetv_cfg = config.plugins.youtubetv + self.close() + + def keyRed(self): + config.plugins.youtubetv.showhelp.cancel() + config.plugins.youtubetv.uri.cancel() + self.close() + + def keyLeft(self): + ConfigListScreen.keyLeft(self) + + def keyRight(self): + ConfigListScreen.keyRight(self) + + def makeConfigList(self): + self.menulist = [] + + entryUri = getConfigListEntry(_("YouTube TV URL"), config.plugins.youtubetv.uri) + entryShowHelp = getConfigListEntry(_("Do not show YouTube TV Starter again"), config.plugins.youtubetv.showhelp) + self.menulist.append(entryUri) + self.menulist.append(entryShowHelp) + self["config"].list = self.menulist + self["config"].l.setList(self.menulist) + diff --git a/lib/python/Plugins/Extensions/Makefile.am b/lib/python/Plugins/Extensions/Makefile.am index f84f32e..bb13519 100755 --- a/lib/python/Plugins/Extensions/Makefile.am +++ b/lib/python/Plugins/Extensions/Makefile.am @@ -1,7 +1,7 @@ installdir = $(pkglibdir)/python/Plugins/Extensions SUBDIRS = TuxboxPlugins CutListEditor PicturePlayer MediaScanner MediaPlayer GraphMultiEPG SocketMMI DVDBurn Modem WebBrowser \ - VuplusEvent StreamTV DLNABrowser DLNAServer HbbTV BackupSuiteUSB BackupSuiteHDD Vbrowser + VuplusEvent StreamTV DLNABrowser DLNAServer HbbTV BackupSuiteUSB BackupSuiteHDD if HAVE_LIBDDVD SUBDIRS += DVDPlayer diff --git a/lib/python/Plugins/Extensions/Vbrowser/Makefile.am b/lib/python/Plugins/Extensions/Vbrowser/Makefile.am deleted file mode 100644 index 7bd2146..0000000 --- a/lib/python/Plugins/Extensions/Vbrowser/Makefile.am +++ /dev/null @@ -1,15 +0,0 @@ -installdir = $(pkglibdir)/python/Plugins/Extensions/Vbrowser - -SUBDIRS = meta locale - -install_PYTHON = \ - keymap.xml \ - __init__.py \ - aitreader.py \ - bookmark.py \ - browser.py \ - hbbtv.py \ - plugin.py \ - vbcfg.py \ - vbipc.py \ - youtube.py diff --git a/lib/python/Plugins/Extensions/Vbrowser/__init__.py b/lib/python/Plugins/Extensions/Vbrowser/__init__.py deleted file mode 100644 index 93e8f7f..0000000 --- a/lib/python/Plugins/Extensions/Vbrowser/__init__.py +++ /dev/null @@ -1,22 +0,0 @@ -from Components.Language import language -from Tools.Directories import resolveFilename, SCOPE_PLUGINS, SCOPE_LANGUAGE -import os,gettext - -PluginLanguageDomain = "Vbrowser" -PluginLanguagePath = "Extensions/Vbrowser/locale" - -def localeInit(): - lang = language.getLanguage()[:2] - os.environ["LANGUAGE"] = lang - gettext.bindtextdomain("enigma2", resolveFilename(SCOPE_LANGUAGE)) - gettext.textdomain("enigma2") - gettext.bindtextdomain(PluginLanguageDomain, resolveFilename(SCOPE_PLUGINS, PluginLanguagePath)) - -def _(txt): - t = gettext.dgettext(PluginLanguageDomain, txt) - if t == txt: - t = gettext.gettext(txt) - return t - -localeInit() -language.addCallback(localeInit) diff --git a/lib/python/Plugins/Extensions/Vbrowser/aitreader.py b/lib/python/Plugins/Extensions/Vbrowser/aitreader.py deleted file mode 100644 index 757b0f3..0000000 --- a/lib/python/Plugins/Extensions/Vbrowser/aitreader.py +++ /dev/null @@ -1,102 +0,0 @@ -import os, xml.dom.minidom -from enigma import iServiceInformation - -import vbcfg - -DUMPBIN = vbcfg.PLUGINROOT + "/dumpait" -class eAITSectionReader: - def __init__(self, demux, pmtid, sid): - self.mVuplusBox = False - self.mInfo = None - self.mAppList = [] - self.mDocument = None - self.mCommand = "%s --demux=%s --pmtid=%x --serviceid=%x"%(DUMPBIN, demux, pmtid, sid) - - def __text(self, nodelist): - rc = [] - for node in nodelist: - if node.nodeType == node.TEXT_NODE: - rc.append(node.data) - return ''.join(rc) - - def __item(self, application, name): - for item in application.getElementsByTagName(name): - return self.__text(item.childNodes) - return None - - def __application(self, application): - item = {} - - if self.mVuplusBox: - item["name"] = str(application[1]) - item["url"] = str(application[2]) - item["control"] = int(application[0]) - item["orgid"] = int(application[3]) - item["appid"] = int(application[4]) - item["profile"] = int(application[5]) - else: - item["name"] = str(self.__item(application, "name")) - item["url"] = str(self.__item(application, "url")) - item["control"] = int(self.__item(application, "control")) - item["orgid"] = int(self.__item(application, "orgid")) - item["appid"] = int(self.__item(application, "appid")) - item["profile"] = int(self.__item(application, "profile")) - return item - - def doParseApplications(self): - l = [] - - if self.mVuplusBox: - for application in self.mInfo.getInfoObject(iServiceInformation.sHBBTVUrl): - item = self.__application(application) - l.append(item) - else: - for application in self.mDocument.getElementsByTagName("application"): - item = self.__application(application) - l.append(item) - self.mAppList = l - - def getApplicationList(self): - return self.mAppList - - def doOpen(self, info, is_vuplusbox): - if is_vuplusbox: - self.mVuplusBox = is_vuplusbox - self.mInfo = info - return True - - document = "" - try: document = os.popen(self.mCommand).read() - except Exception, ErrMsg: - vbcfg.ERR(ErrMsg) - return False - if len(document) == 0: - return False - document = document.decode("cp1252").encode("utf-8") - try: - self.mDocument = xml.dom.minidom.parseString(document) - except Exception, ErrMsg: - vbcfg.ERR("XML parse: %s" % ErrMsg) - return False - return True - - def doDump(self): - for x in self.getApplicationList(): - print "Name :", x["name"] - print "URL :", x["url"] - print "OrgID :", x["orgid"] - print "AppID :", x["appid"] - print "Control Code :", x["control"] - print "Profile Code :", x["profile"] - print "" - -def unit_test(demux, pmtid, sid): - reader = eAITSectionReader(demux, pmtid, sid) - if reader.doOpen(): - reader.doParseApplications() - reader.doDump() - else: - vbcfg.ERR("no data!!") - -#unit_test('0', 0x17d4, 0x2b66) - diff --git a/lib/python/Plugins/Extensions/Vbrowser/bookmark.py b/lib/python/Plugins/Extensions/Vbrowser/bookmark.py deleted file mode 100644 index 5048564..0000000 --- a/lib/python/Plugins/Extensions/Vbrowser/bookmark.py +++ /dev/null @@ -1,293 +0,0 @@ -import vbcfg - -class BookmarkData: - def __init__(self, _id, _title, _url, _parent, _type): - self.mId = _id - self.mTitle = _title - self.mUrl = _url - self.mParent = _parent - self.mType = _type - def dump(self, _intent=' '): - print "%s-> %d, %s, %s, %d, %d" % (_intent, self.mId, self.mTitle, self.mUrl, self.mParent, self.mType) - -class CategoryData: - def __init__(self, _id, _name): - self.mId = _id - self.mName = _name - self.mBookmarks = {} - - def setBookmarks(self, _bookmarks): - self.mBookmarks = _bookmarks - - def appendBookmark(self, _bookmark): - self.mBookmarks[_bookmark.mId] = _bookmark - - def dump(self): - print " -> %d, %s" % (self.mId, self.mName) - for key in self.mBookmarks.iterkeys(): - self.mBookmarks[key].dump(' ') - -import ConfigParser -class SimpleConfigParser: - def __init__(self): - self.mFileName = None - self.mConfig = None - self.mCategoryCurrentIdx = 0 - self.mBookmarkCurrentIdx = 0 - self.mDataValid = False - self.mPopulateValid = False - - def _read(self): - if self.mDataValid: - return - self.mConfig.read(self.mFileName) - - self.mCategoryCurrentIdx = self.getNumber('__SYS__', 'category_current_idx') - self.mBookmarkCurrentIdx = self.getNumber('__SYS__', 'bookmark_current_idx') - self.mDataValid = True - - def _save(self): - with open(self.mFileName, 'wb') as bookmarkFile: - self.mConfig.write(bookmarkFile) - self.mDataValid = False - self.mPopulateValid = False - - def _del(self, _section, _option=None): - if _option is None: - if not self.exist(_section): - return - self.mConfig.remove_section(_section) - return - if not self.exist(_section, _option): - return - self.mConfig.remove_option(_section, _option) - - def _get(self, _section, _option, _default): - try: - data = self.mConfig.get(_section, _option) - except Exception, e: - vbcfg.ERR(e) - return _default - else : return data - - def _set(self, _section, _option, _value): - self.mConfig.set(_section, _option, _value) - - def exist(self, _section, _option=None): - if _option is None: - return self.mConfig.has_section(_section) - return self.mConfig.has_option(_section, _option) - - def setNumber(self, _section, _option, _value): - self._set(_section, _option, str(_value)) - - def setString(self, _section, _option, _value): - self._set(_section, _option, _value) - - def getNumber(self, _section, _option, _default=0): - return int(self._get(_section, _option, _default)) - - def getString(self, _section, _option, _default=''): - return self._get(_section, _option, _default) - - def delOption(self, _section, _option): - self._del(_section, _option) - - def addSection(self, _section): - self.mConfig.add_section(_section) - - def delSection(self, _section): - self._del(_section) - - def init(self, _fileName): - self.mFileName = _fileName - self.mConfig = ConfigParser.RawConfigParser() - if self.mConfig is None: - return False - self._read() - return True - -class BookmarkManager(SimpleConfigParser): - _instance = None - def __new__(cls, *args, **kwargs): - if not cls._instance: - cls._instance = super(Singleton, cls).__new__(cls, *args, **kwargs) - return cls._instance - - def __init__(self, _dbFileName): - SimpleConfigParser.__init__(self) - self.mBookmarkRoot = None - self.mDebugEnable = True - - import os - if not os.path.exists(_dbFileName): - f = file('/proc/stb/info/vumodel') - model = f.read().strip() - f.close() - manualmode = (model == "solo2" or model == "duo2" or model == "solose") - - os.system('echo "[__SYS__]" > %s'%(_dbFileName)) - os.system('echo "category_current_idx = 1" >> %s'%(_dbFileName)) - if manualmode : - os.system('echo "bookmark_current_idx = 2" >> %s'%(_dbFileName)) - else: os.system('echo "bookmark_current_idx = 1" >> %s'%(_dbFileName)) - os.system('echo "[c-1]" >> %s'%(_dbFileName)) - os.system('echo "id = 1" >> %s'%(_dbFileName)) - os.system('echo "name = My favorite" >> %s'%(_dbFileName)) - os.system('echo "[b-1]" >> %s'%(_dbFileName)) - os.system('echo "url = http://www.vuplus.com/" >> %s'%(_dbFileName)) - os.system('echo "id = 1" >> %s'%(_dbFileName)) - os.system('echo "parent = 1" >> %s'%(_dbFileName)) - os.system('echo "title = Vuplus Home" >> %s'%(_dbFileName)) - os.system('echo "type = 0" >> %s'%(_dbFileName)) - if manualmode : - os.system('echo "[b-2]" >> %s'%(_dbFileName)) - os.system('echo "url = file:///usr/local/manual/main.html" >> %s'%(_dbFileName)) - os.system('echo "id = 2" >> %s'%(_dbFileName)) - os.system('echo "parent = 1" >> %s'%(_dbFileName)) - os.system('echo "title = User Manual" >> %s'%(_dbFileName)) - os.system('echo "type = 1" >> %s'%(_dbFileName)) - self.init(_dbFileName) - - def message(self, format, params=None): - if not self.mDebugEnable: - return - if params is None: - vbcfg.DEBUG(format) - else: - vbcfg.DEBUG(format % (params)) - - def getBookmark(self, _title): - self.populate() - for key in self.mBookmarkRoot.iterkeys(): - for key2 in self.mBookmarkRoot[key].mBookmarks.iterkeys(): - if self.mBookmarkRoot[key].mBookmarks[key2].mTitle == _title: - return 'b-%d' % (self.mBookmarkRoot[key].mBookmarks[key2].mId) - return None - - def addBookmark(self, _title, _url, _parent, _type): - if self.getBookmark(_title) is not None: - return False - i = self.mBookmarkCurrentIdx + 1 - s = "b-%d" % (i,) - self.message("add bookmark : %s, %s, %d, %d", (_title, _url, _parent, _type,)) - - self.mConfig.add_section(s) - self.setNumber(s, 'id', i) - self.setString(s, 'title', _title) - self.setString(s, 'url', _url) - self.setNumber(s, 'parent', _parent) - self.setNumber(s, 'type', _type) - self.setNumber('__SYS__', 'bookmark_current_idx', i) - self._save() - - return True - - def deleteBookmark(self, _id): - self.populate() - self.message("delete bookmark : %d", (_id,)) - self.delSection('b-%d' % (_id,)) - self._save() - - def updateBookmark(self, _bookmark): - self.populate() - s = "b-%d" % (_bookmark.mId) - self.message("update bookmark : %s, %s, %d, %d", (_bookmark.mTitle, _bookmark.mUrl, _bookmark.mParent, _bookmark.mType,)) - self.setString(s, 'title', _bookmark.mTitle) - self.setString(s, 'url', _bookmark.mUrl) - self.setNumber(s, 'parent', _bookmark.mParent) - self.setNumber(s, 'type', _bookmark.mType) - self._save() - - def getCategory(self, _name): - self.populate() - for key in self.mBookmarkRoot.iterkeys(): - if self.mBookmarkRoot[key].mName == _name: - return 'c-%d' % (self.mBookmarkRoot[key].mId) - return None - - def addCategory(self, _name): - if self.getCategory(_name) is not None: - return False - self.message("add category : %s", (_name,)) - i = self.mCategoryCurrentIdx + 1 - s = "c-%d" % (i) - - self.mConfig.add_section(s) - self.setNumber(s, 'id', i) - self.setNumber(s, 'name', _name) - self.setNumber('__SYS__', 'category_current_idx', i) - self._save() - - return True - - def deleteCategory(self, _id): - self.populate() - self.message("delete category : %d", (_id,)) - try: - for key in self.mBookmarkRoot[_id].mBookmarks.iterkeys(): - self.delSection('b-%d' % (key,)) - except: pass - self.delSection('c-%d' % (_id,)) - self._save() - - def updateCategory(self, _category): - self.populate() - self.message("update category : %s", (_category.mName,)) - s = "c-%d" % (_category.mId) - self.setNumber(s, 'name', _category.mName) - self._save() - - def populate(self): - cx, bx = 0, 0 - categoryList = {} - self.message("populate : %d, %d", (self.mPopulateValid, self.mDataValid)) - - self._read() - if self.mPopulateValid: - return - - while cx <= self.mCategoryCurrentIdx: - s = 'c-%d' % (cx,) - i = self.getNumber(s, 'id', -1) - if i != -1: - n = self.getString(s, 'name') - categoryList[i] = CategoryData(i, n) - cx += 1 - sorted(categoryList) - while bx <= self.mBookmarkCurrentIdx: - s = 'b-%d' % (bx,) - i = self.getNumber(s, 'id', -1) - if i != -1: - t = self.getString(s, 'title') - u = self.getString(s, 'url') - p = self.getNumber(s, 'parent') - e = self.getNumber(s, 'type') - try: - categoryList[p].appendBookmark(BookmarkData(i, t, u, p, e)) - except Exception, e: self._del(s) - bx += 1 - for key in categoryList.iterkeys(): - sorted(categoryList[key].mBookmarks) - self.mBookmarkRoot = categoryList - self.mPopulateValid = True - self.dump() - - def getBookmarkRoot(self): - self.populate() - return self.mBookmarkRoot - - def dump(self): - if not self.mDebugEnable: - return - self.populate() - print "-- snapshot --" - for key in self.mBookmarkRoot.iterkeys(): - self.mBookmarkRoot[key].dump() - print "--------------" - - @staticmethod - def getInstance(): - return BookmarkManager(vbcfg.PLUGINROOT + "/bookmark.ini") - - diff --git a/lib/python/Plugins/Extensions/Vbrowser/browser.py b/lib/python/Plugins/Extensions/Vbrowser/browser.py deleted file mode 100644 index 405692f..0000000 --- a/lib/python/Plugins/Extensions/Vbrowser/browser.py +++ /dev/null @@ -1,1183 +0,0 @@ -from Screens.Screen import Screen -from Screens.HelpMenu import HelpableScreen -from Screens.ChoiceBox import ChoiceBox -from Screens.MessageBox import MessageBox -from Screens.VirtualKeyBoard import VirtualKeyBoard -from Components.ActionMap import ActionMap, HelpableActionMap -from Components.ConfigList import ConfigListScreen -from Components.Label import Label, MultiColorLabel -from Components.Language import language -from Components.MenuList import MenuList -from Components.Pixmap import Pixmap -from Components.Sources.StaticText import StaticText -from Components.config import ConfigText, ConfigSelection, ConfigSlider, getConfigListEntry - -import os, vbcfg - -from enigma import fbClass, eRCInput, eTimer, getDesktop - -from __init__ import _ -from bookmark import BookmarkManager, BookmarkData, CategoryData -from vbipc import VBController - -strIsEmpty = lambda x: x is None or len(x) == 0 - -class BrowserSetting: - def __init__(self): - self._settingFileName = '%s/home/setting.ini' % vbcfg.APPROOT - self._start = None - self._type = None - self._keymap = None - self._read() - - def _read(self): - if not os.path.exists(self._settingFileName): - self.getDefault() - return - - f = open(self._settingFileName) - for line in f.readlines(): - if line.startswith('start='): - 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 %d\n' % (self._start, self._type)) - tmpstr.append('keymap=%s\n' % (self._keymap)) - f = open(self._settingFileName, 'w') - f.writelines(tmpstr) - f.close() - - def getDefault(self): - self._start = 'http://vuplus.com' - self._type = 0 - self._keymap = 'us-rc' - - 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 BrowserPositionSetting: - def __init__(self): - self._positionFileName = '%s/home/position.cfg' % vbcfg.APPROOT - self._left = 0 - self._width = 0 - self._top = 0 - self._height = 0 - self._read() - - def _read(self): - if not os.path.exists(self._positionFileName): - self.getDefault() - return - - f = open(self._positionFileName) - str = f.read() - f.close() - - pos = str.split(); - self._left = int(pos[0]) - self._width = int(pos[1]) - self._top = int(pos[2]) - self._height = int(pos[3]) - - def _write(self): - tmpstr = "%d %d %d %d\n" % (self._left, self._width, self._top, self._height) - f = open(self._positionFileName, 'w') - f.write(tmpstr) - f.close() - - def getDefault(self): - self._left = 0 - self._top = 0 - self._width = 720 - self._height = 576 - - def setPosition(self, params): - self._left = params[0] - self._width = params[1] - self._top = params[2] - self._height = params[3] - self._write() - - def getPosition(self): - return (self._left, self._width, self._top, self._height) - -class BrowserPositionWindow(Screen, ConfigListScreen): - skin = """ - - - " - - - - - - - """ - def __init__(self, session): - w,h = session.desktop.size().width(), session.desktop.size().height() - cw,ch = w/2, h/2 - # btn_red btn_green lb_red lb_green config - self.skin = self.skin % (w,h, cw-190,ch-110, cw+50,ch-110, cw-190,ch-110, cw+50,ch-110, cw-250,ch-50) - - Screen.__init__(self,session) - self.session = session - self["shortcuts"] = ActionMap(["ShortcutActions", "SetupActions" ], - { - "ok": self.keyOk, - "cancel": self.keyCancel, - "red": self.keyCancel, - "green": self.keyOk, - }, -2) - self.list = [] - ConfigListScreen.__init__(self, self.list, session = self.session) - - self["key_red"] = StaticText(_("Cancel")) - self["key_green"] = StaticText(_("Save")) - self["current"] = StaticText(_(" ")) - vbcfg.g_position = vbcfg.getPosition() - self.createSetup() - - def createSetup(self): - self.list = [] - - params = BrowserPositionSetting().getPosition() - vbcfg.setPosition(params) - - left = params[0] - width = params[1] - top = params[2] - height = params[3] - - self.dst_left = ConfigSlider(default = left, increment = 5, limits = (0, 720)) - self.dst_width = ConfigSlider(default = width, increment = 5, limits = (0, 720)) - self.dst_top = ConfigSlider(default = top, increment = 5, limits = (0, 576)) - self.dst_height = ConfigSlider(default = height, increment = 5, limits = (0, 576)) - - self.dst_left_entry = getConfigListEntry(_("left"), self.dst_left) - self.dst_width_entry = getConfigListEntry(_("width"), self.dst_width) - self.dst_top_entry = getConfigListEntry(_("top"), self.dst_top) - self.dst_height_entry = getConfigListEntry(_("height"), self.dst_height) - - self.list.append(self.dst_left_entry) - self.list.append(self.dst_width_entry) - self.list.append(self.dst_top_entry) - self.list.append(self.dst_height_entry) - - self["config"].list = self.list - self["config"].l.setList(self.list) - - def resetDisplay(self): - for entry in self["config"].getList(): - self["config"].l.invalidateEntry(self["config"].getList().index(entry)) - - def adjustBorder(self): - if self["config"].getCurrent() == self.dst_left_entry: - if self.dst_left.value + self.dst_width.value >720: - self.dst_width.setValue(720-self.dst_left.value) - self.resetDisplay() - elif self["config"].getCurrent() == self.dst_width_entry: - if self.dst_left.value + self.dst_width.value >720: - self.dst_left.setValue(720-self.dst_width.value) - self.resetDisplay() - elif self["config"].getCurrent() == self.dst_top_entry: - if self.dst_top.value + self.dst_height.value >576: - self.dst_height.setValue(576-self.dst_top.value) - self.resetDisplay() - elif self["config"].getCurrent() == self.dst_height_entry: - if self.dst_top.value + self.dst_height.value >576: - self.dst_top.setValue(576-self.dst_height.value) - self.resetDisplay() - - def keyLeft(self): - ConfigListScreen.keyLeft(self) - self.adjustBorder() - params = (int(self.dst_left.value), int(self.dst_width.value), int(self.dst_top.value), int(self.dst_height.value)) - vbcfg.setPosition(params) - - def keyRight(self): - ConfigListScreen.keyRight(self) - self.adjustBorder() - params = (int(self.dst_left.value), int(self.dst_width.value), int(self.dst_top.value), int(self.dst_height.value)) - vbcfg.setPosition(params) - - def keyOk(self): - params = (int(self.dst_left.value), int(self.dst_width.value), int(self.dst_top.value), int(self.dst_height.value)) - BrowserPositionSetting().setPosition(params) - vbcfg.setPosition(vbcfg.g_position) - self.close() - - def keyCancel(self): - if self["config"].isChanged(): - self.session.openWithCallback(self.cancelConfirm, MessageBox, _("Really close without saving settings?")) - else: - vbcfg.setPosition(vbcfg.g_position) - self.close() - - def cancelConfirm(self,ret): - if ret: - vbcfg.setPosition(vbcfg.g_position) - self.close() - - -class BrowserPreferenceWindow(ConfigListScreen, Screen): - skin = """ - - - - - - - - - - - """ - def __init__(self, session, currentUrl): - self.session = session - Screen.__init__(self, session) - - self.menulist = [] - ConfigListScreen.__init__(self, self.menulist) - - self["actions"] = ActionMap(["OkCancelActions", "ShortcutActions", "WizardActions", "ColorActions", "SetupActions", ], { - "red" : self.keyRed, - "green" : self.keyGreen, - "ok" : self.keyOK, - "cancel" : self.keyRed - }, -2) - self["key_red"] = StaticText(_("Cancel")) - self["key_green"] = StaticText(_("Save")) - self["url"] = Label() - - self._currentPageUrl = currentUrl - 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')) - - def updateStartPageUrl(self): - if self.menuItemStartpage.value == "startpage": - self["url"].setText(self._startPageUrl) - elif self.menuItemStartpage.value == "current": - self["url"].setText(self._currentPageUrl) - elif self.menuItemStartpage.value == "direct": - self["url"].setText('') - - 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) - return - mode = 0 - if url.find('/usr/local/manual') > 0: - mode = 1 - self._keymapType = self.menuItemKeyboardLayout.value - BrowserSetting().setData(url, mode, self._keymapType) - # send contorller - #command_util = getCommandUtil() - #command_util.sendCommand('OP_BROWSER_NEED_RELOAD_KEYMAP') - self.close() - - def keyRed(self): - self.close() - - def keyOK(self): - def _cb_directInputUrl(data): - if strIsEmpty(data): - return - self["url"].setText(data) - if self["config"].l.getCurrentSelectionIndex() == 0 and self.menuItemStartpage.value == "direct": - self.session.openWithCallback(_cb_directInputUrl, VirtualKeyBoard, title=(_("Please enter URL here")), text='http://') - - def keyLeft(self): - ConfigListScreen.keyLeft(self) - self.updateStartPageUrl() - - def keyRight(self): - ConfigListScreen.keyRight(self) - self.updateStartPageUrl() - - def getKeymapTypeList(self): - types = [] - for f in os.listdir("%s/keymap" % vbcfg.APPROOT): - 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"))) - if not strIsEmpty(self._currentPageUrl): - l.append(("current", _("Current Page"))) - l.append(("direct", _("Direct Input"))) - self.menuItemStartpage = ConfigSelection(default="startpage", choices = l) - self.menuEntryStartpage = getConfigListEntry(_("Startpage"), self.menuItemStartpage) - - kl = self.getKeymapTypeList() - - try: - d = BrowserSetting().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) - -class BookmarkEditWindow(ConfigListScreen, Screen): - CATEGORY,BOOKMARK = 0,1 - skin = """ - - - - - - - - - - - - - """ - def __init__(self, session, _mode, _type, _data, _bm): - self.mMode = _mode - self.mType = _type - self.mData = _data - self.mSession = session - self.mBookmarkManager = _bm - - if _data is not None: - vbcfg.DEBUG("0x%x" % _data.mId) - - Screen.__init__(self, session) - - self.menulist = [] - ConfigListScreen.__init__(self, self.menulist) - - self["actions"] = ActionMap(["OkCancelActions", "ColorActions",], { - "ok" : self.keyGreen, - "green" : self.keyGreen, - "red" : self.keyRed, - "cancel" : self.keyRed, - }, -2) - - self["VKeyIcon"] = Pixmap() - self["key_red"] = StaticText(_("Cancel")) - self["key_green"] = StaticText(_("Save")) - - self.menuItemTitle = None - 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) - - 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'): - categoryName = self.menuItemName.value - if strIsEmpty(categoryName): - return self.showMessageBox(_("Category Name")) - self.mBookmarkManager.addCategory(categoryName) - else: - if strIsEmpty(self.menuItemName.value): - return self.showMessageBox(_("Category Name")) - self.mData.mName = self.menuItemName.value - self.mBookmarkManager.updateCategory(self.mData) - else: - if self.mMode == _('Add'): - bookmarkTitle = self.menuItemTitle.value - bookmarkUrl = self.menuItemUrl.value - if strIsEmpty(bookmarkTitle): - 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): - 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 - self.close(True) - - def keyRed(self): - self.close(False) - - def keyLeft(self): - ConfigListScreen.keyLeft(self) - - def keyRight(self): - ConfigListScreen.keyRight(self) - - def makeConfigList(self): - self.menulist = [] - - if self.mType == BookmarkEditWindow.CATEGORY: - self.menuItemName = ConfigText(default=self.mData.mName, visible_width=65, fixed_size=False) - - 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) - - 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 BrowserBookmarkWindow(Screen): - skin = """ - - - - - - - - - - - - - - - - - """ - - def __init__(self, _session, _url=None, _title=None): - self.mUrl = _url - self.mTitle = _title - self.mBookmarkManager = BookmarkManager.getInstance() - self.mSession = _session - Screen.__init__(self, _session) - self["actions"] = ActionMap(["DirectionActions", "OkCancelActions","ColorActions", "NumberActions"], { - "ok" : self.keyOK, - "cancel": self.keyCancel, - "red" : self.keyRed, - "green" : self.keyGreen, - "yellow": self.keyYellow, - "blue" : self.keyBlue, - "0" : self.keyNumber, - },-2) - - self["key_red"] = StaticText(_("Exit")) - self["key_green"] = StaticText(_("Add")) - self["key_yellow"] = StaticText(_("Edit")) - self["key_blue"] = StaticText(_("Delete")) - self["key_0"] = StaticText(_("Set as Startpage")) - - 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() - cd = self.mBookmarkManager.getBookmarkRoot() - for ck in cd.iterkeys(): - l.append(('# ' + cd[ck].mName, cd[ck])) - bd = cd[ck].mBookmarks - for bk in bd.iterkeys(): - l.append((' - ' + bd[bk].mTitle, bd[bk])) - return l - - def updateBookmarkList(self): - self.mBookmarkList = self.setBookmarkList() - self["bookmarklist"].setList(self.mBookmarkList) - - def cbEditWindow(self, ret=False): - if not ret: - return - self.updateBookmarkList() - - def getParentCategory(self): - idx = self["bookmarklist"].getSelectedIndex() - try: - while idx >= 0: - data = self.mBookmarkList[idx][0].strip() - if data[0] == '#': - return self.mBookmarkList[idx][1] - idx -= 1 - except: pass - return None - - def isCategoryItem(self): - try: - head = self["bookmarklist"].getCurrent()[0].strip() - if head[0] == '#': - return True - except: pass - return False - - def keyNumber(self): - if self.isCategoryItem(): return - - data = self["bookmarklist"].getCurrent()[1] - if strIsEmpty(data.mUrl): - 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] - BrowserSetting().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): - def cbGreen(data): - if data is None: - return - if data[1] == 1: - parent = self.getParentCategory() - if parent is None: - return - if strIsEmpty(self.mTitle): - return - retAdd = self.mBookmarkManager.addBookmark(self.mTitle, self.mUrl, parent.mId, 0) - if not retAdd: - 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, 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) - 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,)] - 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) - - def keyBlue(self): - def cbBlue(ret=None): - if not ret: return - data = self["bookmarklist"].getCurrent()[1] - if self.isCategoryItem(): - self.mBookmarkManager.deleteCategory(data.mId) - 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?") - self.mSession.openWithCallback(cbBlue, MessageBox, msg, MessageBox.TYPE_YESNO, default=True) - - def keyOK(self): - if self.isCategoryItem(): return - - 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) - return - mode = data.mType - if mode: - lang = language.getLanguage() - if os.path.exists(vbcfg.MANUALROOT + '/' + lang): - url = vbcfg.MANUALROOT + '/' + lang + '/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 = """ - - - - - - - - - - - - """ - def __init__(self, session): - Screen.__init__(self, session) - HelpableScreen.__init__(self) - - self["key_red"] = StaticText(_("Exit")) - self["key_green"] = StaticText(_("Global")) - self["key_yellow"] = StaticText(_("Mouse")) - self["key_blue"] = StaticText(_("Keyboard")) - - self["actions"] = ActionMap(["DirectionActions", "OkCancelActions","ColorActions"], { - "ok" : self.keyRed, - "cancel": self.keyRed, - "red" : self.keyRed, - "green" : self.keyGreen, - "yellow": self.keyYellow, - "blue" : self.keyBlue, - },-2) - - self.showHelpTimer = eTimer() - 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) - - def setHelpModeActions(self, _mode=0): - self.helpList = [] - if _mode == self.MODE_GLOBAL: - self["OkCancelActions"] = HelpableActionMap(self, "OkCancelActions", { - "cancel" : (self.keyPass, _("Exit the Browser.")), - }) - self["MenuActions"] = HelpableActionMap(self, "MenuActions", { - "menu" : (self.keyPass, _("Show the Menu window.")), - }) - self["ColorActions"] = HelpableActionMap(self, "ColorActions", { - "green" : (self.keyPass, _("Enter Key")), - "yellow" : (self.keyPass, _("Show the Virtual keyboard window.")), - "blue" : (self.keyPass, _("Backspace Key")), - }) - self["EPGSelectActions"] = HelpableActionMap(self, "EPGSelectActions", { - "info" : (self.keyPass, _("Switch to keyboard/mouse mode.")), - }) - - elif _mode == self.MODE_MOUSE: - self["DirectionActions"] = HelpableActionMap(self, "DirectionActions", { - "up" : (self.keyPass, _("It will move the mouse pointer up.")), - "down" : (self.keyPass, _("It will move the mouse pointer down.")), - "left" : (self.keyPass, _("It will move the mouse pointer left.")), - "right" : (self.keyPass, _("It will move the mouse pointer right.")), - }) - self["OkCancelActions"] = HelpableActionMap(self, "OkCancelActions", { - "ok" : (self.keyPass, _("Left Mouse Button")), - }) - self["EPGSelectActions"] = HelpableActionMap(self, "EPGSelectActions", { - "nextBouquet" : (self.keyPass, _("Right Mouse Button")), - "nextService" : (self.keyPass, _("Left Key")), - "prevService" : (self.keyPass, _("Right Key")), - }) - elif _mode == self.MODE_KEYBOARD: - self["DirectionActions"] = HelpableActionMap(self, "DirectionActions", { - "up" : (self.keyPass, _("Up Key")), - "down" : (self.keyPass, _("Down Key")), - "left" : (self.keyPass, _("Left Key")), - "right" : (self.keyPass, _("Right Key")), - }) - self["OkCancelActions"] = HelpableActionMap(self, "OkCancelActions", { - "ok" : (self.keyPass, _("Enter Key")), - }) - self["EPGSelectActions"] = HelpableActionMap(self, "EPGSelectActions", { - "nextBouquet" : (self.keyPass, _("PageUp Key")), - "prevBouquet" : (self.keyPass, _("PageDown Key")), - "nextService" : (self.keyPass, _("Go to previous page.")), - "prevService" : (self.keyPass, _("Go to next page.")), - }) - - if _mode > 0: - self.showHelp() - - def keyPass(self): - pass - - def keyRed(self): - self.close() - - def keyGreen(self): - self.setHelpModeActions(self.MODE_GLOBAL) - - def keyYellow(self): - self.setHelpModeActions(self.MODE_MOUSE) - - def keyBlue(self): - self.setHelpModeActions(self.MODE_KEYBOARD) - -class Browser(Screen): - MENU_ITEM_WIDTH = 150 - MENU_ITEM_HEIGHT = 30 - MENULIST_WIDTH = 200 - MENULIST_HEIGHT = 25 - - # menulist->position->y : MENU_ITEM_HEIGHT+30 - # menulist->size->x : MENULIST_WIDTH - - size = getDesktop(0).size() - WIDTH = int(size.width()) - HEIGHT = int(size.height()) - skin = """ - - - - - - - - - - """ % { 'width' :WIDTH, - 'height' :HEIGHT, - 'bottom_pos_y' :HEIGHT-80, - 'bottom_size_x' :WIDTH } - - MENULIST_ITEMS = [] - COMMAND_MAP = {} - def __init__(self, session, url=None, is_webapp=False): - Screen.__init__(self, session) - self["actions"] = ActionMap(["DirectionActions", "MenuActions", "OkCancelActions"], { - "cancel" : self.keyCancel - ,"ok" : self.keyOK - ,"left" : self.keyLeft - ,"right" : self.keyRight - ,"up" : self.keyUp - ,"down" : self.keyDown - ,"menu" : self.keyMenu - }, -2) - - self._cb_update_language() - - self.idx_menu = 0 - self.is_browser_opened = False - self.is_show_top = True - self.is_show_menu = False - - self._current_url = None - self._current_title = None - - self["topArea"] = Label() - self["bottomArea"] = Label() - - self["menuitemFile"] = MultiColorLabel() - self["menuitemTool"] = MultiColorLabel() - self["menuitemHelp"] = MultiColorLabel() - - self.top_menus = [self["menuitemFile"], self["menuitemTool"], self["menuitemHelp"]] - - self["menulist"] = MenuList(self.get_menulist_items(self.idx_menu)) - self["submenulist"] = MenuList(None) - - self.onLayoutFinish.append(self.layoutFinished) - - self._close_timer = eTimer() - self._close_timer.callback.append(self._cb_stop_browser) - - self.m_url = url - self.m_webapp = is_webapp - language.addCallback(self._cb_update_language) - - def layoutFinished(self): - self["menuitemFile"].setText(_("File")) - self["menuitemTool"].setText(_("Tools")) - self["menuitemHelp"].setText(_("Help")) - - self["menulist"].hide() - self["submenulist"].hide() - - self["bottomArea"].setText(_("Vuplus Web Browser Plugin v1.0")) - self.setTitle(_("BrowserMain")) - self.set_menu_item() - vbcfg.LOG("Starting Browser") - - if self.m_url is not None: - self.keyMenu() - if self.m_webapp: - self._cb_start_browser(self.m_url, 1, 'YOUTUBETV_OPENURL') - else: - self._cb_start_browser(self.m_url, 1) - - def _cb_update_language(self): - self.MENULIST_ITEMS = [ - [(_('Open Startpage'), None), (_('Open URL'), None), (_('Start/Stop'),None), (_('Exit'), None)], - [(_('Bookmark'), None), (_('Preference'), None), (_('Position Setup'), None)], - [(_('About'), None), (_('Help'), None)] - ] - self.COMMAND_MAP = {} - self.COMMAND_MAP[_('Open Startpage')] = self._cmd_OpenStartpage - self.COMMAND_MAP[_('Open URL')] = self._cmd_OpenURL - self.COMMAND_MAP[_('Start/Stop')] = self._cmd_StartStop - self.COMMAND_MAP[_('Exit')] = self._cmd_Exit - self.COMMAND_MAP[_('Bookmark')] = self._cmd_Bookmark - self.COMMAND_MAP[_('Preference')] = self._cmd_Preference - self.COMMAND_MAP[_('Position Setup')] = self._cmd_Position - self.COMMAND_MAP[_('About')] = self._cmd_About - self.COMMAND_MAP[_('Help')] = self._cmd_Help - self.COMMAND_MAP[_('Return')] = self._cmd_Return - - def _cb_set_title(self, title=None): - vbcfg.LOG("page title: %s" % title) - if title is None: - return - self.setTitle(title) - - def _cb_close_window(self): - self._close_timer.start(1000) - - def _cb_start_browser(self, data=None, mode=0, opcode='BROWSER_OPENURL'): - if not vbcfg.g_main.check_vbrowser(): - if self.m_url is not None: - if vbcfg.g_service: - self.session.nav.playService(vbcfg.g_service) - return - vbcfg.LOG("open url: %s %d" % (data, mode)) - if strIsEmpty(data): - return - - try: - if self._cb_set_title not in vbcfg.g_main.vbhandler.onSetTitleCB: - vbcfg.g_main.vbhandler.onSetTitleCB.append(self._cb_set_title) - except Exception: - pass - - try: - if self._cb_close_window not in vbcfg.g_main.vbhandler.onCloseCB: - vbcfg.g_main.vbhandler.onCloseCB.append(self._cb_close_window) - except Exception: - pass - - vbcfg.g_position = vbcfg.getPosition() - fbClass.getInstance().lock() - eRCInput.getInstance().lock() - - self.toggle_top() - ret = VBController.command(opcode, data) - self._current_url = data - if ret: - self.is_browser_opened = True - else: - self.is_browser_opened = False - vbcfg.ERR("Failed to open url: %s" % data) - - def _cb_stop_browser(self): - self._close_timer.stop() - - try: - if self._cb_set_title in vbcfg.g_main.vbhandler.onSetTitleCB: - vbcfg.g_main.vbhandler.onSetTitleCB.remove(self._cb_set_title) - except Exception: - pass - - try: - if self._cb_close_window in vbcfg.g_main.vbhandler.onCloseCB: - vbcfg.g_main.vbhandler.onCloseCB.remove(self._cb_close_window) - except Exception: - pass - - self.toggle_top() - - from enigma import getDesktop, gMainDC - desktop_size = getDesktop(0).size() - gMainDC.getInstance().setResolution(desktop_size.width(), desktop_size.height()) - vbcfg.setPosition(vbcfg.g_position) - - fbClass.getInstance().unlock() - eRCInput.getInstance().unlock() - self.is_browser_opened = False - - vbcfg.LOG("Stop Browser") - self.setTitle(_("BrowserMain")) - if self.m_url is not None: - self.keyCancel() - if vbcfg.g_service: - self.session.nav.playService(vbcfg.g_service) - else: - self.keyRight() - self.keyLeft() - - def _cb_update_bookmark(self, data=None): - if data is None: - return - if not vbcfg.g_main.check_vbrowser(): - message = _("Vuplus Browser was not running.\nPlease running browser using [File]>[Start/Stop] menu.") - self.session.open(MessageBox, message, MessageBox.TYPE_INFO) - return - (url, mode) = data - self._cb_start_browser(url, mode) - - def _cmd_OpenStartpage(self): - if not vbcfg.g_main.check_vbrowser(): - message = _("Vuplus Browser was not running.\nPlease running browser using [File]>[Start/Stop] menu.") - self.session.open(MessageBox, message, MessageBox.TYPE_INFO) - return - mode = 0 - #startpage = 'http://vuplus.com' - try: - d = BrowserSetting().getData() - start = d['start'] - mode = d['type'] - except: - pass - self._cb_start_browser(start, mode) - - def _cmd_OpenURL(self): - if not vbcfg.g_main.check_vbrowser(): - message = _("Vuplus 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._cb_start_browser, VirtualKeyBoard, title=(_("Please enter URL here")), text='http://') - - def _cmd_StartStop(self): - if vbcfg.g_main is None: - return - vbcfg.g_main.menu_toggle_vbrowser(self.keyMenu()) - - def _cmd_Exit(self): - self.close() - - def _cmd_Bookmark(self): - url = self._current_url - if url is None: - url = '' - title = self._current_title - if title is None: - title = '' - self.session.openWithCallback(self._cb_update_bookmark, BrowserBookmarkWindow, url, title) - - def _cmd_Preference(self): - url = self._current_url - if url is None: - url = '' - self.session.open(BrowserPreferenceWindow, url) - - def _cmd_Position(self): - self.session.open(BrowserPositionWindow) - - def _cmd_About(self): - self.session.open(MessageBox, _('Vuplus Web Browser Plugin v1.0'), type = MessageBox.TYPE_INFO) - - def _cmd_Help(self): - self.session.open(BrowserHelpWindow) - - def _cmd_Return(self): - self.keyCancel() - - def do_command(self, command): - try: - self.COMMAND_MAP[command]() - except Exception, ErrMsg: - vbcfg.ERR(ErrMsg) - - def get_menulist_items(self, idx=0): - l = self.MENULIST_ITEMS[idx] - if self.is_browser_opened and idx == 0: - l = [(_("Return"), None)] - return l - - def set_menu_item(self): - self["menuitemFile"].setForegroundColorNum(0) - self["menuitemTool"].setForegroundColorNum(0) - self["menuitemHelp"].setForegroundColorNum(0) - self.top_menus[self.idx_menu].setForegroundColorNum(1) - - def toggle_top(self): - if self.is_show_top: - self.hide() - else: - self.show() - self.is_show_top = not self.is_show_top - - def toggle_menulist(self): - if self.is_show_menu: - self["menulist"].hide() - else: - self["menulist"].show() - self.is_show_menu = not self.is_show_menu - - def toggle_browser(self, url=None, title=None): - self._current_url = url - if title is None: - idx = len(url) - if idx > 10: - idx = 10 - title = url[:idx] - self._current_title = title - if self._current_url: - vbcfg.DEBUG(self._current_url) - - self.toggle_top() - - self["menulist"].pageUp() - self.keyUp() - self.keyDown() - - def keyCancel(self): - if self.is_browser_opened: - fbClass.getInstance().lock() - eRCInput.getInstance().lock() - self.toggle_top() - - VBController.command("BROWSER_MENU_CLOSE") - return - self._cmd_Exit() - - def keyOK(self): - if not self.is_show_top: - self.keyMenu() - return - if not self.is_show_menu: - self.keyDown() - return - if self["menulist"].getCurrent()[1] is None: - self.do_command(self["menulist"].getCurrent()[0]) - return - self.keyRight() - - def keyLeft(self): - if self.idx_menu == 0: - self.idx_menu = 2 - else: - self.idx_menu = self.idx_menu - 1 - - if self.is_show_menu: - self["menulist"].pageUp() - self.keyUp() - self.keyDown() - self.set_menu_item() - - def keyRight(self): - if self.idx_menu == 2: - self.idx_menu = 0 - else: - self.idx_menu = self.idx_menu + 1 - - if self.is_show_menu: - self["menulist"].pageUp() - self.keyUp() - self.keyDown() - self.set_menu_item() - - def keyUp(self): - if self.is_show_menu and self["menulist"].getSelectedIndex() == 0: - self.toggle_menulist() - return - self["menulist"].up() - - def keyDown(self): - if not self.is_show_menu: - self["menulist"].setList(self.get_menulist_items(self.idx_menu)) - self["menulist"].resize(self.MENULIST_WIDTH, self.MENULIST_HEIGHT*len(self.get_menulist_items(self.idx_menu))+5) - self["menulist"].move(self.MENU_ITEM_WIDTH*self.idx_menu+50,self.MENU_ITEM_HEIGHT+30) - self.toggle_menulist() - return - self["menulist"].down() - - def keyMenu(self): - self.toggle_top() diff --git a/lib/python/Plugins/Extensions/Vbrowser/hbbtv.py b/lib/python/Plugins/Extensions/Vbrowser/hbbtv.py deleted file mode 100644 index 711c81c..0000000 --- a/lib/python/Plugins/Extensions/Vbrowser/hbbtv.py +++ /dev/null @@ -1,93 +0,0 @@ -from Screens.Screen import Screen - -from enigma import eTimer, fbClass, eRCInput - -import struct, vbcfg - -from __init__ import _ -from vbipc import VBController - -class HbbTVWindow(Screen): - skin = """ - - - """ - def __init__(self, session, url=None, app_info=None): - fbClass.getInstance().lock() - eRCInput.getInstance().lock() - - Screen.__init__(self, session) - - self._url = url - self._info = app_info - - self.onLayoutFinish.append(self.start_hbbtv_application) - - self._close_timer = eTimer() - self._close_timer.callback.append(self.stop_hbbtv_application) - - try: - if self._cb_set_title not in vbcfg.g_main.vbhandler.onSetTitleCB: - vbcfg.g_main.vbhandler.onSetTitleCB.append(self._cb_set_title) - except Exception: - pass - - try: - if self._cb_close_window not in vbcfg.g_main.vbhandler.onCloseCB: - vbcfg.g_main.vbhandler.onCloseCB.append(self._cb_close_window) - except Exception: - pass - - def _cb_set_title(self, title=None): - vbcfg.LOG("pate title: %s" % title) - if title is None: - return - self.setTitle(title) - - def _cb_close_window(self): - self._close_timer.start(1000) - - def start_hbbtv_application(self): - self.setTitle(_('HbbTV Plugin')) - vbcfg.LOG("Starting HbbTV") - - vbcfg.DEBUG("url : %s" % self._url and self._url) - vbcfg.DEBUG("info: %s" % self._info and self._info["url"]) - - if self._info and self._info["control"] == 1 and vbcfg.g_channel_info is not None: - (sid, onid, tsid, name) = vbcfg.g_channel_info - params = struct.pack('iiiiii', 0, self._info["orgid"], sid, onid, tsid, 0) - ret = VBController.command('HBBTV_LOADAIT', params) - else: - ret = VBController.command('HBBTV_OPENURL', self._url) - - if ret is False: - self._close_timer.start(1000) - vbcfg.ERR("Failed to start hbbtv") - - def stop_hbbtv_application(self): - self._close_timer.stop() - self._close_timer = None - - try: - if self._cb_set_title in vbcfg.g_main.vbhandler.onSetTitleCB: - vbcfg.g_main.vbhandler.onSetTitleCB.remove(self._cb_set_title) - except Exception: - pass - - try: - if self._cb_close_window in vbcfg.g_main.vbhandler.onCloseCB: - vbcfg.g_main.vbhandler.onCloseCB.remove(self._cb_close_window) - except Exception: - pass - - from enigma import getDesktop, gMainDC - desktop_size = getDesktop(0).size() - gMainDC.getInstance().setResolution(desktop_size.width(), desktop_size.height()) - - fbClass.getInstance().unlock() - eRCInput.getInstance().unlock() - - vbcfg.LOG("Stop HbbTV") - self.close() - diff --git a/lib/python/Plugins/Extensions/Vbrowser/keymap.xml b/lib/python/Plugins/Extensions/Vbrowser/keymap.xml deleted file mode 100644 index d0ef391..0000000 --- a/lib/python/Plugins/Extensions/Vbrowser/keymap.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/lib/python/Plugins/Extensions/Vbrowser/locale/Makefile.am b/lib/python/Plugins/Extensions/Vbrowser/locale/Makefile.am deleted file mode 100644 index 3e5f8b4..0000000 --- a/lib/python/Plugins/Extensions/Vbrowser/locale/Makefile.am +++ /dev/null @@ -1,28 +0,0 @@ -PLUGIN = Vbrowser -LANGS = en de it - -CATEGORY ?= "Extensions" - -plugindir = $(libdir)/enigma2/python/Plugins/$(CATEGORY)/$(PLUGIN) - -LANGMO = $(LANGS:=.mo) -LANGPO = $(LANGS:=.po) - -.po.mo: - $(MSGFMT) -o $@ $< - -BUILT_SOURCES = $(LANGMO) -CLEANFILES = $(LANGMO) $(PLUGIN)-py.pot $(PLUGIN)-xml.pot $(PLUGIN).pot - -dist-hook: $(LANGPO) - -install-data-local: $(LANGMO) - for lang in $(LANGS); do \ - $(mkinstalldirs) $(DESTDIR)$(plugindir)/locale/$$lang/LC_MESSAGES; \ - $(INSTALL_DATA) $$lang.mo $(DESTDIR)$(plugindir)/locale/$$lang/LC_MESSAGES/$(PLUGIN).mo; \ - done - -uninstall-local: - for lang in $(LANGS); do \ - $(RM) $(DESTDIR)$(plugindir)/locale/$$lang/LC_MESSAGES/$(PLUGIN).mo; \ - done diff --git a/lib/python/Plugins/Extensions/Vbrowser/locale/Vbrowser.pot b/lib/python/Plugins/Extensions/Vbrowser/locale/Vbrowser.pot deleted file mode 100644 index abb9598..0000000 --- a/lib/python/Plugins/Extensions/Vbrowser/locale/Vbrowser.pot +++ /dev/null @@ -1,459 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR ORGANIZATION -# FIRST AUTHOR , YEAR. -# -msgid "" -msgstr "" -"Project-Id-Version: Vbrowser\n" -"POT-Creation-Date: 2014-07-01 10:50+KST\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Generated-By: pygettext.py 1.5\n" - - -#: browser.py:151 browser.py:265 browser.py:404 youtube.py:133 -msgid "Cancel" -msgstr "" - -#: browser.py:152 browser.py:266 browser.py:405 youtube.py:134 -msgid "Save" -msgstr "" - -#: browser.py:153 -msgid " " -msgstr "" - -#: browser.py:173 -msgid "left" -msgstr "" - -#: browser.py:174 -msgid "width" -msgstr "" - -#: browser.py:175 -msgid "top" -msgstr "" - -#: browser.py:176 -msgid "height" -msgstr "" - -#: browser.py:228 -msgid "Really close without saving settings?" -msgstr "" - -#: browser.py:278 browser.py:911 browser.py:920 -msgid "Preference" -msgstr "" - -#: browser.py:291 -msgid "" -"Invalid URL!!(Empty)\n" -"Please, Input to the URL." -msgstr "" - -#: browser.py:312 browser.py:1036 -msgid "Please enter URL here" -msgstr "" - -#: browser.py:334 -msgid "Start Page" -msgstr "" - -#: browser.py:336 -msgid "Current Page" -msgstr "" - -#: browser.py:337 -msgid "Direct Input" -msgstr "" - -#: browser.py:339 -msgid "Startpage" -msgstr "" - -#: browser.py:354 -msgid "Keyboard Layout" -msgstr "" - -#: browser.py:419 browser.py:574 browser.py:911 browser.py:919 -msgid "Bookmark" -msgstr "" - -#: browser.py:424 browser.py:510 -msgid "Name" -msgstr "" - -#: browser.py:427 browser.py:517 -msgid "Title" -msgstr "" - -#: browser.py:429 browser.py:518 -msgid "Url" -msgstr "" - -#: browser.py:433 -msgid "" -"!!(Empty)\n" -"Please, Input to the" -msgstr "" - -#: browser.py:433 -msgid "Invalid " -msgstr "" - -#: browser.py:457 browser.py:468 browser.py:563 browser.py:651 browser.py:654 -msgid "Add" -msgstr "" - -#: browser.py:460 browser.py:464 -msgid "Category Name" -msgstr "" - -#: browser.py:473 browser.py:481 -msgid "Bookmark Title" -msgstr "" - -#: browser.py:476 browser.py:484 -msgid "Bookmark URL" -msgstr "" - -#: browser.py:562 browser.py:721 browser.py:910 browser.py:918 -msgid "Exit" -msgstr "" - -#: browser.py:564 browser.py:663 browser.py:664 -msgid "Edit" -msgstr "" - -#: browser.py:565 -msgid "Delete" -msgstr "" - -#: browser.py:566 -msgid "Set as Startpage" -msgstr "" - -#: browser.py:620 -msgid "Invalid URL. Please check again!!" -msgstr "" - -#: browser.py:628 -msgid "Do you want to set selected url to the Startpage?" -msgstr "" - -#: browser.py:643 -msgid "Current page is already exist." -msgstr "" - -#: browser.py:656 browser.py:657 -msgid "Direct Input(Bookmark)" -msgstr "" - -#: browser.py:656 browser.py:657 -msgid "Direct Input(Category)" -msgstr "" - -#: browser.py:657 -msgid "Currentpage(Bookmark)" -msgstr "" - -#: browser.py:658 -msgid "Please choose." -msgstr "" - -#: browser.py:675 -msgid "Do you want to delete the category and the bookmarks?" -msgstr "" - -#: browser.py:676 -msgid "Do you want to delete the bookmark?" -msgstr "" - -#: browser.py:685 -msgid "" -"Can't open selected bookmark.\n" -" - URL data is empty!!" -msgstr "" - -#: browser.py:722 -msgid "Global" -msgstr "" - -#: browser.py:723 -msgid "Mouse" -msgstr "" - -#: browser.py:724 -msgid "Keyboard" -msgstr "" - -#: browser.py:742 -msgid "Browser Help" -msgstr "" - -#: browser.py:752 -msgid "Exit the Browser." -msgstr "" - -#: browser.py:755 -msgid "Show the Menu window." -msgstr "" - -#: browser.py:758 browser.py:789 -msgid "Enter Key" -msgstr "" - -#: browser.py:759 -msgid "Show the Virtual keyboard window." -msgstr "" - -#: browser.py:760 -msgid "Backspace Key" -msgstr "" - -#: browser.py:763 -msgid "Switch to keyboard/mouse mode." -msgstr "" - -#: browser.py:768 -msgid "It will move the mouse pointer up." -msgstr "" - -#: browser.py:769 -msgid "It will move the mouse pointer down." -msgstr "" - -#: browser.py:770 -msgid "It will move the mouse pointer left." -msgstr "" - -#: browser.py:771 -msgid "It will move the mouse pointer right." -msgstr "" - -#: browser.py:774 -msgid "Left Mouse Button" -msgstr "" - -#: browser.py:777 -msgid "Right Mouse Button" -msgstr "" - -#: browser.py:778 browser.py:785 -msgid "Left Key" -msgstr "" - -#: browser.py:779 browser.py:786 -msgid "Right Key" -msgstr "" - -#: browser.py:783 -msgid "Up Key" -msgstr "" - -#: browser.py:784 -msgid "Down Key" -msgstr "" - -#: browser.py:792 -msgid "PageUp Key" -msgstr "" - -#: browser.py:793 -msgid "PageDown Key" -msgstr "" - -#: browser.py:794 -msgid "Go to previous page." -msgstr "" - -#: browser.py:795 -msgid "Go to next page." -msgstr "" - -#: browser.py:889 -msgid "File" -msgstr "" - -#: browser.py:890 -msgid "Tools" -msgstr "" - -#: browser.py:891 browser.py:912 browser.py:923 youtube.py:44 -msgid "Help" -msgstr "" - -#: browser.py:896 browser.py:1065 -msgid "Vuplus Web Browser Plugin v1.0" -msgstr "" - -#: browser.py:897 browser.py:997 -msgid "BrowserMain" -msgstr "" - -#: browser.py:910 browser.py:915 -msgid "Open Startpage" -msgstr "" - -#: browser.py:910 browser.py:916 -msgid "Open URL" -msgstr "" - -#: browser.py:910 browser.py:917 -msgid "Start/Stop" -msgstr "" - -#: browser.py:911 browser.py:921 -msgid "Position Setup" -msgstr "" - -#: browser.py:912 browser.py:922 -msgid "About" -msgstr "" - -#: browser.py:924 browser.py:1082 -msgid "Return" -msgstr "" - -#: browser.py:1010 browser.py:1018 browser.py:1033 -msgid "" -"Vuplus Browser was not running.\n" -"Please running browser using [File]>[Start/Stop] menu." -msgstr "" - -#: hbbtv.py:50 -msgid "HbbTV Plugin" -msgstr "" - -#: plugin.py:189 -msgid "" -"HbbTV Browser was not running.\n" -"Please running browser before start HbbTV Application." -msgstr "" - -#: plugin.py:218 -msgid "Stop" -msgstr "" - -#: plugin.py:220 youtube.py:43 -msgid "Start" -msgstr "" - -#: plugin.py:221 -msgid "Please choose one." -msgstr "" - -#: plugin.py:244 -msgid "No detected HbbTV applications." -msgstr "" - -#: plugin.py:245 -msgid "Please choose an HbbTV application." -msgstr "" - -#: plugin.py:344 plugin.py:365 -msgid "YouTube TV" -msgstr "" - -#: plugin.py:366 youtube.py:140 -msgid "YouTube TV Settings" -msgstr "" - -#: plugin.py:367 -msgid "Browser Start/Stop" -msgstr "" - -#: plugin.py:368 -msgid "HbbTV Applications" -msgstr "" - -#: plugin.py:369 -msgid "Vuplus Web Browser" -msgstr "" - -#: plugin.py:369 -msgid "start vuplus web browser" -msgstr "" - -#: youtube.py:53 -msgid "Start YouTube TV" -msgstr "" - -#: youtube.py:54 -msgid "YouTube TV is a new way to watch YouTube videos on Vu+" -msgstr "" - -#: youtube.py:55 -msgid "* Start YouTube TV" -msgstr "" - -#: youtube.py:56 -msgid "* RC Help" -msgstr "" - -#: youtube.py:61 -msgid "Play ther selected the video" -msgstr "" - -#: youtube.py:62 -msgid "Exit the YouTube TV" -msgstr "" - -#: youtube.py:65 -msgid "Move up" -msgstr "" - -#: youtube.py:66 -msgid "Move down" -msgstr "" - -#: youtube.py:67 -msgid "Move left" -msgstr "" - -#: youtube.py:68 -msgid "Move right" -msgstr "" - -#: youtube.py:71 -msgid "Search a video" -msgstr "" - -#: youtube.py:72 -msgid "Skip forward 10 sec" -msgstr "" - -#: youtube.py:73 -msgid "Skip backward 10 sec" -msgstr "" - -#: youtube.py:76 -msgid "Play current video" -msgstr "" - -#: youtube.py:77 -msgid "Pause current video" -msgstr "" - -#: youtube.py:78 -msgid "Stop current video" -msgstr "" - -#: youtube.py:81 -msgid "Back" -msgstr "" - -#: youtube.py:165 -msgid "YouTube TV URL" -msgstr "" - -#: youtube.py:166 -msgid "Do not show YouTube TV Starter again" -msgstr "" - diff --git a/lib/python/Plugins/Extensions/Vbrowser/locale/de.po b/lib/python/Plugins/Extensions/Vbrowser/locale/de.po deleted file mode 100644 index abb9598..0000000 --- a/lib/python/Plugins/Extensions/Vbrowser/locale/de.po +++ /dev/null @@ -1,459 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR ORGANIZATION -# FIRST AUTHOR , YEAR. -# -msgid "" -msgstr "" -"Project-Id-Version: Vbrowser\n" -"POT-Creation-Date: 2014-07-01 10:50+KST\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Generated-By: pygettext.py 1.5\n" - - -#: browser.py:151 browser.py:265 browser.py:404 youtube.py:133 -msgid "Cancel" -msgstr "" - -#: browser.py:152 browser.py:266 browser.py:405 youtube.py:134 -msgid "Save" -msgstr "" - -#: browser.py:153 -msgid " " -msgstr "" - -#: browser.py:173 -msgid "left" -msgstr "" - -#: browser.py:174 -msgid "width" -msgstr "" - -#: browser.py:175 -msgid "top" -msgstr "" - -#: browser.py:176 -msgid "height" -msgstr "" - -#: browser.py:228 -msgid "Really close without saving settings?" -msgstr "" - -#: browser.py:278 browser.py:911 browser.py:920 -msgid "Preference" -msgstr "" - -#: browser.py:291 -msgid "" -"Invalid URL!!(Empty)\n" -"Please, Input to the URL." -msgstr "" - -#: browser.py:312 browser.py:1036 -msgid "Please enter URL here" -msgstr "" - -#: browser.py:334 -msgid "Start Page" -msgstr "" - -#: browser.py:336 -msgid "Current Page" -msgstr "" - -#: browser.py:337 -msgid "Direct Input" -msgstr "" - -#: browser.py:339 -msgid "Startpage" -msgstr "" - -#: browser.py:354 -msgid "Keyboard Layout" -msgstr "" - -#: browser.py:419 browser.py:574 browser.py:911 browser.py:919 -msgid "Bookmark" -msgstr "" - -#: browser.py:424 browser.py:510 -msgid "Name" -msgstr "" - -#: browser.py:427 browser.py:517 -msgid "Title" -msgstr "" - -#: browser.py:429 browser.py:518 -msgid "Url" -msgstr "" - -#: browser.py:433 -msgid "" -"!!(Empty)\n" -"Please, Input to the" -msgstr "" - -#: browser.py:433 -msgid "Invalid " -msgstr "" - -#: browser.py:457 browser.py:468 browser.py:563 browser.py:651 browser.py:654 -msgid "Add" -msgstr "" - -#: browser.py:460 browser.py:464 -msgid "Category Name" -msgstr "" - -#: browser.py:473 browser.py:481 -msgid "Bookmark Title" -msgstr "" - -#: browser.py:476 browser.py:484 -msgid "Bookmark URL" -msgstr "" - -#: browser.py:562 browser.py:721 browser.py:910 browser.py:918 -msgid "Exit" -msgstr "" - -#: browser.py:564 browser.py:663 browser.py:664 -msgid "Edit" -msgstr "" - -#: browser.py:565 -msgid "Delete" -msgstr "" - -#: browser.py:566 -msgid "Set as Startpage" -msgstr "" - -#: browser.py:620 -msgid "Invalid URL. Please check again!!" -msgstr "" - -#: browser.py:628 -msgid "Do you want to set selected url to the Startpage?" -msgstr "" - -#: browser.py:643 -msgid "Current page is already exist." -msgstr "" - -#: browser.py:656 browser.py:657 -msgid "Direct Input(Bookmark)" -msgstr "" - -#: browser.py:656 browser.py:657 -msgid "Direct Input(Category)" -msgstr "" - -#: browser.py:657 -msgid "Currentpage(Bookmark)" -msgstr "" - -#: browser.py:658 -msgid "Please choose." -msgstr "" - -#: browser.py:675 -msgid "Do you want to delete the category and the bookmarks?" -msgstr "" - -#: browser.py:676 -msgid "Do you want to delete the bookmark?" -msgstr "" - -#: browser.py:685 -msgid "" -"Can't open selected bookmark.\n" -" - URL data is empty!!" -msgstr "" - -#: browser.py:722 -msgid "Global" -msgstr "" - -#: browser.py:723 -msgid "Mouse" -msgstr "" - -#: browser.py:724 -msgid "Keyboard" -msgstr "" - -#: browser.py:742 -msgid "Browser Help" -msgstr "" - -#: browser.py:752 -msgid "Exit the Browser." -msgstr "" - -#: browser.py:755 -msgid "Show the Menu window." -msgstr "" - -#: browser.py:758 browser.py:789 -msgid "Enter Key" -msgstr "" - -#: browser.py:759 -msgid "Show the Virtual keyboard window." -msgstr "" - -#: browser.py:760 -msgid "Backspace Key" -msgstr "" - -#: browser.py:763 -msgid "Switch to keyboard/mouse mode." -msgstr "" - -#: browser.py:768 -msgid "It will move the mouse pointer up." -msgstr "" - -#: browser.py:769 -msgid "It will move the mouse pointer down." -msgstr "" - -#: browser.py:770 -msgid "It will move the mouse pointer left." -msgstr "" - -#: browser.py:771 -msgid "It will move the mouse pointer right." -msgstr "" - -#: browser.py:774 -msgid "Left Mouse Button" -msgstr "" - -#: browser.py:777 -msgid "Right Mouse Button" -msgstr "" - -#: browser.py:778 browser.py:785 -msgid "Left Key" -msgstr "" - -#: browser.py:779 browser.py:786 -msgid "Right Key" -msgstr "" - -#: browser.py:783 -msgid "Up Key" -msgstr "" - -#: browser.py:784 -msgid "Down Key" -msgstr "" - -#: browser.py:792 -msgid "PageUp Key" -msgstr "" - -#: browser.py:793 -msgid "PageDown Key" -msgstr "" - -#: browser.py:794 -msgid "Go to previous page." -msgstr "" - -#: browser.py:795 -msgid "Go to next page." -msgstr "" - -#: browser.py:889 -msgid "File" -msgstr "" - -#: browser.py:890 -msgid "Tools" -msgstr "" - -#: browser.py:891 browser.py:912 browser.py:923 youtube.py:44 -msgid "Help" -msgstr "" - -#: browser.py:896 browser.py:1065 -msgid "Vuplus Web Browser Plugin v1.0" -msgstr "" - -#: browser.py:897 browser.py:997 -msgid "BrowserMain" -msgstr "" - -#: browser.py:910 browser.py:915 -msgid "Open Startpage" -msgstr "" - -#: browser.py:910 browser.py:916 -msgid "Open URL" -msgstr "" - -#: browser.py:910 browser.py:917 -msgid "Start/Stop" -msgstr "" - -#: browser.py:911 browser.py:921 -msgid "Position Setup" -msgstr "" - -#: browser.py:912 browser.py:922 -msgid "About" -msgstr "" - -#: browser.py:924 browser.py:1082 -msgid "Return" -msgstr "" - -#: browser.py:1010 browser.py:1018 browser.py:1033 -msgid "" -"Vuplus Browser was not running.\n" -"Please running browser using [File]>[Start/Stop] menu." -msgstr "" - -#: hbbtv.py:50 -msgid "HbbTV Plugin" -msgstr "" - -#: plugin.py:189 -msgid "" -"HbbTV Browser was not running.\n" -"Please running browser before start HbbTV Application." -msgstr "" - -#: plugin.py:218 -msgid "Stop" -msgstr "" - -#: plugin.py:220 youtube.py:43 -msgid "Start" -msgstr "" - -#: plugin.py:221 -msgid "Please choose one." -msgstr "" - -#: plugin.py:244 -msgid "No detected HbbTV applications." -msgstr "" - -#: plugin.py:245 -msgid "Please choose an HbbTV application." -msgstr "" - -#: plugin.py:344 plugin.py:365 -msgid "YouTube TV" -msgstr "" - -#: plugin.py:366 youtube.py:140 -msgid "YouTube TV Settings" -msgstr "" - -#: plugin.py:367 -msgid "Browser Start/Stop" -msgstr "" - -#: plugin.py:368 -msgid "HbbTV Applications" -msgstr "" - -#: plugin.py:369 -msgid "Vuplus Web Browser" -msgstr "" - -#: plugin.py:369 -msgid "start vuplus web browser" -msgstr "" - -#: youtube.py:53 -msgid "Start YouTube TV" -msgstr "" - -#: youtube.py:54 -msgid "YouTube TV is a new way to watch YouTube videos on Vu+" -msgstr "" - -#: youtube.py:55 -msgid "* Start YouTube TV" -msgstr "" - -#: youtube.py:56 -msgid "* RC Help" -msgstr "" - -#: youtube.py:61 -msgid "Play ther selected the video" -msgstr "" - -#: youtube.py:62 -msgid "Exit the YouTube TV" -msgstr "" - -#: youtube.py:65 -msgid "Move up" -msgstr "" - -#: youtube.py:66 -msgid "Move down" -msgstr "" - -#: youtube.py:67 -msgid "Move left" -msgstr "" - -#: youtube.py:68 -msgid "Move right" -msgstr "" - -#: youtube.py:71 -msgid "Search a video" -msgstr "" - -#: youtube.py:72 -msgid "Skip forward 10 sec" -msgstr "" - -#: youtube.py:73 -msgid "Skip backward 10 sec" -msgstr "" - -#: youtube.py:76 -msgid "Play current video" -msgstr "" - -#: youtube.py:77 -msgid "Pause current video" -msgstr "" - -#: youtube.py:78 -msgid "Stop current video" -msgstr "" - -#: youtube.py:81 -msgid "Back" -msgstr "" - -#: youtube.py:165 -msgid "YouTube TV URL" -msgstr "" - -#: youtube.py:166 -msgid "Do not show YouTube TV Starter again" -msgstr "" - diff --git a/lib/python/Plugins/Extensions/Vbrowser/locale/en.po b/lib/python/Plugins/Extensions/Vbrowser/locale/en.po deleted file mode 100644 index abb9598..0000000 --- a/lib/python/Plugins/Extensions/Vbrowser/locale/en.po +++ /dev/null @@ -1,459 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR ORGANIZATION -# FIRST AUTHOR , YEAR. -# -msgid "" -msgstr "" -"Project-Id-Version: Vbrowser\n" -"POT-Creation-Date: 2014-07-01 10:50+KST\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Generated-By: pygettext.py 1.5\n" - - -#: browser.py:151 browser.py:265 browser.py:404 youtube.py:133 -msgid "Cancel" -msgstr "" - -#: browser.py:152 browser.py:266 browser.py:405 youtube.py:134 -msgid "Save" -msgstr "" - -#: browser.py:153 -msgid " " -msgstr "" - -#: browser.py:173 -msgid "left" -msgstr "" - -#: browser.py:174 -msgid "width" -msgstr "" - -#: browser.py:175 -msgid "top" -msgstr "" - -#: browser.py:176 -msgid "height" -msgstr "" - -#: browser.py:228 -msgid "Really close without saving settings?" -msgstr "" - -#: browser.py:278 browser.py:911 browser.py:920 -msgid "Preference" -msgstr "" - -#: browser.py:291 -msgid "" -"Invalid URL!!(Empty)\n" -"Please, Input to the URL." -msgstr "" - -#: browser.py:312 browser.py:1036 -msgid "Please enter URL here" -msgstr "" - -#: browser.py:334 -msgid "Start Page" -msgstr "" - -#: browser.py:336 -msgid "Current Page" -msgstr "" - -#: browser.py:337 -msgid "Direct Input" -msgstr "" - -#: browser.py:339 -msgid "Startpage" -msgstr "" - -#: browser.py:354 -msgid "Keyboard Layout" -msgstr "" - -#: browser.py:419 browser.py:574 browser.py:911 browser.py:919 -msgid "Bookmark" -msgstr "" - -#: browser.py:424 browser.py:510 -msgid "Name" -msgstr "" - -#: browser.py:427 browser.py:517 -msgid "Title" -msgstr "" - -#: browser.py:429 browser.py:518 -msgid "Url" -msgstr "" - -#: browser.py:433 -msgid "" -"!!(Empty)\n" -"Please, Input to the" -msgstr "" - -#: browser.py:433 -msgid "Invalid " -msgstr "" - -#: browser.py:457 browser.py:468 browser.py:563 browser.py:651 browser.py:654 -msgid "Add" -msgstr "" - -#: browser.py:460 browser.py:464 -msgid "Category Name" -msgstr "" - -#: browser.py:473 browser.py:481 -msgid "Bookmark Title" -msgstr "" - -#: browser.py:476 browser.py:484 -msgid "Bookmark URL" -msgstr "" - -#: browser.py:562 browser.py:721 browser.py:910 browser.py:918 -msgid "Exit" -msgstr "" - -#: browser.py:564 browser.py:663 browser.py:664 -msgid "Edit" -msgstr "" - -#: browser.py:565 -msgid "Delete" -msgstr "" - -#: browser.py:566 -msgid "Set as Startpage" -msgstr "" - -#: browser.py:620 -msgid "Invalid URL. Please check again!!" -msgstr "" - -#: browser.py:628 -msgid "Do you want to set selected url to the Startpage?" -msgstr "" - -#: browser.py:643 -msgid "Current page is already exist." -msgstr "" - -#: browser.py:656 browser.py:657 -msgid "Direct Input(Bookmark)" -msgstr "" - -#: browser.py:656 browser.py:657 -msgid "Direct Input(Category)" -msgstr "" - -#: browser.py:657 -msgid "Currentpage(Bookmark)" -msgstr "" - -#: browser.py:658 -msgid "Please choose." -msgstr "" - -#: browser.py:675 -msgid "Do you want to delete the category and the bookmarks?" -msgstr "" - -#: browser.py:676 -msgid "Do you want to delete the bookmark?" -msgstr "" - -#: browser.py:685 -msgid "" -"Can't open selected bookmark.\n" -" - URL data is empty!!" -msgstr "" - -#: browser.py:722 -msgid "Global" -msgstr "" - -#: browser.py:723 -msgid "Mouse" -msgstr "" - -#: browser.py:724 -msgid "Keyboard" -msgstr "" - -#: browser.py:742 -msgid "Browser Help" -msgstr "" - -#: browser.py:752 -msgid "Exit the Browser." -msgstr "" - -#: browser.py:755 -msgid "Show the Menu window." -msgstr "" - -#: browser.py:758 browser.py:789 -msgid "Enter Key" -msgstr "" - -#: browser.py:759 -msgid "Show the Virtual keyboard window." -msgstr "" - -#: browser.py:760 -msgid "Backspace Key" -msgstr "" - -#: browser.py:763 -msgid "Switch to keyboard/mouse mode." -msgstr "" - -#: browser.py:768 -msgid "It will move the mouse pointer up." -msgstr "" - -#: browser.py:769 -msgid "It will move the mouse pointer down." -msgstr "" - -#: browser.py:770 -msgid "It will move the mouse pointer left." -msgstr "" - -#: browser.py:771 -msgid "It will move the mouse pointer right." -msgstr "" - -#: browser.py:774 -msgid "Left Mouse Button" -msgstr "" - -#: browser.py:777 -msgid "Right Mouse Button" -msgstr "" - -#: browser.py:778 browser.py:785 -msgid "Left Key" -msgstr "" - -#: browser.py:779 browser.py:786 -msgid "Right Key" -msgstr "" - -#: browser.py:783 -msgid "Up Key" -msgstr "" - -#: browser.py:784 -msgid "Down Key" -msgstr "" - -#: browser.py:792 -msgid "PageUp Key" -msgstr "" - -#: browser.py:793 -msgid "PageDown Key" -msgstr "" - -#: browser.py:794 -msgid "Go to previous page." -msgstr "" - -#: browser.py:795 -msgid "Go to next page." -msgstr "" - -#: browser.py:889 -msgid "File" -msgstr "" - -#: browser.py:890 -msgid "Tools" -msgstr "" - -#: browser.py:891 browser.py:912 browser.py:923 youtube.py:44 -msgid "Help" -msgstr "" - -#: browser.py:896 browser.py:1065 -msgid "Vuplus Web Browser Plugin v1.0" -msgstr "" - -#: browser.py:897 browser.py:997 -msgid "BrowserMain" -msgstr "" - -#: browser.py:910 browser.py:915 -msgid "Open Startpage" -msgstr "" - -#: browser.py:910 browser.py:916 -msgid "Open URL" -msgstr "" - -#: browser.py:910 browser.py:917 -msgid "Start/Stop" -msgstr "" - -#: browser.py:911 browser.py:921 -msgid "Position Setup" -msgstr "" - -#: browser.py:912 browser.py:922 -msgid "About" -msgstr "" - -#: browser.py:924 browser.py:1082 -msgid "Return" -msgstr "" - -#: browser.py:1010 browser.py:1018 browser.py:1033 -msgid "" -"Vuplus Browser was not running.\n" -"Please running browser using [File]>[Start/Stop] menu." -msgstr "" - -#: hbbtv.py:50 -msgid "HbbTV Plugin" -msgstr "" - -#: plugin.py:189 -msgid "" -"HbbTV Browser was not running.\n" -"Please running browser before start HbbTV Application." -msgstr "" - -#: plugin.py:218 -msgid "Stop" -msgstr "" - -#: plugin.py:220 youtube.py:43 -msgid "Start" -msgstr "" - -#: plugin.py:221 -msgid "Please choose one." -msgstr "" - -#: plugin.py:244 -msgid "No detected HbbTV applications." -msgstr "" - -#: plugin.py:245 -msgid "Please choose an HbbTV application." -msgstr "" - -#: plugin.py:344 plugin.py:365 -msgid "YouTube TV" -msgstr "" - -#: plugin.py:366 youtube.py:140 -msgid "YouTube TV Settings" -msgstr "" - -#: plugin.py:367 -msgid "Browser Start/Stop" -msgstr "" - -#: plugin.py:368 -msgid "HbbTV Applications" -msgstr "" - -#: plugin.py:369 -msgid "Vuplus Web Browser" -msgstr "" - -#: plugin.py:369 -msgid "start vuplus web browser" -msgstr "" - -#: youtube.py:53 -msgid "Start YouTube TV" -msgstr "" - -#: youtube.py:54 -msgid "YouTube TV is a new way to watch YouTube videos on Vu+" -msgstr "" - -#: youtube.py:55 -msgid "* Start YouTube TV" -msgstr "" - -#: youtube.py:56 -msgid "* RC Help" -msgstr "" - -#: youtube.py:61 -msgid "Play ther selected the video" -msgstr "" - -#: youtube.py:62 -msgid "Exit the YouTube TV" -msgstr "" - -#: youtube.py:65 -msgid "Move up" -msgstr "" - -#: youtube.py:66 -msgid "Move down" -msgstr "" - -#: youtube.py:67 -msgid "Move left" -msgstr "" - -#: youtube.py:68 -msgid "Move right" -msgstr "" - -#: youtube.py:71 -msgid "Search a video" -msgstr "" - -#: youtube.py:72 -msgid "Skip forward 10 sec" -msgstr "" - -#: youtube.py:73 -msgid "Skip backward 10 sec" -msgstr "" - -#: youtube.py:76 -msgid "Play current video" -msgstr "" - -#: youtube.py:77 -msgid "Pause current video" -msgstr "" - -#: youtube.py:78 -msgid "Stop current video" -msgstr "" - -#: youtube.py:81 -msgid "Back" -msgstr "" - -#: youtube.py:165 -msgid "YouTube TV URL" -msgstr "" - -#: youtube.py:166 -msgid "Do not show YouTube TV Starter again" -msgstr "" - diff --git a/lib/python/Plugins/Extensions/Vbrowser/locale/it.po b/lib/python/Plugins/Extensions/Vbrowser/locale/it.po deleted file mode 100644 index 132802f..0000000 --- a/lib/python/Plugins/Extensions/Vbrowser/locale/it.po +++ /dev/null @@ -1,469 +0,0 @@ -msgid "" -msgstr "" -"Project-Id-Version: \n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-02-08 11:00+0100\n" -"PO-Revision-Date: 2013-02-08 11:42+0100\n" -"Last-Translator: meo \n" -"Language-Team: Black Hole \n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Poedit-KeywordsList: _;gettext;gettext_noop\n" -"X-Poedit-Basepath: .\n" -"X-Poedit-Language: Italian\n" -"X-Poedit-SearchPath-0: .\n" - -#: browser.py:151 browser.py:265 browser.py:404 youtube.py:133 -msgid "Cancel" -msgstr "Annulla" - -#: browser.py:152 browser.py:266 browser.py:405 youtube.py:134 -msgid "Save" -msgstr "Salva" - -#: browser.py:153 -msgid " " -msgstr " " - -#: browser.py:173 -msgid "left" -msgstr "" - -#: browser.py:174 -msgid "width" -msgstr "" - -#: browser.py:175 -msgid "top" -msgstr "" - -#: browser.py:176 -msgid "height" -msgstr "" - -#: browser.py:228 -msgid "Really close without saving settings?" -msgstr "" - -#: browser.py:278 browser.py:911 browser.py:920 -msgid "Preference" -msgstr "Preferenze" - -#: browser.py:291 -msgid "" -"Invalid URL!!(Empty)\n" -"Please, Input to the URL." -msgstr "" -"Indirizzo non valido!!\n" -"Devi inserire un indirizzo (URL)." - -#: browser.py:312 browser.py:1036 -msgid "Please enter URL here" -msgstr "Inserisci indirizzo (url)." - -#: browser.py:334 -msgid "Start Page" -msgstr "Pagina iniziale" - -#: browser.py:336 -msgid "Current Page" -msgstr "Pagina corrente" - -#: browser.py:337 -msgid "Direct Input" -msgstr "Input diretto" - -#: browser.py:339 -msgid "Startpage" -msgstr "Pagina iniziale" - -#: browser.py:354 -msgid "Keyboard Layout" -msgstr "Layout tastiera." - -#: browser.py:419 browser.py:574 browser.py:911 browser.py:919 -msgid "Bookmark" -msgstr "Preferiti" - -#: browser.py:424 browser.py:510 -msgid "Name" -msgstr "Nome" - -#: browser.py:427 browser.py:517 -msgid "Title" -msgstr "Titolo" - -#: browser.py:429 browser.py:518 -msgid "Url" -msgstr "Url" - -#: browser.py:433 -msgid "" -"!!(Empty)\n" -"Please, Input to the" -msgstr "" -"!!(Vuoto)\n" -"Inserisici in" - -#: browser.py:433 -msgid "Invalid " -msgstr "Non valido" - -#: browser.py:457 browser.py:468 browser.py:563 browser.py:651 browser.py:654 -msgid "Add" -msgstr "Aggiungi" - -#: browser.py:460 browser.py:464 -msgid "Category Name" -msgstr "Nome Categoria" - -#: browser.py:473 browser.py:481 -msgid "Bookmark Title" -msgstr "Titolo bookmark" - -#: browser.py:476 browser.py:484 -msgid "Bookmark URL" -msgstr "Indirizzo Bookmark" - -#: browser.py:562 browser.py:721 browser.py:910 browser.py:918 -msgid "Exit" -msgstr "Esci" - -#: browser.py:564 browser.py:663 browser.py:664 -msgid "Edit" -msgstr "Modifica" - -#: browser.py:565 -msgid "Delete" -msgstr "Cancella" - -#: browser.py:566 -msgid "Set as Startpage" -msgstr "Configura come Home page" - -#: browser.py:620 -msgid "Invalid URL. Please check again!!" -msgstr "Indirizzo non valido, riprova." - -#: browser.py:628 -msgid "Do you want to set selected url to the Startpage?" -msgstr "Vuoi Configurare l'indirizzo selezionato come pagina iniziale?" - -#: browser.py:643 -msgid "Current page is already exist." -msgstr "La pagina corrente è già esistente." - -#: browser.py:656 browser.py:657 -msgid "Direct Input(Bookmark)" -msgstr "Inserimento diretto(Bookmark)" - -#: browser.py:656 browser.py:657 -msgid "Direct Input(Category)" -msgstr "Inserimento diretto(Categoria)" - -#: browser.py:657 -msgid "Currentpage(Bookmark)" -msgstr "Pagina corrente(Bookmark)" - -#: browser.py:658 -msgid "Please choose." -msgstr "Scegli." - -#: browser.py:675 -msgid "Do you want to delete the category and the bookmarks?" -msgstr "Vuoi davvero cancellare la categoria e i suoi preferiti ?" - -#: browser.py:676 -msgid "Do you want to delete the bookmark?" -msgstr "Vuoi davvero cancellare il Bookmark ?" - -#: browser.py:685 -msgid "" -"Can't open selected bookmark.\n" -" - URL data is empty!!" -msgstr "" -"Impossibile apreire il Bookmark selezionato.\n" -" - l'indirizzo URL è mancante!!" - -#: browser.py:722 -msgid "Global" -msgstr "Globale" - -#: browser.py:723 -msgid "Mouse" -msgstr "Mouse" - -#: browser.py:724 -msgid "Keyboard" -msgstr "Tastiera" - -#: browser.py:742 -msgid "Browser Help" -msgstr "Aiuto Browser" - -#: browser.py:752 -msgid "Exit the Browser." -msgstr "Esci da Browser" - -#: browser.py:755 -msgid "Show the Menu window." -msgstr "Mostra i Menu." - -#: browser.py:758 browser.py:789 -msgid "Enter Key" -msgstr "Tasto Invio" - -#: browser.py:759 -msgid "Show the Virtual keyboard window." -msgstr "Mostra la tastiera virtuale." - -#: browser.py:760 -msgid "Backspace Key" -msgstr "Tasto Backsapce" - -#: browser.py:763 -msgid "Switch to keyboard/mouse mode." -msgstr "Usa modalità tastiera/mouse." - -#: browser.py:768 -msgid "It will move the mouse pointer up." -msgstr "Muove il puntatore del mouse verso l'alto." - -#: browser.py:769 -msgid "It will move the mouse pointer down." -msgstr "Muove il puntatore del mouse verso il basso." - -#: browser.py:770 -msgid "It will move the mouse pointer left." -msgstr "Muove il puntatore del mouse a sinistra." - -#: browser.py:771 -msgid "It will move the mouse pointer right." -msgstr "Muove il puntatore del mouse a destra." - -#: browser.py:774 -msgid "Left Mouse Button" -msgstr "Bottone sinistro mouse" - -#: browser.py:777 -msgid "Right Mouse Button" -msgstr "Bottone destro mouse" - -#: browser.py:778 browser.py:785 -msgid "Left Key" -msgstr "Tasto freccia sinistra" - -#: browser.py:779 browser.py:786 -msgid "Right Key" -msgstr "Tasto freccia destra" - -#: browser.py:783 -msgid "Up Key" -msgstr "Tasto freccia alto" - -#: browser.py:784 -msgid "Down Key" -msgstr "Tasto freccia basso" - -#: browser.py:792 -msgid "PageUp Key" -msgstr "Tasto pagina precedente" - -#: browser.py:793 -msgid "PageDown Key" -msgstr "Tasto pagina successiva" - -#: browser.py:794 -msgid "Go to previous page." -msgstr "Vai alla pagina precedente." - -#: browser.py:795 -msgid "Go to next page." -msgstr "Vai alla pagina successiva." - -#: browser.py:889 -msgid "File" -msgstr "File" - -#: browser.py:890 -msgid "Tools" -msgstr "Strumenti" - -#: browser.py:891 browser.py:912 browser.py:923 youtube.py:44 -msgid "Help" -msgstr "Aiuto" - -#: browser.py:896 browser.py:1065 -msgid "Vuplus Web Browser Plugin v1.0" -msgstr "Plugin Vuplus Web Browser v1.0" - -#: browser.py:897 browser.py:997 -msgid "BrowserMain" -msgstr "Browser" - -#: browser.py:910 browser.py:915 -msgid "Open Startpage" -msgstr "Apri pagina iniziale" - -#: browser.py:910 browser.py:916 -msgid "Open URL" -msgstr "Apri Url" - -#: browser.py:910 browser.py:917 -msgid "Start/Stop" -msgstr "Avvia/Chiudi" - -#: browser.py:911 browser.py:921 -msgid "Position Setup" -msgstr "" - -#: browser.py:912 browser.py:922 -msgid "About" -msgstr "Informazioni" - -#: browser.py:924 browser.py:1082 -msgid "Return" -msgstr "Indietro" - -#: browser.py:1010 browser.py:1018 browser.py:1033 -msgid "" -"Vuplus Browser was not running.\n" -"Please running browser using [File]>[Start/Stop] menu." -msgstr "" -"Il Browser non è attivo.\n" -"Lancia il browser dal menu [File]>[Avvia/Chiudi]." - -#: hbbtv.py:50 -msgid "HbbTV Plugin" -msgstr "Plugin HbbTV" - -#: plugin.py:189 -msgid "" -"HbbTV Browser was not running.\n" -"Please running browser before start HbbTV Application." -msgstr "" -"Il Browser per HbbTV non è attivo.\n" -"Lancia il browser Opera prima di avviare l'applicazione HbbTV." - -#: plugin.py:218 -msgid "Stop" -msgstr "Chiudi" - -#: plugin.py:220 youtube.py:43 -msgid "Start" -msgstr "Avvia" - -#: plugin.py:221 -msgid "Please choose one." -msgstr "Seleziona" - -#: plugin.py:244 -msgid "No detected HbbTV applications." -msgstr "Nessuna applicazione HbbTV trovata." - -#: plugin.py:245 -msgid "Please choose an HbbTV application." -msgstr "Seleziona un'applicazione HbbTV." - -#: plugin.py:344 plugin.py:365 -msgid "YouTube TV" -msgstr "" - -#: plugin.py:366 youtube.py:140 -msgid "YouTube TV Settings" -msgstr "" - -#: plugin.py:367 -msgid "Browser Start/Stop" -msgstr "Avvia/Chiudi browser" - -#: plugin.py:368 -msgid "HbbTV Applications" -msgstr "Applicazioni HbbTV" - -#: plugin.py:369 -msgid "Vuplus Web Browser" -msgstr "Web Browser Vuplus" - -#: plugin.py:369 -msgid "start vuplus web browser" -msgstr "avvia il browser vuplus" - -#: youtube.py:53 -msgid "Start YouTube TV" -msgstr "" - -#: youtube.py:54 -msgid "YouTube TV is a new way to watch YouTube videos on Vu+" -msgstr "" - -#: youtube.py:55 -msgid "* Start YouTube TV" -msgstr "" - -#: youtube.py:56 -msgid "* RC Help" -msgstr "" - -#: youtube.py:61 -msgid "Play ther selected the video" -msgstr "" - -#: youtube.py:62 -msgid "Exit the YouTube TV" -msgstr "" - -#: youtube.py:65 -msgid "Move up" -msgstr "" - -#: youtube.py:66 -msgid "Move down" -msgstr "" - -#: youtube.py:67 -msgid "Move left" -msgstr "" - -#: youtube.py:68 -msgid "Move right" -msgstr "" - -#: youtube.py:71 -msgid "Search a video" -msgstr "" - -#: youtube.py:72 -msgid "Skip forward 10 sec" -msgstr "" - -#: youtube.py:73 -msgid "Skip backward 10 sec" -msgstr "" - -#: youtube.py:76 -msgid "Play current video" -msgstr "" - -#: youtube.py:77 -msgid "Pause current video" -msgstr "" - -#: youtube.py:78 -msgid "Stop current video" -msgstr "" - -#: youtube.py:81 -msgid "Back" -msgstr "" - -#: youtube.py:165 -msgid "YouTube TV URL" -msgstr "" - -#: youtube.py:166 -msgid "Do not show YouTube TV Starter again" -msgstr "" - diff --git a/lib/python/Plugins/Extensions/Vbrowser/meta/Makefile.am b/lib/python/Plugins/Extensions/Vbrowser/meta/Makefile.am deleted file mode 100644 index 7485330..0000000 --- a/lib/python/Plugins/Extensions/Vbrowser/meta/Makefile.am +++ /dev/null @@ -1,3 +0,0 @@ -installdir = $(datadir)/meta - -dist_install_DATA = plugin_vbrowser.xml diff --git a/lib/python/Plugins/Extensions/Vbrowser/meta/plugin_vbrowser.xml b/lib/python/Plugins/Extensions/Vbrowser/meta/plugin_vbrowser.xml deleted file mode 100644 index 8775b0c..0000000 --- a/lib/python/Plugins/Extensions/Vbrowser/meta/plugin_vbrowser.xml +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - smlee - Vbrowser - enigma2-plugin-extensions-vbrowser - this is hbbtv plugin - this is hbbtv plugin - - - - - - diff --git a/lib/python/Plugins/Extensions/Vbrowser/plugin.py b/lib/python/Plugins/Extensions/Vbrowser/plugin.py deleted file mode 100644 index c1cd05b..0000000 --- a/lib/python/Plugins/Extensions/Vbrowser/plugin.py +++ /dev/null @@ -1,396 +0,0 @@ -from Plugins.Plugin import PluginDescriptor -from Screens.Screen import Screen -from Screens.InfoBar import InfoBar -from Screens.ChoiceBox import ChoiceBox -from Screens.HelpMenu import HelpableScreen -from Screens.MessageBox import MessageBox -from Screens.VirtualKeyBoard import VirtualKeyBoard -from Components.config import config -from Components.ActionMap import ActionMap -from Components.Language import language -from Components.ServiceEventTracker import ServiceEventTracker - -from enigma import eTimer, fbClass, eRCInput, iServiceInformation, iPlayableService - -import os, struct, vbcfg - -from __init__ import _ -from hbbtv import HbbTVWindow -from browser import Browser -from youtube import YoutubeTVWindow, YoutubeTVSettings -from vbipc import VBController, VBServerThread, VBHandlers - -strIsEmpty = lambda x: x is None or len(x) == 0 - -vbcfg.SOCKETFILE = '/tmp/vbrowser.support' -vbcfg.CONTROLFILE = '/tmp/vbrowser.controller' -_OPCODE_LIST = [ - 'CONTROL_BACK', - 'CONTROL_FORWARD', - 'CONTROL_STOP', - 'CONTROL_RELOAD', - 'CONTROL_OPENURL', - 'CONTROL_EXIT', - 'CONTROL_TITLE', - 'CONTROL_OK', - 'CONTROL_OUT_OF_MEMORY', - 'HBBTV_LOADAIT', - 'HBBTV_OPENURL', - 'YOUTUBETV_OPENURL', - 'BROWSER_OPENURL', - 'BROWSER_MENU_OPEN', - 'BROWSER_MENU_CLOSE', - 'BROWSER_VKB_OPEN', - 'BROWSER_VKB_CLOSE', - 'OOIF_GET_CURRENT_CHANNEL', - 'OOIF_GET_VOLUME', - 'OOIF_BROADCAST_PLAY', - 'OOIF_BROADCAST_STOP', - 'OOIF_BROADCAST_CHECK', - 'OPCODE_END' - ] - -class VBHandler(VBHandlers): - def __init__(self, session): - self._session = session - self.current_title = None - self.videobackend_activate = False - self.onSetTitleCB = [] - self.onCloseCB = [] - VBHandlers.__init__(self, _OPCODE_LIST, '_CB_') - - def close_vkb(self, data=""): - fbClass.getInstance().lock() - eRCInput.getInstance().lock() - - if strIsEmpty(data): - data = "" - VBController.command("BROWSER_VKB_CLOSE", data) - - def _CB_CONTROL_EXIT(self, result, packet): - if self.onCloseCB: - for x in self.onCloseCB: - try: - x() - except Exception: - if x in self.onCloseCB: - self.onCloseCB.remove(x) - if self.videobackend_activate is False: - if vbcfg.g_service is not None: - self._session.nav.playService(vbcfg.g_service) - return (True, None) - - def _CB_CONTROL_TITLE(self, result, packet): - if packet.startswith('file://') or packet.startswith('http://'): - return (True, None) - for x in self.onSetTitleCB: - try: - x(packet) - self.current_title = packet - except Exception: - if x in self.onSetTitleCB: - self.onSetTitleCB.remove(x) - return (True, None) - - def _CB_CONTROL_OK(self, result, packet): - if vbcfg.g_browser and packet.startswith('stop'): - vbcfg.g_browser.keyOK() - return (True, None) - - def _CB_CONTROL_OUT_OF_MEMORY(self, result, packet): - vbcfg.need_restart = True; - return (True, None) - - def _CB_BROWSER_MENU_OPEN(self, result, packet): - if vbcfg.g_browser and vbcfg.g_browser.is_browser_opened: - vbcfg.setPosition(vbcfg.g_position) - fbClass.getInstance().unlock() - eRCInput.getInstance().unlock() - - vbcfg.g_browser.toggle_browser(packet, self.current_title) - return (True, None) - - def _CB_BROWSER_VKB_OPEN(self, result, packet): - if vbcfg.g_browser and vbcfg.g_browser.is_browser_opened: - vbcfg.setPosition(vbcfg.g_position) - fbClass.getInstance().unlock() - eRCInput.getInstance().unlock() - - if strIsEmpty(packet): - packet = "" - self._session.openWithCallback(self.close_vkb, VirtualKeyBoard, title=("Please enter URL here"), text=str(packet)) - return (True, None) - - def _CB_OOIF_GET_CURRENT_CHANNEL(self, result, packet): - if (vbcfg.g_channel_info): - try: - data = struct.pack('iiii', vbcfg.g_channel_info[1], vbcfg.g_channel_info[2], vbcfg.g_channel_info[0], len(vbcfg.g_channel_info[3])) + vbcfg.g_channel_info[3] - except Exception, err: - vbcfg.ERR(err) - return (False, None) - else: - return (False, None) - return (True, data) - - def _CB_OOIF_BROADCAST_PLAY(self, result, packet): - if vbcfg.g_service is not None: - self._session.nav.playService(vbcfg.g_service) - self.videobackend_activate = False - return (True, None) - - def _CB_OOIF_BROADCAST_STOP(self, result, packet): - vbcfg.g_service = self._session.nav.getCurrentlyPlayingServiceReference() - self._session.nav.stopService() - self.videobackend_activate = True - return (True, None) - - def _CB_OOIF_BROADCAST_CHECK(self, result, packet): - if self._session.nav.getCurrentService() is None: - return (False, None) - return (True, None) - -class VBMain(Screen): - skin = """""" - def __init__(self, session): - Screen.__init__(self, session) - - self.vbcallback = None - self.vbhandler = VBHandler(session) - self.vbserver = VBServerThread() - self.vbserver.open(1) - self.vbserver.start() - - # comment for dev - self.restart_vbrowser() - vbcfg.LOG("vbrowser start") - - self._timer_infobar = eTimer() - self._timer_infobar.callback.append(self._cb_register_infobar) - self._timer_infobar.start(1000) - - self._event = ServiceEventTracker(screen=self, eventmap={ - iPlayableService.evHBBTVInfo: self._cb_ait_detected, - iPlayableService.evUpdatedInfo: self._cb_info_updated - }) - self._applicationList = None - self._app_info = None - - try: - from Screens.InfoBarGenerics import gHbbtvApplication - self.m_vuplus = gHbbtvApplication.getUseAit() - except: - self.m_vuplus = False - - def _cb_register_infobar(self): - if InfoBar.instance: - self._timer_infobar.stop() - if self._cb_hbbtv_activated not in InfoBar.instance.onHBBTVActivation: - InfoBar.instance.onHBBTVActivation.append(self._cb_hbbtv_activated) - vbcfg.DEBUG("registred HbbTV in InfoBar") - - def _cb_hbbtv_activated(self, url=None, app_info=None): - if not self.check_vbrowser(): - message = _("HbbTV Browser was not running.\nPlease running browser before start HbbTV Application.") - self.session.open(MessageBox, message, MessageBox.TYPE_INFO) - return - self.start_hbbtv_application(url, app_info) - - def _cb_ait_detected(self): - vbcfg.g_channel_info = None - self._applicationList = None - self._app_info = self.get_autostart_application() - vbcfg.DEBUG("detected AIT") - - def _cb_info_updated(self): - vbcfg.g_service = self.session.nav.getCurrentlyPlayingServiceReference() - vbcfg.DEBUG("updated channel info") - - def start_hbbtv_application(self, url, app_info): - if vbcfg.need_restart: - self.restart_vbrowser() - os.time.sleep(2) - vbcfg.need_restart = False - - if not app_info: - app_info = self._app_info - self.session.open(HbbTVWindow, url, app_info) - - def menu_toggle_vbrowser(self, callback=None): - mode = [] - self.vbcallback = callback - if self.check_vbrowser(): - mode.append((_('Stop'), 'Stop')) - else: - mode.append((_('Start'), 'Start')) - self.session.openWithCallback(self.toggle_vbrowser, ChoiceBox, title=_("Please choose one."), list=mode) - - def toggle_vbrowser(self, selected): - if selected is not None: - if self.vbcallback: - self.vbcallback() - try: - mode = selected[1] - if mode == 'Start': - if not self.check_vbrowser(): - self.start_vbrowser() - elif mode == 'Stop': - self.stop_vbrowser() - - except Exception, ErrMsg: - vbcfg.ERR("toggle vbrowser: %s" % ErrMsg) - - def menu_hbbtv_applications(self): - applications = [] - if self._applicationList is not None: - for x in self._applicationList: - applications.append((x["name"], x)) - else: - applications.append((_("No detected HbbTV applications."), None)) - self.session.openWithCallback(self.start_application_selected, ChoiceBox, title=_("Please choose an HbbTV application."), list=applications) - - def start_application_selected(self, selected): - vbcfg.DEBUG(selected) - try: - if selected[1] is not None: - self._cb_hbbtv_activated(selected[1]["url"], selected[1]) - except Exception, ErrMsg: - vbcfg.ERR(ErrMsg) - - def get_autostart_application(self): - if self._applicationList is None: - service = self.session.nav.getCurrentService() - info = service and service.info() - if info is not None: - sid = info.getInfo(iServiceInformation.sSID) - onid = info.getInfo(iServiceInformation.sONID) - tsid = info.getInfo(iServiceInformation.sTSID) - name = info.getName() - vbcfg.g_channel_info = (sid, onid, tsid, name) - - pmtid = info.getInfo(iServiceInformation.sPMTPID) - demux = info.getInfoString(iServiceInformation.sLiveStreamDemuxId) - vbcfg.DEBUG("demux = %s, pmtid = 0x%x, sid = 0x%x" % (demux, pmtid, sid)) - - from aitreader import eAITSectionReader - reader = eAITSectionReader(demux, pmtid, sid) - if reader.doOpen(info, self.m_vuplus): - reader.doParseApplications() - reader.doDump() - else: - vbcfg.ERR("no AIT") - - try: - self._applicationList = reader.getApplicationList() - except: - pass - - if self._applicationList is not None: - for app in self._applicationList: - if app["control"] in (1, -1): - return app - return None - - def start_vbrowser(self): - if not self.check_vbrowser(): - os.system("%s/%s start"%(vbcfg.APPROOT, vbcfg.APP_RUN)) - return True - - def stop_vbrowser(self): - VBController.command('CONTROL_EXIT') - return True - try: - os.system("%s/%s stop"%(vbcfg.APPROOT, vbcfg.APP_RUN)) - except: - pass - return True - - def check_vbrowser(self): - try: - ret = os.popen('%s/%s check'%(vbcfg.APPROOT, vbcfg.APP_RUN)).read() - return ret.strip() != "0" - except Exception, ErrMsg: - vbcfg.ERR("check vbrowser running: %s" % ErrMsg) - return False - - def restart_vbrowser(self): - try: - os.system("%s/%s restart"%(vbcfg.APPROOT, vbcfg.APP_RUN)) - except: - pass - return True - -def HelpableScreen__init__(self): - if isinstance(self, HelpableScreen): - HelpableScreen.showManual = showManual - - self["helpActions"] = ActionMap(["HelpbuttonActions"], { - "help_b" : self.showHelp, - "help_l" : self.showManual, - }, -2) - -def showManual(self): - if not os.path.exists(vbcfg.MANUALROOT): - return - - url = 'file://' + vbcfg.MANUALROOT + '/main.html' - lang = language.getLanguage() - if os.path.exists(vbcfg.MANUALROOT + '/' + lang): - url = 'file://' + vbcfg.MANUALROOT + '/' + lang + '/main.html' - - vbcfg.g_browser = self.session.open(Browser, url) - -def auto_start_main(reason, **kwargs): - if reason: - try: - if vbcfg.g_main.vbserver is not None: - vbcfg.g_main.vbserver.kill() - except: pass - -def session_start_main(session, reason, **kwargs): - vbcfg.g_main = session.open(VBMain) - HelpableScreen.__init__ = HelpableScreen__init__ - HelpableScreen.session = session - -def start_youtubetv_main(session, **kwargs): - def _cb_youtubetv_close(ret): - if ret: - vbcfg.g_service = session.nav.getCurrentlyPlayingServiceReference() - if vbcfg.g_service is not None: - session.nav.stopService() - vbcfg.g_browser = session.open(Browser, vbcfg.g_youtubetv_cfg.uri.value, True) - - if config.plugins.youtubetv.showhelp.value == True: - _cb_youtubetv_close(True) - else: - session.openWithCallback(_cb_youtubetv_close, YoutubeTVWindow) - - -def menu_start_youtube(menuid, **kwargs): - if menuid == "mainmenu": - return [(_("YouTube TV"), start_youtubetv_main, "youtube_tv", 46)] - return [] - -def plugin_setting_youtube(session, **kwargs): - session.open(YoutubeTVSettings) - -def plugin_start_browser(session, **kwargs): - vbcfg.g_browser = session.open(Browser) - -def extension_toggle_browser(session, **kwargs): - if vbcfg.g_main is not None: - vbcfg.g_main.menu_toggle_vbrowser() - -def extension_start_application(session, **kwargs): - if vbcfg.g_main is not None: - vbcfg.g_main.menu_hbbtv_applications() - -def Plugins(**kwargs): - 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=_("YouTube TV"), where=PluginDescriptor.WHERE_MENU, fnc=menu_start_youtube)) - l.append(PluginDescriptor(name=_("YouTube TV Settings"), where=PluginDescriptor.WHERE_PLUGINMENU, fnc=plugin_setting_youtube)) - l.append(PluginDescriptor(name=_("Browser Start/Stop"), where=PluginDescriptor.WHERE_EXTENSIONSMENU, needsRestart=True, fnc=extension_toggle_browser)) - l.append(PluginDescriptor(name=_("HbbTV Applications"), where=PluginDescriptor.WHERE_EXTENSIONSMENU, needsRestart=True, fnc=extension_start_application)) - l.append(PluginDescriptor(name=_("Vuplus Web Browser"), description=_("start vuplus web browser"), where=PluginDescriptor.WHERE_PLUGINMENU, needsRestart=True, fnc=plugin_start_browser)) - return l diff --git a/lib/python/Plugins/Extensions/Vbrowser/vbcfg.py b/lib/python/Plugins/Extensions/Vbrowser/vbcfg.py deleted file mode 100644 index c840ede..0000000 --- a/lib/python/Plugins/Extensions/Vbrowser/vbcfg.py +++ /dev/null @@ -1,84 +0,0 @@ -from time import strftime, localtime -from Tools.Directories import fileExists - -g_main = None -g_browser = None -g_youtubetv_cfg = None -g_service = None -g_channel_info = None -g_position = None - -need_restart = False - -APPROOT = "/usr/local/vbrowser" -APP_RUN = "run.sh" - -PLUGINROOT = "/usr/lib/enigma2/python/Plugins/Extensions/Vbrowser" -MANUALROOT = "/usr/local/manual" - -SOCKETFILE = None -CONTROLFILE = None - -def getPosition(): - if fileExists("/proc/stb/fb/dst_left"): - try: - file = open("/proc/stb/fb/dst_left", "r") - dst_left = int(file.read().strip(), 16) - file.close() - file = open("/proc/stb/fb/dst_width", "r") - dst_width = int(file.read().strip(), 16) - file.close() - file = open("/proc/stb/fb/dst_top", "r") - dst_top = int(file.read().strip(), 16) - file.close() - file = open("/proc/stb/fb/dst_height", "r") - dst_height = int(file.read().strip(), 16) - file.close() - except Exception, Err: - ERR(Err) - return None - return (dst_left, dst_width, dst_top, dst_height) - -def setPosition(params): - if params is None: - return - if params[0] + params[1] > 720 or params[2] + params[3] > 576 : - return - else: - try: - file = open("/proc/stb/fb/dst_left", "w") - file.write('%X' % params[0]) - file.close() - file = open("/proc/stb/fb/dst_width", "w") - file.write('%X' % params[1]) - file.close() - file = open("/proc/stb/fb/dst_top", "w") - file.write('%X' % params[2]) - file.close() - file = open("/proc/stb/fb/dst_height", "w") - file.write('%X' % params[3]) - file.close() - except Exception, Err: - ERR(Err) - return - -# for debug True -g_debug = False - -def LogEntry(mode, string): - if g_debug: - print strftime("%x %X", localtime()), "%5s [%12s]" % (mode, "Plugin"), string - elif mode != "DEBUG": - print "[vbrowser]", string - -def DEBUG(string): - LogEntry("DEBUG", string) - -def LOG(string): - LogEntry("LOG", string) - -def WARN(string): - LogEntry("WARN", string) - -def ERR(string): - LogEntry("ERROR", string) diff --git a/lib/python/Plugins/Extensions/Vbrowser/vbipc.py b/lib/python/Plugins/Extensions/Vbrowser/vbipc.py deleted file mode 100644 index 2e0e454..0000000 --- a/lib/python/Plugins/Extensions/Vbrowser/vbipc.py +++ /dev/null @@ -1,153 +0,0 @@ -from enigma import fbClass, eRCInput -import os, threading, time, socket, select, struct -import vbcfg - -_OPCODE = {} -_BUFSIZE = 4096 - -def SetHandler(opcode, handler): - try: - _OPCODE[opcode][1] = handler - except: - vbcfg.ERR("Fail to set handler (unknown opcode): %s" % opcode) - return False - return True - -def GetHandler(opcode): - for key, value in _OPCODE.items(): - if value[0] == opcode: - vbcfg.DEBUG("recv socket: [%s]" % key) - return value[1] - return None - -def GetOpcode(opcode): - try: - return _OPCODE[opcode][0] - except: return -1; - -class VBController: - @staticmethod - def assamble(opcodestr, data): - opcode = _OPCODE[opcodestr][0] - header = struct.pack('i', opcode) - return header + data - - @staticmethod - def command(opcodestr, data = ""): - cmd_fd = None - vbcfg.DEBUG("send ipc: [%s]" % opcodestr) - try: - send_data = VBController.assamble(opcodestr, data) - if not os.path.exists(vbcfg.CONTROLFILE): - raise Exception("no found controller file.") - cmd_fd = os.open(vbcfg.CONTROLFILE, os.O_WRONLY) - if cmd_fd is None: - raise Exception("fail to open controller file.") - os.write(cmd_fd, send_data) - except Exception, err: - vbcfg.ERR("VBHController: %s" % err) - fbClass.getInstance().unlock() - eRCInput.getInstance().unlock() - return False - finally: - if cmd_fd is not None: - os.close(cmd_fd) - return True - -class VBServerThread(threading.Thread): - def __init__(self): - threading.Thread.__init__(self) - self.mSock = None - self.mFlag = False - self.mTimeout = 5 - - def open(self, timeout = 5): - addr = vbcfg.SOCKETFILE - self.mTimeout = timeout - - try: - os.unlink(addr) - except: - if os.path.exists(addr): - return False - try: - self.mSock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM) - self.mSock.settimeout(self.mTimeout) - self.mSock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) - self.mSock.bind(addr) - except: return False - return True - - def parse(self, data): - hlen = struct.calcsize('ibi') - packet = "" - opcode, result, length = struct.unpack('ibi', data[:hlen]) - #vbcfg.DEBUG("%s %s %d" % (opcode, result, length)) - if length > 0: - packet = data[hlen:hlen+length] - return [opcode, result, packet] - - def assamble(self, opcode, result, packet): - if packet is None: - packet = "" - header = struct.pack('ibi', opcode, (result and 1 or 0), len(packet)) - return header + packet - - def process(self, conn, addr): - read_data = conn.recv(_BUFSIZE) - request = self.parse(read_data) - opcode, result, read_packet = request[0], request[1], request[2] - result, send_packet = False,None - try: - result, send_packet = GetHandler(opcode)(result, read_packet) - except Exception, ErrMsg: - vbcfg.ERR(ErrMsg) - send_data = self.assamble(opcode, result, send_packet) - conn.sendall(send_data) - - def run(self): - if self.mSock is None: - raise - - self.mFlag = True - self.mSock.listen(1) - while self.mFlag: - readable, writable, errored = select.select([self.mSock], [], [], self.mTimeout) - for s in readable: - if s is self.mSock: - conn, addr = None, None - try: - conn, addr = self.mSock.accept() - self.process(conn, addr) - except Exception, err: - vbcfg.ERR("VBSServerThread: %s" % err) - finally: - if conn is not None: - conn.close() - - def kill(self): - self.mFlag = False - -class VBHandlers: - def __init__(self, opcode_list, szcbh): - opcode = 0 - for opcode_str in opcode_list: - if opcode_str is None and len(opcode_str) == 0: - continue - _OPCODE[opcode_str] = [opcode, None] - opcode = opcode + 1 - - registreted_idx = 0 - for fname in dir(self): - try: - if not fname.startswith(szcbh): - continue - fref = getattr(self, fname) - if fref is None: - continue - opcodestr = fname[len(szcbh):] - vbcfg.DEBUG("registrated at %s" % opcodestr) - SetHandler(opcodestr, fref) - registreted_idx += 1 - except: pass - vbcfg.DEBUG("%d registreated" % registreted_idx) diff --git a/lib/python/Plugins/Extensions/Vbrowser/youtube.py b/lib/python/Plugins/Extensions/Vbrowser/youtube.py deleted file mode 100644 index 23215dc..0000000 --- a/lib/python/Plugins/Extensions/Vbrowser/youtube.py +++ /dev/null @@ -1,172 +0,0 @@ -from Screens.Screen import Screen -from Screens.HelpMenu import HelpableScreen -from Components.ActionMap import ActionMap, HelpableActionMap -from Components.ConfigList import ConfigListScreen -from Components.Label import Label -from Components.Sources.StaticText import StaticText -from Components.config import config, ConfigSubsection, ConfigYesNo, ConfigText, getConfigListEntry - -import vbcfg - -from __init__ import _ - -config.plugins.youtubetv = ConfigSubsection() -config.plugins.youtubetv.showhelp = ConfigYesNo(default = False) -config.plugins.youtubetv.uri = ConfigText(default = "http://www.youtube.com/tv", visible_width = 50, fixed_size = False) -#config.plugins.youtubetv.uri = ConfigText(default = "http://tv-html.irt.de/", visible_width = 50, fixed_size = False) - -vbcfg.g_youtubetv_cfg = config.plugins.youtubetv - -class YoutubeTVWindow(Screen, HelpableScreen): - skin = """ - - - - - - - - - - """ - - def __init__(self, session): - Screen.__init__(self, session) - HelpableScreen.__init__(self) - - self["actions"] = ActionMap(["WizardActions", "DirectionActions", "OkCancelActions","ColorActions", "EPGSelectActions",], { - "cancel": self.keyCancel, - "red" : self.keyCancel, - "green" : self.keyGreen, - "yellow": self.keyYellow, - },-2) - - self["key_green"] = StaticText(_("Start")) - self["key_yellow"] = StaticText(_("Help")) - - self["infomation"] = Label() - self["startdesc"] = Label() - self["helpdesc"] = Label() - - self.onLayoutFinish.append(self.layoutFinished) - - def layoutFinished(self): - self.setTitle(_('Start YouTube TV')) - self["infomation"].setText(_("YouTube TV is a new way to watch YouTube videos on Vu+")) - self["startdesc" ].setText(_("* Start YouTube TV")) - self["helpdesc" ].setText(_("* RC Help")) - - def setHelpModeActions(self): - self.helpList = [] - self["OkCancelActions"] = HelpableActionMap(self, "OkCancelActions", { - "ok" : (self.keyPass, _("Play ther selected the video")), - "cancel": (self.keyPass, _("Exit the YouTube TV")), - }) - self["EventViewActions"] = HelpableActionMap(self, "EventViewActions", { - "pageUp" : (self.keyPass, _("Move up")), - "pageDown" : (self.keyPass, _("Move down")), - "prevEvent" : (self.keyPass, _("Move left")), - "nextEvent" : (self.keyPass, _("Move right")), - }) - self["EPGSelectActions"] = HelpableActionMap(self, "EPGSelectActions", { - "info" : (self.keyPass, _("Search a video")), - "nextService" : (self.keyPass, _("Skip forward 10 sec")), - "prevService" : (self.keyPass, _("Skip backward 10 sec")), - }) - self["MediaPlayerActions"] = HelpableActionMap(self, "MediaPlayerActions", { - "play" : (self.keyPass, _("Play current video")), - "pause" : (self.keyPass, _("Pause current video")), - "stop" : (self.keyPass, _("Stop current video")), - }) - self["ColorActions"] = HelpableActionMap(self, "ColorActions", { - "red" : (self.keyPass, _("Back")), - }) - self.showHelp() - - def keyPass(self): - pass - - def keyCancel(self): - config.plugins.youtubetv.showhelp.cancel() - self.close(False) - - def keyGreen(self): - config.plugins.youtubetv.showhelp.save() - config.plugins.youtubetv.save() - config.plugins.save() - vbcfg.g_youtubetv_cfg = config.plugins.youtubetv - self.close(True) - - def keyYellow(self): - self.setHelpModeActions() - - def keyBlue(self): - if config.plugins.youtubetv.showhelp.value == True : - config.plugins.youtubetv.showhelp.setValue(False) - else: config.plugins.youtubetv.showhelp.setValue(True) - -class YoutubeTVSettings(ConfigListScreen, Screen): - skin= """ - - - - - - - - - - """ - - def __init__(self, session): - self.session = session - self.menulist = [] - - Screen.__init__(self, session) - ConfigListScreen.__init__(self, self.menulist) - - self["actions"] = ActionMap(["OkCancelActions", "ColorActions",], { - "ok" : self.keyGreen, - "green" : self.keyGreen, - "red" : self.keyRed, - "cancel" : self.keyRed, - }, -2) - self["key_red"] = StaticText(_("Cancel")) - self["key_green"] = StaticText(_("Save")) - - self.makeConfigList() - self.onLayoutFinish.append(self.layoutFinished) - - def layoutFinished(self): - self.setTitle(_('YouTube TV Settings')) - - def keyGreen(self): - config.plugins.youtubetv.showhelp.save() - config.plugins.youtubetv.uri.save() - config.plugins.youtubetv.save() - config.plugins.save() - - vbcfg.g_youtubetv_cfg = config.plugins.youtubetv - self.close() - - def keyRed(self): - config.plugins.youtubetv.showhelp.cancel() - config.plugins.youtubetv.uri.cancel() - self.close() - - def keyLeft(self): - ConfigListScreen.keyLeft(self) - - def keyRight(self): - ConfigListScreen.keyRight(self) - - def makeConfigList(self): - self.menulist = [] - - entryUri = getConfigListEntry(_("YouTube TV URL"), config.plugins.youtubetv.uri) - entryShowHelp = getConfigListEntry(_("Do not show YouTube TV Starter again"), config.plugins.youtubetv.showhelp) - self.menulist.append(entryUri) - self.menulist.append(entryShowHelp) - self["config"].list = self.menulist - self["config"].l.setList(self.menulist) -