From: kos Date: Tue, 24 Dec 2013 06:32:02 +0000 (+0900) Subject: add youtube tv and remove resolution setting. X-Git-Url: http://code.vuplus.com/gitweb/?p=vuplus_dvbapp;a=commitdiff_plain;h=2da1bb1350dcf221c3a8459b97d2d9e234cd9e66 add youtube tv and remove resolution setting. ** need to update driver (20131224) --- diff --git a/lib/python/Plugins/Extensions/HbbTV/plugin.py b/lib/python/Plugins/Extensions/HbbTV/plugin.py index 6d51dde..c12d8e7 100644 --- a/lib/python/Plugins/Extensions/HbbTV/plugin.py +++ b/lib/python/Plugins/Extensions/HbbTV/plugin.py @@ -20,7 +20,7 @@ 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, ConfigSubsection, ConfigPosition, getConfigListEntry, ConfigBoolean, ConfigInteger, ConfigText, ConfigSelection, configfile, getCharValue +from Components.config import config, ConfigYesNo, ConfigSubsection, ConfigPosition, getConfigListEntry, ConfigBoolean, ConfigInteger, ConfigText, ConfigSelection, configfile, getCharValue from enigma import eTimer, eConsoleAppContainer, getDesktop, eServiceReference, iPlayableService, iServiceInformation, RT_HALIGN_LEFT, RT_HALIGN_RIGHT, RT_HALIGN_CENTER, RT_VALIGN_CENTER, getPrevAsciiCode, eRCInput, fbClass, eServiceCenter @@ -254,8 +254,12 @@ class OpCodeSet: ,"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" @@ -290,8 +294,12 @@ class OpCodeSet: ,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): @@ -499,6 +507,7 @@ class HandlerHbbTV(Handler): ,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 @@ -506,6 +515,8 @@ class HandlerHbbTV(Handler): ,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 @@ -553,6 +564,19 @@ class HandlerHbbTV(Handler): 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() + return (0, "OK") + + def _cb_handleVideobackendDisable(self, opcode, data): + self._handle_dump(self._cb_handleVideobackendDisable, opcode, data) + before_service = getBeforeService() + self._session.nav.playService(before_service) + return (0, "OK") + def _cb_handleHbbTVChangeChannel(self, opcode, data): self._handle_dump(self._cb_handleHbbTVChangeChannel, opcode, data) global _g_helper @@ -567,7 +591,7 @@ class HandlerHbbTV(Handler): def _cb_handleBrowserMenuReq(self, opcode, data): self._handle_dump(self._cb_handleBrowserMenuReq, opcode, data) - restoreResolution() + #restoreResolution() fbClass.getInstance().unlock() eRCInput.getInstance().unlock() browser = getPluginBrowser() @@ -611,12 +635,13 @@ class HandlerHbbTV(Handler): def _cb_virtualKeyboardClosed(self, data=None): fbClass.getInstance().lock() eRCInput.getInstance().lock() - setResolution(1280, 720) + #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() + #restoreResolution() fbClass.getInstance().unlock() eRCInput.getInstance().unlock() if data == 0 or strIsEmpty(data): @@ -693,6 +718,12 @@ class HandlerHbbTV(Handler): vcm.volDown() return (0, "OK") + def _cb_handleDVBAppSetVol(self, opcode, data): + self._handle_dump(self._cb_handleDVBAppSetVol, opcode, data) + v = int(data) + 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() @@ -749,7 +780,7 @@ class HandlerHbbTV(Handler): self._session.nav.playService(before_service) self._vod_uri = None - restoreResolution() + #restoreResolution() return (0, "OK") def _cb_handleVODPlayerURI(self, opcode, data): @@ -1058,7 +1089,8 @@ class HbbTVHelper(Screen): def _start_opera(self): if not self._is_browser_running(): global HBBTVAPP_PATH - start_command = '%s/launcher start'%(HBBTVAPP_PATH) + global __gval__ + start_command = '%s/launcher start %d %d'%(HBBTVAPP_PATH, __gval__.resX, __gval__.resY) os.system(start_command) return True @@ -1069,7 +1101,8 @@ class HbbTVHelper(Screen): def _restart_opera(self): global HBBTVAPP_PATH - try: os.system('%s/launcher restart'%(HBBTVAPP_PATH)) + global __gval__ + try: os.system('%s/launcher restart %d %d'%(HBBTVAPP_PATH, __gval__.resX, __gval__.resY)) except: pass return True @@ -1790,7 +1823,7 @@ class OperaBrowser(Screen): COMMAND_MAP = {} MENUITEMS_LIST =[] - def __init__(self, session, url=None): + def __init__(self, session, url=None, isWebAppMode=False): Screen.__init__(self, session) self["actions"] = ActionMap(["DirectionActions", "MenuActions", "OkCancelActions"], { "cancel" : self.keyCancel @@ -1833,6 +1866,7 @@ class OperaBrowser(Screen): self._onCloseTimer.callback.append(self._cb_onClose) self.paramUrl = url + self.paramIsWebAppMode = isWebAppMode language.addCallback(self.UpdateLanguageCB) def UpdateLanguageCB(self): @@ -1871,7 +1905,9 @@ class OperaBrowser(Screen): if self.paramUrl is not None: self.keyMenu() - self.cbUrlText(self.paramUrl, 1) + 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 @@ -1962,7 +1998,7 @@ class OperaBrowser(Screen): return self.setTitle(title) - def cbUrlText(self, data=None, mode=0): + def cbUrlText(self, data=None, mode=0, opcode='OP_BROWSER_OPEN_URL'): global _g_helper if not _g_helper._is_browser_running(): return @@ -1981,10 +2017,10 @@ class OperaBrowser(Screen): fbClass.getInstance().lock() eRCInput.getInstance().lock() - setResolution(1280, 720) + #setResolution(1280, 720) command_util = getCommandUtil() - command_util.sendCommand('OP_BROWSER_OPEN_URL', data, mode) + command_util.sendCommand(opcode, data, mode) self._terminatedBrowser = False self._enableKeyEvent = False @@ -2146,7 +2182,7 @@ class OperaBrowser(Screen): #self._session.openWithCallback(self._cb_virtualKeyboardClosed, VirtualKeyBoard, title=("Please enter URL here"), text="") fbClass.getInstance().lock() eRCInput.getInstance().lock() - setResolution(1280, 720) + #setResolution(1280, 720) if self.toggleListViewFlag: self.toggleMainScreen() self._currentPageUrl = None @@ -2175,6 +2211,153 @@ class OperaBrowser(Screen): self.currentListView.pageUp() self.keyUp() +config.plugins.youtubetv = ConfigSubsection() +config.plugins.youtubetv.showhelp = ConfigYesNo(default = False) +config.plugins.youtubetv.uri = ConfigText(default = "http://www.youtube.com/tv", visible_width = 50, fixed_size = False) +class YoutubeTVWindow(Screen, HelpableScreen): + skin = """ + + + + + + + + + + """ + def __init__(self, session): + Screen.__init__(self, session) + HelpableScreen.__init__(self) + + self["actions"] = ActionMap(["WizardActions", "DirectionActions", "OkCancelActions","ColorActions", "EPGSelectActions",], { + "cancel": self.keyCancel, + "red" : self.keyCancel, + "green" : self.keyGreen, + "yellow": self.keyYellow, + },-2) + + self["key_green"] = StaticText(_("Start")) + self["key_yellow"] = StaticText(_("Help")) + + self["infomation"] = Label() + self["startdesc"] = Label() + self["helpdesc"] = Label() + + self.onLayoutFinish.append(self.layoutFinished) + + def layoutFinished(self): + self.setTitle(_('Start YouTube TV')) + self["infomation"].setText(_("YouTube TV is a new way to watch YouTube videos on Vu+")) + self["startdesc" ].setText(_("* Start YouTube TV")) + self["helpdesc" ].setText(_("* RC Help")) + + def setHelpModeActions(self): + self.helpList = [] + self["OkCancelActions"] = HelpableActionMap(self, "OkCancelActions", { + "ok" : (self.keyPass, _("Play ther selected the video")), + "cancel": (self.keyPass, _("Exit the YouTube TV")), + }) + self["EventViewActions"] = HelpableActionMap(self, "EventViewActions", { + "pageUp" : (self.keyPass, _("Move up")), + "pageDown" : (self.keyPass, _("Move down")), + "prevEvent" : (self.keyPass, _("Move left")), + "nextEvent" : (self.keyPass, _("Move right")), + }) + self["EPGSelectActions"] = HelpableActionMap(self, "EPGSelectActions", { + "info" : (self.keyPass, _("Search a video")), + "nextService" : (self.keyPass, _("Skip forward 10 sec")), + "prevService" : (self.keyPass, _("Skip backward 10 sec")), + }) + self["MediaPlayerActions"] = HelpableActionMap(self, "MediaPlayerActions", { + "play" : (self.keyPass, _("Play current video")), + "pause" : (self.keyPass, _("Pause current video")), + "stop" : (self.keyPass, _("Stop current video")), + }) + self["ColorActions"] = HelpableActionMap(self, "ColorActions", { + "red" : (self.keyPass, _("Back")), + }) + self.showHelp() + + def keyPass(self): + pass + def keyCancel(self): + config.plugins.youtubetv.showhelp.cancel() + self.close(False) + def keyGreen(self): + config.plugins.youtubetv.showhelp.save() + config.plugins.youtubetv.save() + config.plugins.save() + self.close(True) + def keyYellow(self): + self.setHelpModeActions() + def keyBlue(self): + if config.plugins.youtubetv.showhelp.value == True : + config.plugins.youtubetv.showhelp.setValue(False) + else: config.plugins.youtubetv.showhelp.setValue(True) + +class YoutubeTVSettings(ConfigListScreen, Screen): + skin= """ + + + + + + + + + + """ + def __init__(self, session): + self.session = session + Screen.__init__(self, session) + + self.menulist = [] + ConfigListScreen.__init__(self, self.menulist) + + self["actions"] = ActionMap(["OkCancelActions", "ColorActions",], { + "ok" : self.keyGreen, + "green" : self.keyGreen, + "red" : self.keyRed, + "cancel" : self.keyRed, + }, -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 makeConfigList(self): + self.menulist = [] + entryUri = getConfigListEntry(_("YouTube TV URL"), config.plugins.youtubetv.uri) + entryShowHelp = getConfigListEntry(_("Do not show YouTube TV Stater again"), config.plugins.youtubetv.showhelp) + self.menulist.append(entryUri) + self.menulist.append(entryShowHelp) + + self["config"].list = self.menulist + self["config"].l.setList(self.menulist) + def auto_start_main(reason, **kwargs): if reason: command_server = getCommandServer() @@ -2226,6 +2409,44 @@ def showManual(self): _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): + if ret: + global _g_backupSession + _g_backupSession = session + service = session.nav.getCurrentlyPlayingServiceReference() + if service is not None: + setBeforeService(service.toString()) + session.nav.stopService() + else: setBeforeService(service) + setPluginBrowser(session.openWithCallback(clearBrowserData, OperaBrowser, config.plugins.youtubetv.uri.value, True)) + if config.plugins.youtubetv.showhelp.value == True: + cbYoutubeTVClose(True) + else: session.openWithCallback(cbYoutubeTVClose, YoutubeTVWindow) + +def youtube_setting_main(session, **kwargs): + session.open(YoutubeTVSettings) + +def start_menu_main(menuid, **kwargs): + if menuid == "mainmenu": + return [(_("YouTube TV"), showYoutubeTV, "youtube_tv", 46)] + return [] + def plugin_start_main(session, **kwargs): #session.open(OperaBrowser) def _do_clean(): @@ -2253,6 +2474,8 @@ def plugin_extension_browser_config(session, **kwargs): def Plugins(path, **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))