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
__init__.py \
aitreader.py \
bookmark.py \
- plugin.py
-
-
+ browser.py \
+ hbbtv.py \
+ plugin.py \
+ vbcfg.py \
+ vbipc.py \
+ youtube.py
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
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
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):
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):
if reader.doOpen():
reader.doParseApplications()
reader.doDump()
- else: print "no data!!"
+ else:
+ vbcfg.ERR("no data!!")
#unit_test('0', 0x17d4, 0x2b66)
+import vbcfg
+
class BookmarkData:
def __init__(self, _id, _title, _url, _parent, _type):
self.mId = _id
def _read(self):
if self.mDataValid:
return
- print "populate!!"
self.mConfig.read(self.mFileName)
self.mCategoryCurrentIdx = self.getNumber('__SYS__', 'category_current_idx')
self.mPopulateValid = False
def _del(self, _section, _option=None):
- #print _section, ' :', _option
if _option is None:
if not self.exist(_section):
return
try:
data = self.mConfig.get(_section, _option)
except Exception, e:
- #print e
+ vbcfg.ERR(e)
return _default
else : return data
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()
@staticmethod
def getInstance():
- return BookmarkManager('/usr/lib/enigma2/python/Plugins/Extensions/HbbTV/bookmark.ini')
+ return BookmarkManager(vbcfg.PLUGINROOT + "/bookmark.ini")
--- /dev/null
+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 = """
+ <screen position="0,0" size="%d,%d" title="Browser Position Setup" backgroundColor="#27d8dee2" >
+ <ePixmap pixmap="skin_default/buttons/red.png" position="%d,%d" size="140,40" alphatest="on" />
+ <ePixmap pixmap="skin_default/buttons/green.png" position="%d,%d" size="140,40" alphatest="on" />"
+
+ <widget source="key_red" render="Label" position="%d,%d" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#9f1313" foregroundColor="#ffffff" transparent="1" />
+ <widget source="key_green" render="Label" position="%d,%d" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#1f771f" foregroundColor="#ffffff" transparent="1" />
+
+ <widget name="config" zPosition="2" position="%d,%d" size="500,200" scrollbarMode="showOnDemand" foregroundColor="#1c1c1c" transparent="1" />
+ </screen>
+ """
+ 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 = """
+ <screen position="center,120" size="600,350" title="Preference">
+ <widget name="url" position="5,0" size="590,100" valign="center" font="Regular;20" />
+ <widget name="config" position="0,100" size="600,200" scrollbarMode="showOnDemand" />
+
+ <ePixmap pixmap="skin_default/buttons/red.png" position="310,310" size="140,40" alphatest="on" />
+ <ePixmap pixmap="skin_default/buttons/green.png" position="150,310" size="140,40" alphatest="on" />
+
+ <widget source="key_red" render="Label" position="310,310" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#9f1313" foregroundColor="#ffffff" transparent="1" />
+ <widget source="key_green" render="Label" position="150,310" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#1f771f" foregroundColor="#ffffff" transparent="1" />
+ </screen>
+ """
+ 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 = """
+ <screen position="center,center" size="600,140" title="Bookmark Edit">
+ <widget name="config" position="0,0" size="600,100" scrollbarMode="showOnDemand" />
+
+ <ePixmap pixmap="skin_default/buttons/red.png" position="310,100" size="140,40" alphatest="on" />
+ <ePixmap pixmap="skin_default/buttons/green.png" position="150,100" size="140,40" alphatest="on" />
+
+ <widget source="key_red" render="Label" position="310,100" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#9f1313" foregroundColor="#ffffff" transparent="1" />
+ <widget source="key_green" render="Label" position="150,100" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#1f771f" foregroundColor="#ffffff" transparent="1" />
+
+ <widget name="VKeyIcon" pixmap="skin_default/buttons/key_text.png" position="0,100" zPosition="10" size="35,25" transparent="1" alphatest="on" />
+
+ </screen>
+ """
+ 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 = """
+ <screen name="BrowserBookmarkWindow" position="center,120" size="600,400" title="Bookmark" >
+ <widget name="bookmarklist" position="0,0" size="600,200" zPosition="10" scrollbarMode="showOnDemand" />
+
+ <ePixmap pixmap="skin_default/buttons/key_0.png" position="556,330" size="35,30" alphatest="on" />
+ <widget source="key_0" render="Label" position="258,330" zPosition="1" size="300,30" font="Regular;20" halign="right" valign="center"/>
+
+ <ePixmap pixmap="skin_default/buttons/red.png" position="5,360" size="140,40" alphatest="on" />
+ <ePixmap pixmap="skin_default/buttons/green.png" position="155,360" size="140,40" alphatest="on" />
+ <ePixmap pixmap="skin_default/buttons/yellow.png" position="305,360" size="140,40" alphatest="on" />
+ <ePixmap pixmap="skin_default/buttons/blue.png" position="450,360" size="140,40" alphatest="on" />
+
+ <widget source="key_red" render="Label" position="5,360" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#9f1313" foregroundColor="#ffffff" transparent="1" />
+ <widget source="key_green" render="Label" position="155,360" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#1f771f" foregroundColor="#ffffff" transparent="1" />
+ <widget source="key_yellow" render="Label" position="305,360" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#a08500" foregroundColor="#ffffff" transparent="1" />
+ <widget source="key_blue" render="Label" position="450,360" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#18188b" foregroundColor="#ffffff" transparent="1" />
+ </screen>
+ """
+
+ 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 = """
+ <screen name="BrowserHelpWindow" position="center,center" size="600,40" title="Browser Help" >
+ <ePixmap pixmap="skin_default/buttons/red.png" position="5,0" size="140,40" alphatest="on" />
+ <ePixmap pixmap="skin_default/buttons/green.png" position="155,0" size="140,40" alphatest="on" />
+ <ePixmap pixmap="skin_default/buttons/yellow.png" position="305,0" size="140,40" alphatest="on" />
+ <ePixmap pixmap="skin_default/buttons/blue.png" position="450,0" size="140,40" alphatest="on" />
+
+ <widget source="key_red" render="Label" position="5,0" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#9f1313" foregroundColor="#ffffff" transparent="1" />
+ <widget source="key_green" render="Label" position="155,0" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#1f771f" foregroundColor="#ffffff" transparent="1" />
+ <widget source="key_yellow" render="Label" position="305,0" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#a08500" foregroundColor="#ffffff" transparent="1" />
+ <widget source="key_blue" render="Label" position="450,0" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#18188b" foregroundColor="#ffffff" transparent="1" />
+ </screen>
+ """
+ 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 = """
+ <screen name="OperaBrowser" position="0,0" size="%(width)d,%(height)d" backgroundColor="transparent" flags="wfNoBorder" title="Opera Browser">
+ <widget name="topArea" zPosition="-1" position="0,0" size="1280,60" font="Regular;20" valign="center" halign="center" backgroundColor="#000000" />
+ <widget name="menuitemFile" position="30,20" size="150,30" font="Regular;20" valign="center" halign="center" backgroundColor="#000000" foregroundColors="#9f1313,#a08500" />
+ <widget name="menuitemTool" position="180,20" size="150,30" font="Regular;20" valign="center" halign="center" backgroundColor="#000000" foregroundColors="#9f1313,#a08500" />
+ <widget name="menuitemHelp" position="330,20" size="150,30" font="Regular;20" valign="center" halign="center" backgroundColor="#000000" foregroundColors="#9f1313,#a08500" />
+ <widget name="menulist" position="50,60" size="200,150" backgroundColor="#000000" zPosition="10" scrollbarMode="showOnDemand" />
+ <widget name="submenulist" position="252,60" size="200,150" backgroundColor="#000000" zPosition="10" scrollbarMode="showOnDemand" />
+ <widget name="bottomArea" position="0,%(bottom_pos_y)d" size="%(bottom_size_x)d,80" font="Regular;20" valign="center" halign="center" backgroundColor="#000000" />
+ </screen>
+ """ % { '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()
--- /dev/null
+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 = """
+ <screen name="HbbTVWindow" position="0,0" size="1280,720" backgroundColor="transparent" flags="wfNoBorder" title="HbbTV Plugin">
+ </screen>
+ """
+ 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()
+
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 <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"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 ""
+
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
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 <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"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 ""
+
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 <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"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 ""
+
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR ORGANIZATION
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
msgid ""
msgstr ""
"Project-Id-Version: \n"
"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."
"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!!"
"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."
"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 ""
<default>
- <prerequisites>
- <tag type="Network" />
- </prerequisites>
- <info>
- <author>kos</author>
- <name>HbbTV</name>
- <packagename>enigma2-plugin-extensions-hbbtv</packagename>
- <shortdescription>this is hbbtv plugin</shortdescription>
- <description>this is hbbtv plugin</description>
- </info>
- <files type="package"> <!-- without version, without .ipk -->
+ <prerequisites>
+ <tag type="Network" />
+ </prerequisites>
+ <info>
+ <author>smlee</author>
+ <name>HbbTV</name>
+ <packagename>enigma2-plugin-extensions-hbbtv</packagename>
+ <shortdescription>this is hbbtv plugin</shortdescription>
+ <description>this is hbbtv plugin</description>
+ </info>
+ <files type="package"> <!-- without version, without .ipk -->
<file type="package" name="enigma2-plugin-extensions-hbbtv" />
- <file type="package" name="libgmp3" />
- <file type="package" name="libmpfr1" />
- <file type="package" name="tslib-conf" />
- <file type="package" name="libts-1.0-0" />
- <file type="package" name="libsysfs2" />
- <file type="package" name="directfb" />
- </files>
+ <file type="package" name="opera-hbbtv" />
+ </files>
</default>
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 = """
- <screen name="HbbTVWindow" position="0,0" size="1280,720" backgroundColor="transparent" flags="wfNoBorder" title="HbbTV Plugin">
- </screen>
- """
- 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 = """<screen name="HbbTVHelper" position="0,0" size="0,0" backgroundColor="transparent" flags="wfNoBorder" title=" "></screen>"""
+class VBMain(Screen):
+ skin = """<screen name="VBMAIN" position="0,0" size="0,0" backgroundColor="transparent" flags="wfNoBorder" title=" "></screen>"""
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 = """
- <screen position="center,120" size="600,350" title="Preference">
- <widget name="url" position="5,0" size="590,100" valign="center" font="Regular;20" />
- <widget name="config" position="0,100" size="600,200" scrollbarMode="showOnDemand" />
-
- <ePixmap pixmap="skin_default/buttons/red.png" position="310,310" size="140,40" alphatest="on" />
- <ePixmap pixmap="skin_default/buttons/green.png" position="150,310" size="140,40" alphatest="on" />
-
- <widget source="key_red" render="Label" position="310,310" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#9f1313" foregroundColor="#ffffff" transparent="1" />
- <widget source="key_green" render="Label" position="150,310" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#1f771f" foregroundColor="#ffffff" transparent="1" />
- </screen>
- """
- 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 = """
- <screen position="center,center" size="600,140" title="Bookmark Edit">
- <widget name="config" position="0,0" size="600,100" scrollbarMode="showOnDemand" />
-
- <ePixmap pixmap="skin_default/buttons/red.png" position="310,100" size="140,40" alphatest="on" />
- <ePixmap pixmap="skin_default/buttons/green.png" position="150,100" size="140,40" alphatest="on" />
-
- <widget source="key_red" render="Label" position="310,100" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#9f1313" foregroundColor="#ffffff" transparent="1" />
- <widget source="key_green" render="Label" position="150,100" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#1f771f" foregroundColor="#ffffff" transparent="1" />
-
- <widget name="VKeyIcon" pixmap="skin_default/buttons/key_text.png" position="0,100" zPosition="10" size="35,25" transparent="1" alphatest="on" />
-
- </screen>
- """
- 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 = """
- <screen name="HbbTVBrowserBookmarkWindow" position="center,120" size="600,400" title="Bookmark" >
- <widget name="bookmarklist" position="0,0" size="600,200" zPosition="10" scrollbarMode="showOnDemand" />
-
- <ePixmap pixmap="skin_default/buttons/key_0.png" position="556,330" size="35,30" alphatest="on" />
- <widget source="key_0" render="Label" position="258,330" zPosition="1" size="300,30" font="Regular;20" halign="right" valign="center"/>
-
- <ePixmap pixmap="skin_default/buttons/red.png" position="5,360" size="140,40" alphatest="on" />
- <ePixmap pixmap="skin_default/buttons/green.png" position="155,360" size="140,40" alphatest="on" />
- <ePixmap pixmap="skin_default/buttons/yellow.png" position="305,360" size="140,40" alphatest="on" />
- <ePixmap pixmap="skin_default/buttons/blue.png" position="450,360" size="140,40" alphatest="on" />
-
- <widget source="key_red" render="Label" position="5,360" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#9f1313" foregroundColor="#ffffff" transparent="1" />
- <widget source="key_green" render="Label" position="155,360" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#1f771f" foregroundColor="#ffffff" transparent="1" />
- <widget source="key_yellow" render="Label" position="305,360" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#a08500" foregroundColor="#ffffff" transparent="1" />
- <widget source="key_blue" render="Label" position="450,360" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#18188b" foregroundColor="#ffffff" transparent="1" />
- </screen>
- """
-
- 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 = """
- <screen name="BrowserHelpWindow" position="center,center" size="600,40" title="Browser Help" >
- <ePixmap pixmap="skin_default/buttons/red.png" position="5,0" size="140,40" alphatest="on" />
- <ePixmap pixmap="skin_default/buttons/green.png" position="155,0" size="140,40" alphatest="on" />
- <ePixmap pixmap="skin_default/buttons/yellow.png" position="305,0" size="140,40" alphatest="on" />
- <ePixmap pixmap="skin_default/buttons/blue.png" position="450,0" size="140,40" alphatest="on" />
-
- <widget source="key_red" render="Label" position="5,0" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#9f1313" foregroundColor="#ffffff" transparent="1" />
- <widget source="key_green" render="Label" position="155,0" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#1f771f" foregroundColor="#ffffff" transparent="1" />
- <widget source="key_yellow" render="Label" position="305,0" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#a08500" foregroundColor="#ffffff" transparent="1" />
- <widget source="key_blue" render="Label" position="450,0" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#18188b" foregroundColor="#ffffff" transparent="1" />
- </screen>
- """
- 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 = """
- <screen name="OperaBrowser" position="0,0" size="%(width)d,%(height)d" backgroundColor="transparent" flags="wfNoBorder" title="Opera Browser">
- <widget name="topArea" zPosition="-1" position="0,0" size="1280,60" font="Regular;20" valign="center" halign="center" backgroundColor="#000000" />
- <widget name="menuitemFile" position="30,20" size="150,30" font="Regular;20" valign="center" halign="center" backgroundColor="#000000" foregroundColors="#9f1313,#a08500" />
- <widget name="menuitemTool" position="180,20" size="150,30" font="Regular;20" valign="center" halign="center" backgroundColor="#000000" foregroundColors="#9f1313,#a08500" />
- <widget name="menuitemHelp" position="330,20" size="150,30" font="Regular;20" valign="center" halign="center" backgroundColor="#000000" foregroundColors="#9f1313,#a08500" />
- <widget name="menulist" position="50,60" size="200,150" backgroundColor="#000000" zPosition="10" scrollbarMode="showOnDemand" />
- <widget name="submenulist" position="252,60" size="200,150" backgroundColor="#000000" zPosition="10" scrollbarMode="showOnDemand" />
- <widget name="bottomArea" position="0,%(bottom_pos_y)d" size="%(bottom_size_x)d,80" font="Regular;20" valign="center" halign="center" backgroundColor="#000000" />
- </screen>
- """ % { '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 = """
- <screen name="YoutubeTVWindow" position="center,center" size="550,160" title="Start YouTube TV" >
- <widget name="infomation" position="5,0" size="540,80" valign="center" halign="center" font="Regular;20" />
- <widget name="startdesc" position="10,80" size="395,40" valign="center" font="Regular;20" />
- <widget name="helpdesc" position="10,120" size="395,40" valign="center" font="Regular;20" />
- <ePixmap pixmap="skin_default/buttons/green.png" position="400,80" size="140,40" alphatest="on" />
- <ePixmap pixmap="skin_default/buttons/yellow.png" position="400,120" size="140,40" alphatest="on" />
- <widget source="key_green" render="Label" position="400,80" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#1f771f" foregroundColor="#ffffff" transparent="1" />
- <widget source="key_yellow" render="Label" position="400,120" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#a08500" foregroundColor="#ffffff" transparent="1" />
- </screen>
- """
- 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= """
- <screen position="center,center" size="600,140" title="YouTube TV Settings">
- <widget name="config" position="0,0" size="600,100" scrollbarMode="showOnDemand" />
-
- <ePixmap pixmap="skin_default/buttons/red.png" position="310,100" size="140,40" alphatest="on" />
- <ePixmap pixmap="skin_default/buttons/green.png" position="150,100" size="140,40" alphatest="on" />
-
- <widget source="key_red" render="Label" position="310,100" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#9f1313" foregroundColor="#ffffff" transparent="1" />
- <widget source="key_green" render="Label" position="150,100" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#1f771f" foregroundColor="#ffffff" transparent="1" />
- </screen>
- """
- 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
-
--- /dev/null
+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)
--- /dev/null
+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)
--- /dev/null
+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 = """
+ <screen name="YoutubeTVWindow" position="center,center" size="550,160" title="Start YouTube TV" >
+ <widget name="infomation" position="5,0" size="540,80" valign="center" halign="center" font="Regular;20" />
+ <widget name="startdesc" position="10,80" size="395,40" valign="center" font="Regular;20" />
+ <widget name="helpdesc" position="10,120" size="395,40" valign="center" font="Regular;20" />
+ <ePixmap pixmap="skin_default/buttons/green.png" position="400,80" size="140,40" alphatest="on" />
+ <ePixmap pixmap="skin_default/buttons/yellow.png" position="400,120" size="140,40" alphatest="on" />
+ <widget source="key_green" render="Label" position="400,80" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#1f771f" foregroundColor="#ffffff" transparent="1" />
+ <widget source="key_yellow" render="Label" position="400,120" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#a08500" foregroundColor="#ffffff" transparent="1" />
+ </screen>
+ """
+
+ 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= """
+ <screen position="center,center" size="600,140" title="YouTube TV Settings">
+ <widget name="config" position="0,0" size="600,100" scrollbarMode="showOnDemand" />
+
+ <ePixmap pixmap="skin_default/buttons/red.png" position="310,100" size="140,40" alphatest="on" />
+ <ePixmap pixmap="skin_default/buttons/green.png" position="150,100" size="140,40" alphatest="on" />
+
+ <widget source="key_red" render="Label" position="310,100" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#9f1313" foregroundColor="#ffffff" transparent="1" />
+ <widget source="key_green" render="Label" position="150,100" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#1f771f" foregroundColor="#ffffff" transparent="1" />
+ </screen>
+ """
+
+ 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)
+
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
+++ /dev/null
-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
+++ /dev/null
-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)
+++ /dev/null
-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)
-
+++ /dev/null
-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")
-
-
+++ /dev/null
-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 = """
- <screen position="0,0" size="%d,%d" title="Browser Position Setup" backgroundColor="#27d8dee2" >
- <ePixmap pixmap="skin_default/buttons/red.png" position="%d,%d" size="140,40" alphatest="on" />
- <ePixmap pixmap="skin_default/buttons/green.png" position="%d,%d" size="140,40" alphatest="on" />"
-
- <widget source="key_red" render="Label" position="%d,%d" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#9f1313" foregroundColor="#ffffff" transparent="1" />
- <widget source="key_green" render="Label" position="%d,%d" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#1f771f" foregroundColor="#ffffff" transparent="1" />
-
- <widget name="config" zPosition="2" position="%d,%d" size="500,200" scrollbarMode="showOnDemand" foregroundColor="#1c1c1c" transparent="1" />
- </screen>
- """
- 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 = """
- <screen position="center,120" size="600,350" title="Preference">
- <widget name="url" position="5,0" size="590,100" valign="center" font="Regular;20" />
- <widget name="config" position="0,100" size="600,200" scrollbarMode="showOnDemand" />
-
- <ePixmap pixmap="skin_default/buttons/red.png" position="310,310" size="140,40" alphatest="on" />
- <ePixmap pixmap="skin_default/buttons/green.png" position="150,310" size="140,40" alphatest="on" />
-
- <widget source="key_red" render="Label" position="310,310" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#9f1313" foregroundColor="#ffffff" transparent="1" />
- <widget source="key_green" render="Label" position="150,310" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#1f771f" foregroundColor="#ffffff" transparent="1" />
- </screen>
- """
- 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 = """
- <screen position="center,center" size="600,140" title="Bookmark Edit">
- <widget name="config" position="0,0" size="600,100" scrollbarMode="showOnDemand" />
-
- <ePixmap pixmap="skin_default/buttons/red.png" position="310,100" size="140,40" alphatest="on" />
- <ePixmap pixmap="skin_default/buttons/green.png" position="150,100" size="140,40" alphatest="on" />
-
- <widget source="key_red" render="Label" position="310,100" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#9f1313" foregroundColor="#ffffff" transparent="1" />
- <widget source="key_green" render="Label" position="150,100" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#1f771f" foregroundColor="#ffffff" transparent="1" />
-
- <widget name="VKeyIcon" pixmap="skin_default/buttons/key_text.png" position="0,100" zPosition="10" size="35,25" transparent="1" alphatest="on" />
-
- </screen>
- """
- 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 = """
- <screen name="BrowserBookmarkWindow" position="center,120" size="600,400" title="Bookmark" >
- <widget name="bookmarklist" position="0,0" size="600,200" zPosition="10" scrollbarMode="showOnDemand" />
-
- <ePixmap pixmap="skin_default/buttons/key_0.png" position="556,330" size="35,30" alphatest="on" />
- <widget source="key_0" render="Label" position="258,330" zPosition="1" size="300,30" font="Regular;20" halign="right" valign="center"/>
-
- <ePixmap pixmap="skin_default/buttons/red.png" position="5,360" size="140,40" alphatest="on" />
- <ePixmap pixmap="skin_default/buttons/green.png" position="155,360" size="140,40" alphatest="on" />
- <ePixmap pixmap="skin_default/buttons/yellow.png" position="305,360" size="140,40" alphatest="on" />
- <ePixmap pixmap="skin_default/buttons/blue.png" position="450,360" size="140,40" alphatest="on" />
-
- <widget source="key_red" render="Label" position="5,360" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#9f1313" foregroundColor="#ffffff" transparent="1" />
- <widget source="key_green" render="Label" position="155,360" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#1f771f" foregroundColor="#ffffff" transparent="1" />
- <widget source="key_yellow" render="Label" position="305,360" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#a08500" foregroundColor="#ffffff" transparent="1" />
- <widget source="key_blue" render="Label" position="450,360" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#18188b" foregroundColor="#ffffff" transparent="1" />
- </screen>
- """
-
- 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 = """
- <screen name="BrowserHelpWindow" position="center,center" size="600,40" title="Browser Help" >
- <ePixmap pixmap="skin_default/buttons/red.png" position="5,0" size="140,40" alphatest="on" />
- <ePixmap pixmap="skin_default/buttons/green.png" position="155,0" size="140,40" alphatest="on" />
- <ePixmap pixmap="skin_default/buttons/yellow.png" position="305,0" size="140,40" alphatest="on" />
- <ePixmap pixmap="skin_default/buttons/blue.png" position="450,0" size="140,40" alphatest="on" />
-
- <widget source="key_red" render="Label" position="5,0" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#9f1313" foregroundColor="#ffffff" transparent="1" />
- <widget source="key_green" render="Label" position="155,0" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#1f771f" foregroundColor="#ffffff" transparent="1" />
- <widget source="key_yellow" render="Label" position="305,0" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#a08500" foregroundColor="#ffffff" transparent="1" />
- <widget source="key_blue" render="Label" position="450,0" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#18188b" foregroundColor="#ffffff" transparent="1" />
- </screen>
- """
- 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 = """
- <screen name="VuplusBrowser" position="0,0" size="%(width)d,%(height)d" backgroundColor="transparent" flags="wfNoBorder" title="Vuplus Browser">
- <widget name="topArea" zPosition="-1" position="0,0" size="1280,60" font="Regular;20" valign="center" halign="center" backgroundColor="#000000" />
- <widget name="menuitemFile" position="30,20" size="150,30" font="Regular;20" valign="center" halign="center" backgroundColor="#000000" foregroundColors="#9f1313,#a08500" />
- <widget name="menuitemTool" position="180,20" size="150,30" font="Regular;20" valign="center" halign="center" backgroundColor="#000000" foregroundColors="#9f1313,#a08500" />
- <widget name="menuitemHelp" position="330,20" size="150,30" font="Regular;20" valign="center" halign="center" backgroundColor="#000000" foregroundColors="#9f1313,#a08500" />
- <widget name="menulist" position="50,60" size="200,150" backgroundColor="#000000" zPosition="10" scrollbarMode="showOnDemand" />
- <widget name="submenulist" position="252,60" size="200,150" backgroundColor="#000000" zPosition="10" scrollbarMode="showOnDemand" />
- <widget name="bottomArea" position="0,%(bottom_pos_y)d" size="%(bottom_size_x)d,80" font="Regular;20" valign="center" halign="center" backgroundColor="#000000" />
- </screen>
- """ % { '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()
+++ /dev/null
-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 = """
- <screen name="HbbTVWindow" position="0,0" size="1280,720" backgroundColor="transparent" flags="wfNoBorder" title="HbbTV Plugin">
- </screen>
- """
- 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()
-
+++ /dev/null
-<keymap>
- <map context="HelpbuttonActions">
- <key id="KEY_HELP" mapto="help_b" flags="b" />
- <key id="KEY_HELP" mapto="help_l" flags="l" />
- </map>
-</keymap>
+++ /dev/null
-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
+++ /dev/null
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR ORGANIZATION
-# FIRST AUTHOR <EMAIL@ADDRESS>, 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 <EMAIL@ADDRESS>\n"
-"Language-Team: LANGUAGE <LL@li.org>\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 ""
-
+++ /dev/null
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR ORGANIZATION
-# FIRST AUTHOR <EMAIL@ADDRESS>, 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 <EMAIL@ADDRESS>\n"
-"Language-Team: LANGUAGE <LL@li.org>\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 ""
-
+++ /dev/null
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR ORGANIZATION
-# FIRST AUTHOR <EMAIL@ADDRESS>, 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 <EMAIL@ADDRESS>\n"
-"Language-Team: LANGUAGE <LL@li.org>\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 ""
-
+++ /dev/null
-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 <lupomeo@hotmail.com>\n"
-"Language-Team: Black Hole <www.vuplus-community.net>\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 ""
-
+++ /dev/null
-installdir = $(datadir)/meta
-
-dist_install_DATA = plugin_vbrowser.xml
+++ /dev/null
-<default>
- <prerequisites>
- <tag type="Network" />
- </prerequisites>
- <info>
- <author>smlee</author>
- <name>Vbrowser</name>
- <packagename>enigma2-plugin-extensions-vbrowser</packagename>
- <shortdescription>this is hbbtv plugin</shortdescription>
- <description>this is hbbtv plugin</description>
- </info>
- <files type="package"> <!-- without version, without .ipk -->
- <file type="package" name="enigma2-plugin-extensions-vbrowser" />
- <file type="package" name="vbrowser" />
- </files>
-</default>
+++ /dev/null
-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 = """<screen name="VBMAIN" position="0,0" size="0,0" backgroundColor="transparent" flags="wfNoBorder" title=" "></screen>"""
- 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
+++ /dev/null
-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)
+++ /dev/null
-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)
+++ /dev/null
-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 = """
- <screen name="YoutubeTVWindow" position="center,center" size="550,160" title="Start YouTube TV" >
- <widget name="infomation" position="5,0" size="540,80" valign="center" halign="center" font="Regular;20" />
- <widget name="startdesc" position="10,80" size="395,40" valign="center" font="Regular;20" />
- <widget name="helpdesc" position="10,120" size="395,40" valign="center" font="Regular;20" />
- <ePixmap pixmap="skin_default/buttons/green.png" position="400,80" size="140,40" alphatest="on" />
- <ePixmap pixmap="skin_default/buttons/yellow.png" position="400,120" size="140,40" alphatest="on" />
- <widget source="key_green" render="Label" position="400,80" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#1f771f" foregroundColor="#ffffff" transparent="1" />
- <widget source="key_yellow" render="Label" position="400,120" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#a08500" foregroundColor="#ffffff" transparent="1" />
- </screen>
- """
-
- 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= """
- <screen position="center,center" size="600,140" title="YouTube TV Settings">
- <widget name="config" position="0,0" size="600,100" scrollbarMode="showOnDemand" />
-
- <ePixmap pixmap="skin_default/buttons/red.png" position="310,100" size="140,40" alphatest="on" />
- <ePixmap pixmap="skin_default/buttons/green.png" position="150,100" size="140,40" alphatest="on" />
-
- <widget source="key_red" render="Label" position="310,100" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#9f1313" foregroundColor="#ffffff" transparent="1" />
- <widget source="key_green" render="Label" position="150,100" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#1f771f" foregroundColor="#ffffff" transparent="1" />
- </screen>
- """
-
- 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)
-