X-Git-Url: http://code.vuplus.com/gitweb/?p=vuplus_dvbapp;a=blobdiff_plain;f=lib%2Fpython%2FPlugins%2FExtensions%2FWebBrowser%2Fplugin.py;h=1985c0674493076b1699ba1702a309ae8b905f49;hp=228db990b654b2867a7137c0f2219ee5a210818d;hb=3c39908f7a91777d606eb28945bad9128ce92334;hpb=c560e5ae1e7763ea3f51495af4692e00f030b680 diff --git a/lib/python/Plugins/Extensions/WebBrowser/plugin.py b/lib/python/Plugins/Extensions/WebBrowser/plugin.py index 228db99..1985c06 100644 --- a/lib/python/Plugins/Extensions/WebBrowser/plugin.py +++ b/lib/python/Plugins/Extensions/WebBrowser/plugin.py @@ -1,6 +1,6 @@ from Plugins.Plugin import PluginDescriptor -import time, os, socket, thread +import time, os, socket, thread, socket, copy from socket import gaierror, error from os import path as os_path, remove as os_remove @@ -19,12 +19,13 @@ from httplib import HTTPConnection, CannotSendRequest, BadStatusLine, HTTPExcept from Components.Button import Button from Components.Label import Label from Components.Pixmap import Pixmap +from Components.Language import language from Components.Sources.List import List from Components.ConfigList import ConfigListScreen from Components.Sources.StaticText import StaticText from Components.ActionMap import NumberActionMap, ActionMap from Components.ServiceEventTracker import ServiceEventTracker -from Components.config import config, ConfigSelection, getConfigListEntry +from Components.config import config, ConfigSelection, getConfigListEntry, ConfigSlider from Screens.Screen import Screen from Screens.ChoiceBox import ChoiceBox @@ -36,18 +37,53 @@ from enigma import eTimer, eServiceReference, iPlayableService, fbClass, eRCInpu HTTPConnection.debuglevel = 1 +def excute_cmd(cmd): + print "prepared cmd:", cmd + os.system(cmd) + +alpha_value = 0 +def change_galpha(set_const, set_value): + op = "/proc/stb/fb/alpha_op" + val = "/proc/stb/fb/alpha_value" + global alpha_value + if os.path.exists(op) and set_const and alpha_value < 255: + excute_cmd("echo \"const\" > %s" % (op)) + else: + excute_cmd("echo \"copypsrc\" > %s" % (op)) + + if os.path.exists(val) and set_value: + excute_cmd("echo \"%s\" > %s" % (str(hex(alpha_value)), val)) + +def enable_rc_mouse(mode): #mode=[0|1]|[False|True] + mouse_cond = "/proc/stb/fp/mouse" + if os.path.exists(mouse_cond): + excute_cmd("echo %d > %s" % (mode, mouse_cond)) + +def is_process_running(pname): + if pname is None or len(pname) == 0: + return False + + cmd = "/bin/ps -ef | grep %s | grep -v grep | awk \'{print $5}\'"%(pname) + for line in os.popen(cmd).readlines(): + return True + return False + lock = False -def player_lock(): +def wb_lock(alpha_on=True): global lock lock = True + if alpha_on: + change_galpha(set_const=False, set_value=False) fbClass.getInstance().unlock() -def player_unlock(): +def wb_unlock(alpha_on=True): global lock + if alpha_on: + change_galpha(set_const=True, set_value=False) fbClass.getInstance().lock() lock = False -def player_islock(): +def wb_islock(): global lock return lock @@ -134,7 +170,7 @@ class VuPlayer(Screen, InfoBarNotifications): def cbDoExit(self, answer): answer = answer and answer[1] if answer == "y": - player_unlock() + wb_unlock() self.close() elif answer == "n": if self.state != self.PLAYER_IDLE: @@ -271,12 +307,10 @@ class VuPlayerLauncher: if myurl is None: session.open(MessageBox, _("Sorry, video is not available!"), MessageBox.TYPE_INFO) return - - player_lock() myreference = eServiceReference(4097, 0, myurl) session.open(VuPlayer, myreference, service) except Exception, msg: - player_unlock() + wb_unlock() print "Error >>", msg class VuPlayerService: @@ -304,6 +338,7 @@ class VuPlayerService: def run(self, e = True): if self.enable: return + print "VuPlayerService start!!" self.enable = e self.sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM) self.sock.settimeout(self.socket_timeout) @@ -313,76 +348,105 @@ class VuPlayerService: try: conn, addr = self.sock.accept() self.parseHandle(conn, addr) - conn.close() except socket.timeout: #print "[socket timeout]" pass + print "VuPlayerService stop!!" def parseHandle(self, conn, addr): # [http://www.youtube.com/watch?v=BpThu778qB4&feature=related] data = conn.recv(self.max_buffer_size) - print "[%s]" % (data) - tmp = data.split("?") - print tmp # ['http://www.youtube.com/watch', 'v=BpThu778qB4&feature=related'] - service = self.session.nav.getCurrentlyPlayingServiceReference() - if len(tmp) == 2 and tmp[0] == "http://www.youtube.com/watch": - tmp = tmp[1].split("&") - print tmp # ['v=BpThu778qB4', 'feature=related'] - if len(tmp) == 2: - tmp = tmp[0].split("=") - print tmp # ['v', 'BpThu778qB4'] - if len(tmp) == 2 and tmp[0] == "v": - player = VuPlayerLauncher() - player.run(tmp[1], self.session, service) - while player_islock(): - time.sleep(1) - self.session.nav.playService(service) - data = "ok$" + print "[%s]" % (data) + enable_rc_mouse(False) + if data.startswith("http://www.youtube.com"): + print "youtube start!!" + tmp = data.split("?") + print tmp # ['http://www.youtube.com/watch', 'v=BpThu778qB4&feature=related'] + service = self.session.nav.getCurrentlyPlayingServiceReference() + if len(tmp) == 2 and tmp[0] == "http://www.youtube.com/watch": + tmp = tmp[1].split("&") + print tmp # ['v=BpThu778qB4', 'feature=related'] + if len(tmp) == 2: + tmp = tmp[0].split("=") + print tmp # ['v', 'BpThu778qB4'] + if len(tmp) == 2 and tmp[0] == "v": + wb_lock() + player = VuPlayerLauncher() + player.run(tmp[1], self.session, service) + while wb_islock(): + time.sleep(1) + self.session.nav.playService(service) + data = "ok$" + else: + data = "nok$parsing fail" else: data = "nok$parsing fail" else: data = "nok$parsing fail" - else: - data = "nok$parsing fail" + self.sendResponse(conn, data) + elif data.startswith("vk://open"): + print "virtual keyboard start!!" + from Screens.VirtualKeyBoard import VirtualKeyBoard + wb_lock() + self.vk_conn = conn + self.session.openWithCallback(self.cbOpenKeyboard, VirtualKeyBoard, title = (_("Enter your input data")), text = "") + + def cbOpenKeyboard(self, data = None): + print "virtual keyboard callback!!" + wb_unlock() + self.sendResponse(self.vk_conn, data) + + def sendResponse(self, conn, data): + if data is None or len(data) == 0: + data = "" + enable_rc_mouse(True) conn.send(data) + conn.close() class BrowserLauncher(ConfigListScreen, Screen): skin= """ - - - - - - - + + + + + + + + + + """ + def __init__(self, session): Screen.__init__(self, session) self.session = session + self.list = [] + ConfigListScreen.__init__(self, self.list) self.browser_root = "/usr/bin" self.browser_name = "arora" - self.mouse_cond = "/proc/stb/fp/mouse" + self.conf_file = "/usr/lib/enigma2/python/Plugins/Extensions/WebBrowser/settings.conf" self["actions"] = ActionMap(["OkCancelActions", "ShortcutActions", "WizardActions", "ColorActions", "SetupActions", ], { "red": self.keyCancel, - "cancel": self.keyCancel, "green": self.keyGo, + "cancel": self.keyExit, }, -2) - - self.list = [] - ConfigListScreen.__init__(self, self.list) - + self.info = Label(_("If you want to quit the Browser,\nPress RED -> EXIT.")) + self["info"] = self.info self["key_red"] = StaticText(_("Exit")) self["key_green"] = StaticText(_("Start")) - self.introduntion = Label(_(" ")) - self["introduction"] = self.introduntion - self.devices_string = "" - self.mouse_choice_list = [] - self.mouse_device_list = [] - self.keyboard_choice_list = [] - self.keyboard_device_list = [] + self.conf_alpha = "" + self.conf_mouse = "" + self.conf_keyboard = "" + self.conf_keymap = "" + + self.usb_mouse = None + self.usb_keyboard = None + self.rc_mouse = None + self.rc_keyboard = None + self.makeConfig() #time.sleep(2) @@ -390,30 +454,82 @@ class BrowserLauncher(ConfigListScreen, Screen): self.vu_service = VuPlayerService(self.session) self.vu_service.start(timeout=5) - def enableRCMouse(self, mode): #mode=[0|1]|[False|True] - if os.path.exists(self.mouse_cond): - self.cmd("echo %d > %s" % (mode, self.mouse_cond)) + self.exit_wait_cond = False + self.timer_exit_cond = eTimer() + self.timer_exit_cond.callback.append(self.resetExitCond) - def cmd(self, cmd): - print "prepared cmd:", cmd - os.system(cmd) + self.test_cond = True + self.current_lang_idx = language.getActiveLanguageIndex() def keyNone(self): None + def doExit(self): + change_galpha(set_const=False, set_value=False) + self.saveConfig() + self.vu_service.stop() + excute_cmd("killall -15 %s"%(self.browser_name)) + excute_cmd("echo 60 > /proc/sys/vm/swappiness") + enable_rc_mouse(False) #rc-mouse off + language.activateLanguageIndex(self.current_lang_idx) + fbClass.getInstance().unlock() + #eRCInput.getInstance().unlock() + self.close() + + def keyExit(self): + if self.exit_wait_cond: + self.doExit() + if is_process_running(self.browser_name) == False: + self.doExit() + + def keyLeft(self): + if is_process_running(self.browser_name) == False: + ConfigListScreen.keyLeft(self) + global alpha_value + alpha_value = self.alpha.value + #self.saveConfig() + + def keyRight(self): + if is_process_running(self.browser_name) == False: + ConfigListScreen.keyRight(self) + alpha_value = self.alpha.value + #self.saveConfig() + def keyCancel(self): - #if self.lock == False: - self.vu_service.stop() - self.cmd("killall -9 %s"%(self.browser_name)) - self.cmd("echo 60 > /proc/sys/vm/swappiness") - self.introduntion.setText(" ") - if self.mouse.value == 0: - self.enableRCMouse(False) #rc-mouse off - fbClass.getInstance().unlock() - #eRCInput.getInstance().unlock() - self.close() + if is_process_running(self.browser_name) == False: + self.doExit() + self.exit_wait_cond = True + self.timer_exit_cond.start(5000) + + # mouse:keyboard:alpha_value + def saveConfig(self): + if is_process_running(self.browser_name) == False: + command = "echo \"%s:%s:%d:%s\" > %s"%(self.mouse.value, self.keyboard.value, int(self.alpha.value), self.langs.value, self.conf_file) + excute_cmd(command) + + # mouse:keyboard:alpha_value + def loadConfig(self): + if os.path.exists(self.conf_file) == False: + return + config_list = open(self.conf_file).readline().strip().split(':') + if len(config_list) == 3: + self.conf_mouse = config_list[0] + self.conf_keyboard = config_list[1] + self.conf_alpha = config_list[2] + elif len(config_list) == 4: + self.conf_mouse = config_list[0] + self.conf_keyboard = config_list[1] + self.conf_alpha = config_list[2] + self.conf_keymap = config_list[3] + print "load config : ", config_list + + def resetExitCond(self): + self.timer_exit_cond.stop() + self.exit_wait_cond = False def makeConfig(self): + self.loadConfig() + self.devices_string = "" self.devices = eConsoleAppContainer() self.devices.dataAvail.append(self.callbackDevicesDataAvail) self.devices.appClosed.append(self.callbakcDevicesAppClose) @@ -423,164 +539,201 @@ class BrowserLauncher(ConfigListScreen, Screen): self.devices_string = self.devices_string + ret_data def callbakcDevicesAppClose(self, retval): - self.parseDeviceData(self.devices_string) - self.makeHandlerList() - - # none : -1, rc : 0, usb : 1 - self.mouse_choice_list.append((2, _("None"))) - self.keyboard_choice_list.append((2, _("None"))) + self.name_list = [] + self.mouse_list = None + self.keyboard_list = None - print self.mouse_choice_list - print self.keyboard_choice_list - print self.mouse_device_list - print self.keyboard_device_list + self.makeHandlerList(self.devices_string) - self.mouse = ConfigSelection(default = self.mouse_choice_list[0][0], choices = self.mouse_choice_list) - self.keyboard = ConfigSelection(default = self.mouse_choice_list[0][0], choices = self.keyboard_choice_list) - + if self.conf_mouse == "" or self.getHandlerName(self.conf_mouse) is None: + self.conf_mouse = self.mouse_list[0][0] + self.mouse = ConfigSelection(default = self.conf_mouse, choices = self.mouse_list) self.list.append(getConfigListEntry(_('Mouse'), self.mouse)) + + if self.conf_keyboard == "" or self.getHandlerName(self.conf_keyboard) is None: + self.conf_keyboard = self.keyboard_list[0][0] + self.keyboard = ConfigSelection(default = self.conf_keyboard, choices = self.keyboard_list) self.list.append(getConfigListEntry(_('Keyboard'), self.keyboard)) + + if self.conf_alpha == "": + self.conf_alpha = "255" + self.alpha = ConfigSlider(default = int(self.conf_alpha), increment = 10, limits = (0, 255)) + self.list.append(getConfigListEntry(_("Alpha Value"), self.alpha)) + + if self.conf_keymap == "": + self.conf_keymap = self.getLanguage() + self.lang_list = [("en", "English"), ("de", "German")] + self.langs = ConfigSelection(default = self.conf_keymap, choices = self.lang_list) + self.list.append(getConfigListEntry(_("Language"), self.langs)) + self["config"].list = self.list self["config"].l.setList(self.list) - def parseDeviceData(self, data): + def getLanguage(self, lang=language.getLanguage()): + if self.current_lang_idx == 1: + return "de" + return "en" + + def makeHandlerList(self, data): n = "" p = "" - h = "" - self.devices=[] - lines=data.split('\n') - for line in lines: - if line == None or line == "": - if h != None and len(h) != 0: - print "find driver >> name[%s], phys[%s], handler[%s]" % (n, p, h) - self.devices.append([n, p, h]) - n = "" - p = "" - h = "" - continue - if line[0] == 'N': - n = line[8:].strip() - elif line[0] == 'P': - p = line[8:].strip() - elif line[0] == 'H': - h = line[12:].strip() - - def makeHandlerList(self): - if self.devices == None or self.devices == []: - return False - - mouse_pc_h = [] - mouse_rc_h = [] - keyboard_pc_h = [] - keyboard_rc_h = [] - for dev in self.devices: - n = dev[0] - p = dev[1] - h = dev[2] - if p.startswith("usb-ohci-brcm"): - if h.rfind("mouse") >= 0: - mouse_pc_h = [(1, _("USB Mouse")), self.getHandlerName(h, "mouse")] - else: - if len(keyboard_pc_h) == 0: - keyboard_pc_h = [(1, _("USB Keyboard")), self.getHandlerName(h, "event")] - else: - if n[1:].startswith("dreambox") and os.path.exists(self.mouse_cond) : - mouse_rc_h = [(0, _("RemoteControl")), self.getHandlerName(h, "event")] - keyboard_rc_h = [(0, _("RemoteControl")), self.getHandlerName(h, "event")] - if len(mouse_rc_h) > 0: - self.mouse_choice_list.append(mouse_rc_h[0]) - self.mouse_device_list.append(mouse_rc_h[1]) - if len(mouse_pc_h) > 0: - self.mouse_choice_list.append(mouse_pc_h[0]) - self.mouse_device_list.append(mouse_pc_h[1]) - - if len(keyboard_rc_h) > 0: - self.keyboard_choice_list.append(keyboard_rc_h[0]) - self.keyboard_device_list.append(keyboard_rc_h[1]) - if len(keyboard_pc_h) > 0: - self.keyboard_choice_list.append(keyboard_pc_h[0]) - self.keyboard_device_list.append(keyboard_pc_h[1]) - return True + h_list = [] - def getHandlerName(self, h, s): - if h is None or len(h) == 0: - return "" - - handles = h.split() - #print "handles >> ", handles - for tmp_h in handles: - #print "handle_item >> ", tmp_h - if tmp_h.startswith(s): - #print "detected : [%s]" % tmp_h - return tmp_h - return "" + event_list = [] + lines = data.split('\n') + for line in lines: + print ">>", line + if line is not None and len(line) > 0: + if line[0] == 'I': + n = "" + p = "" + h_list = [] + elif line[0] == 'N': + n = line[8:].strip() + elif line[0] == 'P': + p = line[8:].strip() + elif line[0] == 'H': + h_list = line[12:].strip().split() + tn = line[12:].strip().find("mouse") + for h in h_list: + event_list.append((h, _(h))) + self.name_list.append((h, n)) + if n[1:].startswith("dream") and self.rc_mouse is None: + for thl in h.split(" "): + if thl.startswith("event"): + self.rc_mouse = copy.deepcopy(h) + self.rc_keyboard = copy.deepcopy(h) + print "detected!! rc:", h + continue + if h.startswith("mouse") and self.usb_mouse is None: + self.usb_mouse = copy.deepcopy(h) + print "detected!! usb mouse:",h + continue + if tn == -1 and self.usb_keyboard is None: + self.usb_keyboard = copy.deepcopy(h) + print "detected!! usb keyboard:",h + elif line[0] == 'B' and line[3:].startswith("ABS") and p.startswith("usb-"): + for h in h_list: + if self.usb_mouse is not None: + break + if self.usb_keyboard is not None and h == self.usb_keyboard[0]: + self.usb_keyboard = None + print "clean!! usb keyboard:",h + self.usb_mouse = copy.deepcopy(h) + print "detected!! usb mouse:",h + + tmp = copy.deepcopy(event_list) + if self.usb_mouse is not None: + tmp.insert(0, ("musb", "USB Mouse")) + if self.rc_mouse is not None: + tmp.insert(0, ("mrc", "Remote Control")) + self.mouse_list = tmp + + tmp = copy.deepcopy(event_list) + if self.usb_keyboard is not None: + tmp.insert(0, ("kusb", "USB Keyboard")) + if self.rc_keyboard is not None: + tmp.insert(0, ("krc", "Remote Control")) + self.keyboard_list = tmp + print "E:", event_list + print "M:", self.mouse_list + print "K:", self.keyboard_list + + def startBrowser(self): + self.timer_start.stop() + + self.lock = True + excute_cmd("killall -15 %s"%(self.browser_name)) + excute_cmd("echo 0 > /proc/sys/vm/swappiness") + + kbd_cmd = " " + mouse_cmd = " " + extra_cmd = "export VU_DOWNLOAD_DIR=/tmp; " + browser_cmd = "%s/%s -qws" % (self.browser_root, self.browser_name) + + mouse_param = self.mouse.value + if self.mouse.value == "mrc": + mouse_param = self.rc_mouse + elif self.mouse.value == "musb": + mouse_param = self.usb_mouse + keyboard_param = self.keyboard.value + if self.keyboard.value == "krc": + keyboard_param = self.rc_keyboard + elif self.keyboard.value == "kusb": + keyboard_param = self.usb_keyboard + + if self.getHandlerName(mouse_param)[1:].startswith("dreambox"): + enable_rc_mouse(True) #rc-mouse on + if str(mouse_param).startswith("event"): + mouse_cmd = "export QWS_MOUSE_PROTO=LinuxInput:/dev/input/%s; " % (str(mouse_param)) + + keymap_param = "" + if self.langs.value == "de": + keymap_param = ":keymap=/usr/share/keymaps/vuplus/de.qmap" + kbd_cmd = "export QWS_KEYBOARD=LinuxInput:/dev/input/%s%s; " % (str(keyboard_param), keymap_param) + + cmd = "%s%s%s%s" % (extra_cmd, kbd_cmd, mouse_cmd, browser_cmd) + print "prepared command : [%s]" % cmd + + self.launcher = eConsoleAppContainer() + self.launcher.appClosed.append(self.callbackLauncherAppClosed) + self.launcher.dataAvail.append(self.callbackLauncherDataAvail) + + fbClass.getInstance().lock() + #eRCInput.getInstance().lock() + + global alpha_value + alpha_value = self.alpha.value + change_galpha(set_const=True, set_value=True) + + self.launcher.execute(cmd) + print "started browser..." def keyGo(self): + self.saveConfig() + self.info.setText("Starting Webbrowser. Please wait...") if self.lock == False: - self.lock = True - - self.introduntion.setText("Run web-browser.\nPlease, wait...") - self.cmd("echo 0 > /proc/sys/vm/swappiness") - - kbd_cmd = "" - mouse_cmd = "" - extra_cmd = "" - browser_cmd = "%s/%s -qws" % (self.browser_root, self.browser_name) - - fbClass.getInstance().lock() - #eRCInput.getInstance().lock() - - if self.mouse.value == 0: - self.enableRCMouse(True) #rc-mouse on - idx = self.getListIndex(self.mouse_choice_list, 0) - mouse_cmd = "export QWS_MOUSE_PROTO=LinuxInput:/dev/input/%s; " % (self.mouse_device_list[idx]) - elif self.mouse.value == 1: - mouse_cmd = " " - #mouse_cmd = "export QWS_MOUSE_PROTO=Auto:/dev/input/%s; " % (m) - elif self.mouse.value == 2: - mouse_cmd = "export QWS_MOUSE_PROTO=None; " - - if self.keyboard.value == 0: - idx = self.getListIndex(self.keyboard_choice_list, 0) - kbd_cmd = "export QWS_KEYBOARD=LinuxInput:/dev/input/%s; " % (self.keyboard_device_list[idx]) - elif self.keyboard.value == 1: - idx = self.getListIndex(self.keyboard_choice_list, 1) - kbd_cmd = "export QWS_KEYBOARD=LinuxInput:/dev/input/%s; " % (self.keyboard_device_list[idx]) - elif self.keyboard.value == 2: - kbd_cmd = " " - print "mouse cmd >>", mouse_cmd, " >> ", self.mouse.value - print "keyboard cmd >>", kbd_cmd, " >> ", self.keyboard.value - - cmd = "%s%s%s%s" % (extra_cmd, kbd_cmd, mouse_cmd, browser_cmd) - print "prepared command : [%s]" % cmd - - self.launcher = eConsoleAppContainer() - self.launcher.appClosed.append(self.callbackLauncherAppClosed) - self.launcher.dataAvail.append(self.callbackLauncherDataAvail) - self.launcher.execute(cmd) - print "running arora..." - - def getListIndex(self, l, v): - idx = 0 - for i in l: - if i[0] == v: - return idx; - idx = idx + 1 - return -1 + if self.langs.value == "de": + language.activateLanguageIndex(1) + else: + language.activateLanguageIndex(0) + self.timer_start = eTimer() + self.timer_start.callback.append(self.startBrowser) + self.timer_start.start(10) + + def getHandlerName(self, v): + if v == "mrc": + v = self.rc_mouse + elif v == "musb": + v = self.usb_mouse + elif v == "krc": + v = self.rc_keyboard + elif v == "kusb": + v = self.usb_keyboard + for l in self.name_list: + if l[0] == v: + return l[1] + return None def callbackLauncherDataAvail(self, ret_data): print ret_data if ret_data.startswith("--done--"): self.lock = False - self.keyCancel() - + self.doExit() + def callbackLauncherAppClosed(self, retval = 1): - None + self.lock = False + +def sessionstart(session, **kwargs): + enable_rc_mouse(False) + change_galpha(set_const=False, set_value=True) + excute_cmd("killall -15 arora") def main(session, **kwargs): session.open(BrowserLauncher) - -def Plugins(**kwargs): - return PluginDescriptor(name=_("Web Browser"), description="start web browser", where = PluginDescriptor.WHERE_PLUGINMENU, fnc=main) + +def Plugins(**kwargs): + return [PluginDescriptor(where = PluginDescriptor.WHERE_SESSIONSTART, needsRestart = False, fnc=sessionstart), + PluginDescriptor(name=_("Web Browser"), description="start web browser", where = PluginDescriptor.WHERE_PLUGINMENU, fnc=main)]