1 from Plugins.Plugin import PluginDescriptor
3 import time, os, socket, thread, socket, copy
4 from socket import gaierror, error
5 from os import path as os_path, remove as os_remove
8 import gdata.youtube.service
9 from gdata.service import BadAuthentication
11 from twisted.web import client
12 from twisted.internet import reactor
14 from urlparse import parse_qs
15 from urllib import quote, unquote_plus, unquote
16 from urllib2 import Request, URLError, urlopen as urlopen2
17 from httplib import HTTPConnection, CannotSendRequest, BadStatusLine, HTTPException
19 from Screens.Screen import Screen
20 from Screens.ChoiceBox import ChoiceBox
21 from Screens.MessageBox import MessageBox
22 from Screens.DefaultWizard import DefaultWizard
23 from Screens.InfoBarGenerics import InfoBarNotifications
25 from Components.Button import Button
26 from Components.Label import Label
27 from Components.Pixmap import Pixmap, MovingPixmap
28 from Components.Language import language
29 from Components.Sources.List import List
30 from Components.ConfigList import ConfigListScreen
31 from Components.Sources.StaticText import StaticText
32 from Components.ActionMap import NumberActionMap, ActionMap
33 from Components.ServiceEventTracker import ServiceEventTracker
34 from Components.config import config, ConfigSelection, getConfigListEntry, ConfigSlider
36 from Tools.Directories import resolveFilename, SCOPE_PLUGINS
37 from Tools.LoadPixmap import LoadPixmap
39 from enigma import eTimer, eServiceReference, iPlayableService, fbClass, eRCInput, eConsoleAppContainer, getDesktop, ePicLoad
41 HTTPConnection.debuglevel = 1
44 print "prepared cmd:", cmd
48 def change_galpha(set_const, set_value):
49 op = "/proc/stb/fb/alpha_op"
50 val = "/proc/stb/fb/alpha_value"
52 if os.path.exists(op) and set_const and alpha_value < 255:
53 excute_cmd("echo \"const\" > %s" % (op))
55 excute_cmd("echo \"copypsrc\" > %s" % (op))
57 if os.path.exists(val) and set_value:
58 excute_cmd("echo \"%s\" > %s" % (str(hex(alpha_value)), val))
60 def enable_rc_mouse(mode): #mode=[0|1]|[False|True]
61 mouse_cond = "/proc/stb/fp/mouse"
62 if os.path.exists(mouse_cond):
63 excute_cmd("echo %d > %s" % (mode, mouse_cond))
65 def is_process_running(pname):
66 if pname is None or len(pname) == 0:
69 cmd = "/bin/ps -ef | grep %s | grep -v grep | awk \'{print $5}\'"%(pname)
70 for line in os.popen(cmd).readlines():
75 def wb_lock(alpha_on=True):
79 change_galpha(set_const=False, set_value=False)
80 fbClass.getInstance().unlock()
82 def wb_unlock(alpha_on=True):
85 change_galpha(set_const=True, set_value=False)
86 fbClass.getInstance().lock()
93 class VuPlayer(Screen, InfoBarNotifications):
94 size = getDesktop(0).size()
95 wb_bgr = resolveFilename(SCOPE_PLUGINS, "Extensions/WebBrowser/mp_wb_background.png")
96 wb_btn = resolveFilename(SCOPE_PLUGINS, "Extensions/WebBrowser/mp_wb_buttons.png")
97 position_params = size.width() > 750 and (620, wb_bgr, wb_btn) or (480, wb_bgr, wb_btn)
99 <screen name="VuPlayer" flags="wfNoBorder" position="center,%d" size="455,53" title="VuPlayer" backgroundColor="transparent">
100 <ePixmap pixmap="%s" position="0,0" zPosition="-1" size="455,53" />
101 <ePixmap pixmap="%s" position="40,23" size="30,13" alphatest="on" />
103 <widget source="session.CurrentService" render="PositionGauge" position="80,25" size="220,10" zPosition="2" pointer="skin_default/position_pointer.png:540,0" transparent="1" foregroundColor="#20224f">
104 <convert type="ServicePosition">Gauge</convert>
107 <widget source="session.CurrentService" render="Label" position="310,20" size="50,20" font="Regular;18" halign="center" valign="center" backgroundColor="#4e5a74" transparent="1" >
108 <convert type="ServicePosition">Position</convert>
110 <widget name="sidebar" position="362,20" size="10,20" font="Regular;18" halign="center" valign="center" backgroundColor="#4e5a74" transparent="1" />
111 <widget source="session.CurrentService" render="Label" position="374,20" size="50,20" font="Regular;18" halign="center" valign="center" backgroundColor="#4e5a74" transparent="1" >
112 <convert type="ServicePosition">Length</convert>
115 """ % position_params
121 def __init__(self, session, service, lastservice):
122 Screen.__init__(self, session)
123 InfoBarNotifications.__init__(self)
125 self.session = session
126 self.service = service
127 self.lastservice = lastservice
128 self["actions"] = ActionMap(["OkCancelActions", "InfobarSeekActions", "MediaPlayerActions", "MovieSelectionActions"],
130 "ok": self.doInfoAction,
131 "cancel": self.doExit,
133 "playpauseService": self.playpauseService,
135 self["sidebar"] = Label(_("/"))
137 self.__event_tracker = ServiceEventTracker(screen = self, eventmap =
139 iPlayableService.evSeekableStatusChanged: self.__seekableStatusChanged,
140 iPlayableService.evStart: self.__serviceStarted,
141 iPlayableService.evEOF: self.__evEOF,
144 self.hidetimer = eTimer()
145 self.hidetimer.timeout.get().append(self.doInfoAction)
147 self.state = self.PLAYER_PLAYING
148 self.lastseekstate = self.PLAYER_PLAYING
149 self.__seekableStatusChanged()
151 self.onClose.append(self.__onClose)
155 self.session.nav.stopService()
157 def __seekableStatusChanged(self):
158 service = self.session.nav.getCurrentService()
159 if service is not None:
160 seek = service.seek()
161 if seek is None or not seek.isCurrentlySeekable():
162 self.setSeekState(self.PLAYER_PLAYING)
164 def __serviceStarted(self):
165 self.state = self.PLAYER_PLAYING
166 self.__seekableStatusChanged()
171 def __setHideTimer(self):
172 self.hidetimer.start(5000)
175 list = ((_("Yes"), "y"), (_("No, but play video again"), "n"),)
176 self.session.openWithCallback(self.cbDoExit, ChoiceBox, title=_("Stop playing this movie?"), list = list)
178 def cbDoExit(self, answer):
179 answer = answer and answer[1]
184 if self.state != self.PLAYER_IDLE:
185 self.session.nav.stopService()
186 self.state = self.PLAYER_IDLE
189 def setSeekState(self, wantstate):
190 service = self.session.nav.getCurrentService()
192 print "No Service found"
195 pauseable = service.pause()
196 if pauseable is not None:
197 if wantstate == self.PLAYER_PAUSED:
199 self.state = self.PLAYER_PAUSED
201 self.hidetimer.stop()
203 elif wantstate == self.PLAYER_PLAYING:
205 self.state = self.PLAYER_PLAYING
207 self.__setHideTimer()
209 self.state = self.PLAYER_PLAYING
211 def doInfoAction(self):
214 self.hidetimer.stop()
217 if self.state == self.PLAYER_PLAYING:
218 self.__setHideTimer()
221 if self.state == self.PLAYER_PAUSED:
223 self.__setHideTimer()
224 self.state = self.PLAYER_PLAYING
225 self.session.nav.playService(self.service)
227 self.__setHideTimer()
229 def playpauseService(self):
230 if self.state == self.PLAYER_PLAYING:
231 self.setSeekState(self.PLAYER_PAUSED)
232 elif self.state == self.PLAYER_PAUSED:
233 self.setSeekState(self.PLAYER_PLAYING)
235 VIDEO_FMT_PRIORITY_MAP = {
236 '38' : 1, #MP4 Original (HD)
237 '37' : 2, #MP4 1080p (HD)
238 '22' : 3, #MP4 720p (HD)
244 'User-Agent': 'Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.2.6) Gecko/20100627 Firefox/3.6.6',
245 'Accept-Charset': 'ISO-8859-1,utf-8;q=0.7,*;q=0.7',
246 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
247 'Accept-Language': 'en-us,en;q=0.5',
250 class VuPlayerLauncher:
268 ,'100':'WebM-3D 360p'
269 ,'101':'WebM-3D 480p'
270 ,'102':'WebM-3D 720p'
274 def getVideoUrl(self, video_id):
277 if video_id is None or video_id == "":
280 # Getting video webpage
281 watch_url = 'http://www.youtube.com/watch?v=%s&gl=US&hl=en' % video_id
282 watchrequest = Request(watch_url, None, std_headers)
284 #print "trying to find out if a HD Stream is available",watch_url
285 watchvideopage = urlopen2(watchrequest).read()
286 except (URLError, HTTPException, socket.error), err:
287 print "Error: Unable to retrieve watchpage - Error code: ", str(err)
291 for el in ['&el=embedded', '&el=detailpage', '&el=vevo', '']:
292 info_url = ('http://www.youtube.com/get_video_info?&video_id=%s%s&ps=default&eurl=&gl=US&hl=en' % (video_id, el))
293 request = Request(info_url, None, std_headers)
295 infopage = urlopen2(request).read()
296 videoinfo = parse_qs(infopage)
297 if ('url_encoded_fmt_stream_map' or 'fmt_url_map') in videoinfo:
299 except (URLError, HTTPException, socket.error), err:
300 print "Error: unable to download video infopage",str(err)
303 if ('url_encoded_fmt_stream_map' or 'fmt_url_map') not in videoinfo:
304 if 'reason' not in videoinfo:
305 print 'Error: unable to extract "fmt_url_map" or "url_encoded_fmt_stream_map" parameter for unknown reason'
307 reason = unquote_plus(videoinfo['reason'][0])
308 print 'Error: YouTube said: %s' % reason.decode('utf-8')
313 if videoinfo.has_key('url_encoded_fmt_stream_map'):
314 tmp_fmtUrlDATA = videoinfo['url_encoded_fmt_stream_map'][0].split(',url=')
316 tmp_fmtUrlDATA = videoinfo['fmt_url_map'][0].split(',')
317 for fmtstring in tmp_fmtUrlDATA:
318 if videoinfo.has_key('url_encoded_fmt_stream_map'):
319 (fmturl, fmtid) = fmtstring.split('&itag=')
320 if fmturl.find("url=") !=-1:
321 fmturl = fmturl.replace("url=","")
323 (fmtid,fmturl) = fmtstring.split('|')
324 if VIDEO_FMT_PRIORITY_MAP.has_key(fmtid):
325 video_fmt_map[VIDEO_FMT_PRIORITY_MAP[fmtid]] = { 'fmtid': fmtid, 'fmturl': unquote_plus(fmturl) }
326 fmt_infomap[int(fmtid)] = unquote_plus(fmturl)
327 print "fmtinfomap :",sorted(fmt_infomap.iterkeys())
332 sorted_fmt_keys = sorted(video_fmt_map.iterkeys())
333 for x in video_fmt_map:
335 videofmt = video_fmt_map[sorted_fmt_keys[idx]]
336 video_url = videofmt['fmturl'].split(';')[0]
337 quality_str = self.qCode2String(videofmt['fmtid'])
338 #print "detected video : quality [%s], url [%s]" % (quality_str, video_url)
339 if video_url and quality_str:
340 video_url_list.append((quality_str, video_url))
341 print "added quality [%s], url [%s]" % (quality_str, video_url)
342 except Exception, msg: print "Error >>", msg
344 return video_url_list
346 def qCode2String(self, qcode):
349 qstr = self.QUALITY_CODE[qcode]
351 #print "quality : code[%s], str[%s]" % (qcode, qstr)
354 def run(self, tubeid, session, service):
355 self.session = session
356 self.service = service
358 self.url_list = self.getVideoUrl(tubeid)
359 if self.url_list is None or len(self.url_list) == 0:
360 session.open(MessageBox, _("Sorry, video is not available!"), MessageBox.TYPE_INFO)
363 titlemsg = "Please, choice video quality.\nFor smooth playback depends on network conditions."
364 self.session.openWithCallback(self.cbSelectedQuality, ChoiceBox, title=_(titlemsg), list = self.url_list)
365 except Exception, msg:
367 print "Error >>", msg
369 def cbSelectedQuality(self, choice):
371 print "selected [%s] : [%s]" % (choice[0], choice[1])
372 myreference = eServiceReference(4097, 0, choice[1])
373 self.session.open(VuPlayer, myreference, self.service)
374 except Exception, msg:
376 print "Error >>", msg
378 class VuPlayerService:
379 def __init__(self, session):
381 self.socket_timeout = 0
382 self.max_buffer_size = 1024
383 self.uds_file = "/tmp/vuplus.tmp"
384 self.session = session
386 os.remove(self.uds_file)
390 def start(self, timeout = 1):
391 self.socket_timeout = timeout
392 thread.start_new_thread(self.run, (True,))
400 def run(self, e = True):
403 print "VuPlayerService start!!"
405 self.sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
406 self.sock.settimeout(self.socket_timeout)
407 self.sock.bind(self.uds_file)
411 conn, addr = self.sock.accept()
412 self.parseHandle(conn, addr)
413 except socket.timeout:
414 #print "[socket timeout]"
416 print "VuPlayerService stop!!"
418 def parseHandle(self, conn, addr):
419 # [http://www.youtube.com/watch?v=BpThu778qB4&feature=related]
420 data = conn.recv(self.max_buffer_size)
421 print "[%s]" % (data)
422 enable_rc_mouse(False)
423 if data.startswith("http://www.youtube.com"):
424 print "youtube start!!"
425 tmp = data.split("?")
426 print tmp # ['http://www.youtube.com/watch', 'v=BpThu778qB4&feature=related']
427 service = self.session.nav.getCurrentlyPlayingServiceReference()
428 if len(tmp) and tmp[0] == "http://www.youtube.com/watch":
429 tmp = tmp[1].split("&")
430 print tmp # ['v=BpThu778qB4', 'feature=related']
432 tmp = tmp[0].split("=")
433 print tmp # ['v', 'BpThu778qB4']
434 if len(tmp) == 2 and tmp[0] == "v":
436 player = VuPlayerLauncher()
437 player.run(tmp[1], self.session, service)
440 self.session.nav.playService(service)
443 data = "nok$parsing fail"
445 data = "nok$parsing fail"
447 data = "nok$parsing fail"
448 self.sendResponse(conn, data)
449 elif data.startswith("vk://open"):
450 print "virtual keyboard start!!"
451 from Screens.VirtualKeyBoard import VirtualKeyBoard
454 self.session.openWithCallback(self.cbOpenKeyboard, VirtualKeyBoard, title = (_("Enter your input data")), text = "")
456 def cbOpenKeyboard(self, data = None):
457 print "virtual keyboard callback!!"
459 self.sendResponse(self.vk_conn, data)
461 def sendResponse(self, conn, data):
462 if data is None or len(data) == 0:
464 enable_rc_mouse(True)
468 class BrowserLauncher(ConfigListScreen, Screen):
470 <screen position="center,center" size="623,300" title="Web Browser">
471 <ePixmap pixmap="skin_default/buttons/red.png" position="10,0" size="140,40" alphatest="on" />
472 <ePixmap pixmap="skin_default/buttons/green.png" position="158,0" size="140,40" alphatest="on" />
474 <widget source="key_red" render="Label" position="10,0" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#9f1313" foregroundColor="#ffffff" transparent="1" />
475 <widget source="key_green" render="Label" position="158,0" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#1f771f" foregroundColor="#ffffff" transparent="1" />
477 <widget name="config" position="0,50" size="309,100" scrollbarMode="showOnDemand" />
478 <ePixmap pixmap="rc_wb_desc.png" position="312,5" size="309,296" alphatest="on" />
479 <widget name="info" position="0,180" size="309,50" font="Regular;18" halign="center" foregroundColor="#a08500" transparent="1" />
483 def __init__(self, session):
484 Screen.__init__(self, session)
487 self.session = session
489 ConfigListScreen.__init__(self, self.list)
491 self.browser_root = "/usr/bin"
492 self.browser_name = "arora"
494 from Tools.Directories import resolveFilename, SCOPE_PLUGINS
495 self.conf_file = resolveFilename(SCOPE_PLUGINS, "Extensions/WebBrowser/settings.conf")
496 self["actions"] = ActionMap(["OkCancelActions", "ShortcutActions", "WizardActions", "ColorActions", "SetupActions", ],
497 { "red": self.keyCancel,
499 "cancel": self.keyExit,
501 self.info = Label(_("If you want to quit the Browser,\nPress RED -> EXIT."))
502 self["info"] = self.info
503 self["key_red"] = StaticText(_("Exit"))
504 self["key_green"] = StaticText(_("Start"))
508 self.conf_keyboard = ""
509 self.conf_keymap = ""
511 self.usb_mouse = None
512 self.usb_keyboard = None
514 self.rc_keyboard = None
520 self.vu_service = VuPlayerService(self.session)
521 self.vu_service.start(timeout=5)
523 self.exit_wait_cond = False
524 self.timer_exit_cond = eTimer()
525 self.timer_exit_cond.callback.append(self.resetExitCond)
527 self.test_cond = True
528 self.current_lang_idx = language.getActiveLanguageIndex()
534 change_galpha(set_const=False, set_value=False)
536 self.vu_service.stop()
537 excute_cmd("killall -15 %s"%(self.browser_name))
538 excute_cmd("echo 60 > /proc/sys/vm/swappiness")
539 enable_rc_mouse(False) #rc-mouse off
540 language.activateLanguageIndex(self.current_lang_idx)
541 fbClass.getInstance().unlock()
542 #eRCInput.getInstance().unlock()
546 if self.exit_wait_cond:
548 if is_process_running(self.browser_name) == False:
552 if is_process_running(self.browser_name) == False:
553 ConfigListScreen.keyLeft(self)
555 alpha_value = self.alpha.value
559 if is_process_running(self.browser_name) == False:
560 ConfigListScreen.keyRight(self)
561 alpha_value = self.alpha.value
565 if is_process_running(self.browser_name) == False:
567 self.exit_wait_cond = True
568 self.timer_exit_cond.start(5000)
570 # mouse:keyboard:alpha_value
571 def saveConfig(self):
572 if is_process_running(self.browser_name) == False:
573 command = "echo \"%s:%s:%d:%s\" > %s"%(self.mouse.value, self.keyboard.value, int(self.alpha.value), self.langs.value, self.conf_file)
576 # mouse:keyboard:alpha_value
577 def loadConfig(self):
578 if os.path.exists(self.conf_file) == False:
580 config_list = open(self.conf_file).readline().strip().split(':')
581 if len(config_list) == 3:
582 self.conf_mouse = config_list[0]
583 self.conf_keyboard = config_list[1]
584 self.conf_alpha = config_list[2]
585 elif len(config_list) == 4:
586 self.conf_mouse = config_list[0]
587 self.conf_keyboard = config_list[1]
588 self.conf_alpha = config_list[2]
589 self.conf_keymap = config_list[3]
590 print "load config : ", config_list
592 def resetExitCond(self):
593 self.timer_exit_cond.stop()
594 self.exit_wait_cond = False
596 def makeConfig(self):
598 self.devices_string = ""
599 self.devices = eConsoleAppContainer()
600 self.devices.dataAvail.append(self.callbackDevicesDataAvail)
601 self.devices.appClosed.append(self.callbakcDevicesAppClose)
602 self.devices.execute(_("cat /proc/bus/input/devices"))
604 def callbackDevicesDataAvail(self, ret_data):
605 self.devices_string = self.devices_string + ret_data
607 def callbakcDevicesAppClose(self, retval):
609 self.mouse_list = None
610 self.keyboard_list = None
612 self.makeHandlerList(self.devices_string)
614 if self.conf_mouse == "" or self.getHandlerName(self.conf_mouse) is None:
615 self.conf_mouse = self.mouse_list[0][0]
616 self.mouse = ConfigSelection(default = self.conf_mouse, choices = self.mouse_list)
617 self.list.append(getConfigListEntry(_('Mouse'), self.mouse))
619 if self.conf_keyboard == "" or self.getHandlerName(self.conf_keyboard) is None:
620 self.conf_keyboard = self.keyboard_list[0][0]
621 self.keyboard = ConfigSelection(default = self.conf_keyboard, choices = self.keyboard_list)
622 self.list.append(getConfigListEntry(_('Keyboard'), self.keyboard))
624 if self.conf_keymap == "":
625 self.conf_keymap = self.getLanguage()
626 self.lang_list = [("rc_en", "English(RC)"), ("rc_ch", "German(RC)"), ("en", "English"), ("ch", "German")]
627 self.langs = ConfigSelection(default = self.conf_keymap, choices = self.lang_list)
628 self.list.append(getConfigListEntry(_(" - Type"), self.langs))
630 if self.conf_alpha == "":
631 self.conf_alpha = "255"
632 self.alpha = ConfigSlider(default = int(self.conf_alpha), increment = 10, limits = (0, 255))
633 self.list.append(getConfigListEntry(_("Alpha Value"), self.alpha))
634 self["config"].list = self.list
635 self["config"].l.setList(self.list)
637 def getLanguage(self, lang=language.getLanguage()):
638 if self.current_lang_idx == 1:
642 def makeHandlerList(self, data):
648 lines = data.split('\n')
651 if line is not None and len(line) > 0:
661 h_list = line[12:].strip().split()
662 tn = line[12:].strip().find("mouse")
664 event_list.append((h, _(h)))
665 self.name_list.append((h, n))
666 if n[1:].startswith("dream") and self.rc_mouse is None:
667 for thl in h.split(" "):
668 if thl.startswith("event"):
669 self.rc_mouse = copy.deepcopy(h)
670 self.rc_keyboard = copy.deepcopy(h)
671 print "detected!! rc:", h
673 if h.startswith("mouse") and self.usb_mouse is None:
674 self.usb_mouse = copy.deepcopy(h)
675 print "detected!! usb mouse:",h
677 if tn == -1 and self.usb_keyboard is None:
678 self.usb_keyboard = copy.deepcopy(h)
679 print "detected!! usb keyboard:",h
680 elif line[0] == 'B' and line[3:].startswith("ABS") and p.startswith("usb-"):
682 if self.usb_mouse is not None:
684 if self.usb_keyboard is not None and h == self.usb_keyboard[0]:
685 self.usb_keyboard = None
686 print "clean!! usb keyboard:",h
687 self.usb_mouse = copy.deepcopy(h)
688 print "detected!! usb mouse:",h
690 tmp = copy.deepcopy(event_list)
691 if self.usb_mouse is not None:
692 tmp.insert(0, ("musb", "USB Mouse"))
693 if self.rc_mouse is not None:
694 tmp.insert(0, ("mrc", "Remote Control"))
695 self.mouse_list = tmp
697 tmp = copy.deepcopy(event_list)
698 if self.usb_keyboard is not None:
699 tmp.insert(0, ("kusb", "USB Keyboard"))
700 if self.rc_keyboard is not None:
701 tmp.insert(0, ("krc", "Remote Control"))
702 self.keyboard_list = tmp
703 print "E:", event_list
704 print "M:", self.mouse_list
705 print "K:", self.keyboard_list
707 def startBrowser(self):
708 self.timer_start.stop()
711 excute_cmd("killall -15 %s"%(self.browser_name))
712 excute_cmd("echo 0 > /proc/sys/vm/swappiness")
716 extra_cmd = "export VU_DOWNLOAD_DIR=/tmp; "
717 browser_cmd = "%s/%s -qws" % (self.browser_root, self.browser_name)
719 mouse_param = self.mouse.value
720 if self.mouse.value == "mrc":
721 mouse_param = self.rc_mouse
722 elif self.mouse.value == "musb":
723 mouse_param = self.usb_mouse
724 keyboard_param = self.keyboard.value
725 if self.keyboard.value == "krc":
726 keyboard_param = self.rc_keyboard
727 elif self.keyboard.value == "kusb":
728 keyboard_param = self.usb_keyboard
730 if self.getHandlerName(mouse_param)[1:].startswith("dreambox"):
731 enable_rc_mouse(True) #rc-mouse on
732 if str(mouse_param).startswith("event"):
733 mouse_cmd = "export QWS_MOUSE_PROTO=LinuxInput:/dev/input/%s; " % (str(mouse_param))
736 if self.langs.value == "ch":
737 keymap_param = ":keymap=/usr/share/keymaps/vuplus/ch.qmap"
738 elif self.langs.value == "rc_ch":
739 keymap_param = ":keymap=/usr/share/keymaps/vuplus/de.qmap"
740 elif self.langs.value == "rc_en":
741 keymap_param = ":keymap=/usr/share/keymaps/vuplus/us.qmap"
743 kbd_cmd = "export QWS_KEYBOARD=LinuxInput:/dev/input/%s%s; " % (str(keyboard_param), keymap_param)
745 cmd = "%s%s%s%s" % (extra_cmd, kbd_cmd, mouse_cmd, browser_cmd)
746 print "prepared command : [%s]" % cmd
748 self.launcher = eConsoleAppContainer()
749 self.launcher.appClosed.append(self.callbackLauncherAppClosed)
750 self.launcher.dataAvail.append(self.callbackLauncherDataAvail)
752 fbClass.getInstance().lock()
753 #eRCInput.getInstance().lock()
756 alpha_value = self.alpha.value
757 change_galpha(set_const=True, set_value=True)
759 self.launcher.execute(cmd)
760 print "started browser..."
764 self.info.setText("Starting Webbrowser. Please wait...")
765 if self.lock == False:
766 if self.langs.value == "ch" or self.langs.value == "rc_ch":
767 language.activateLanguageIndex(1)
769 language.activateLanguageIndex(0)
770 self.timer_start = eTimer()
771 self.timer_start.callback.append(self.startBrowser)
772 self.timer_start.start(10)
774 def getHandlerName(self, v):
782 v = self.usb_keyboard
783 for l in self.name_list:
788 def callbackLauncherDataAvail(self, ret_data):
790 if ret_data.startswith("--done--"):
794 def callbackLauncherAppClosed(self, retval = 1):
797 def sessionstart(session, **kwargs):
798 enable_rc_mouse(False)
799 change_galpha(set_const=False, set_value=True)
800 excute_cmd("killall -15 arora")
802 def main(session, **kwargs):
803 session.open(BrowserLauncher)
805 def Plugins(**kwargs):
806 return [PluginDescriptor(where = PluginDescriptor.WHERE_SESSIONSTART, needsRestart = False, fnc=sessionstart),
807 PluginDescriptor(name=_("Web Browser"), description="start web browser", where = PluginDescriptor.WHERE_PLUGINMENU, fnc=main)]