class FlashImageConfig(Screen): def __init__(self, session, curdir, matchingPattern=None): try: sz_w = getDesktop(0).size().width() except: sz_w = 720 if sz_w == 1920: self.skin = skinflashfullhd elif sz_w >= 1280: self.skin = skinflashhd else: self.skin = skinflashsd Screen.__init__(self, session) self.skin_path = resolveFilename(SCOPE_PLUGINS, "Extensions/BackupSuite") self["Title"].setText(_("Select the folder with backup")) self["key_red"] = StaticText(_("Close")) self["key_green"] = StaticText("") self["key_yellow"] = StaticText("") self["key_blue"] = StaticText("") self["curdir"] = StaticText(_("current: %s") % (curdir or '')) self.founds = False self.dualboot = self.dualBoot() self.ForceMode = self.ForceMode() self.filelist = FileList(curdir, matchingPattern=matchingPattern, enableWrapAround=True) self.filelist.onSelectionChanged.append(self.__selChanged) self["filelist"] = self.filelist self["FilelistActions"] = ActionMap( ["SetupActions", "ColorActions"], { "green": self.keyGreen, "red": self.keyRed, "yellow": self.keyYellow, "blue": self.KeyBlue, "ok": self.keyOk, "cancel": self.keyRed }) self.onLayoutFinish.append(self.__layoutFinished) def __layoutFinished(self): pass def dualBoot(self): if getBoxType() == "et8500": rootfs2 = False kernel2 = False f = open("/proc/mtd") l = f.readlines() for x in l: if 'rootfs2' in x: rootfs2 = True if 'kernel2' in x: kernel2 = True f.close() if rootfs2 and kernel2: return True return False def ForceMode(self): if getBoxType() in ("h9", "h9se", "h9combo", "h9combose", "i55plus", "i55se", "h10", "hzero", "h8"): return True return False def getCurrentSelected(self): dirname = self.filelist.getCurrentDirectory() filename = self.filelist.getFilename() if not filename and not dirname: cur = '' elif not filename: cur = dirname elif not dirname: cur = filename else: if not self.filelist.canDescent() or len(filename) <= len(dirname): cur = dirname else: cur = filename return cur or '' def __selChanged(self): self["key_yellow"].setText("") self["key_green"].setText("") self["key_blue"].setText("") self["curdir"].setText(_("current: %s") % (self.getCurrentSelected())) file_name = self.getCurrentSelected() try: if not self.filelist.canDescent( ) and file_name != '' and file_name != '/': filename = self.filelist.getFilename() if filename and filename.endswith(".zip"): self["key_yellow"].setText(_("Unzip")) elif self.filelist.canDescent( ) and file_name != '' and file_name != '/': self["key_green"].setText(_("Run flash")) if os.path.isfile(file_name + LOGFILE) and os.path.isfile(file_name + VERSIONFILE): self["key_yellow"].setText(_("Backup info")) self["key_blue"].setText(_("Delete")) except: pass def keyOk(self): if self.filelist.canDescent(): self.filelist.descent() def confirmedWarning(self, result): if result: self.founds = False self.showparameterlist() def keyGreen(self): if self["key_green"].getText() == _("Run flash"): dirname = self.filelist.getCurrentDirectory() if dirname: warning_text = "\n" if self.dualboot: warning_text += _("\nYou are using dual multiboot!") self.session.openWithCallback( lambda r: self.confirmedWarning(r), MessageBox, _("Warning!\nUse at your own risk! Make always a backup before use!\nDon't use it if you use multiple ubi volumes in ubi layer!" ) + warning_text, MessageBox.TYPE_INFO) def showparameterlist(self): if self["key_green"].getText() == _("Run flash"): dirname = self.getCurrentSelected() model = getBoxType() if dirname: backup_files = [] no_backup_files = [] text = _("Select parameter for start flash!\n") text += _('For flashing your receiver files are needed:\n') if model.startswith("dm"): if "dm9" in model: backup_files = [("kernel.bin"), ("rootfs.tar.bz2")] no_backup_files = [("kernel_cfe_auto.bin"), ("rootfs.bin"), ("root_cfe_auto.jffs2"), ("root_cfe_auto.bin"), ("oe_kernel.bin"), ("oe_rootfs.bin"), ("kernel_auto.bin"), ("uImage"), ("rootfs.ubi")] text += "kernel.bin, rootfs.tar.bz2" elif model in ("dm520", "dm7080", "dm820"): backup_files = [("*.xz")] no_backup_files = [("kernel_cfe_auto.bin"), ("rootfs.bin"), ("root_cfe_auto.jffs2"), ("root_cfe_auto.bin"), ("oe_kernel.bin"), ("oe_rootfs.bin"), ("kernel_auto.bin"), ("kernel.bin"), ("rootfs.tar.bz2"), ("uImage"), ("rootfs.ubi")] text += "*.xz" else: backup_files = [("*.nfi")] no_backup_files = [("kernel_cfe_auto.bin"), ("rootfs.bin"), ("root_cfe_auto.jffs2"), ("root_cfe_auto.bin"), ("oe_kernel.bin"), ("oe_rootfs.bin"), ("kernel_auto.bin"), ("kernel.bin"), ("rootfs.tar.bz2"), ("uImage"), ("rootfs.ubi")] text += "*.nfi" elif model.startswith("gb"): if not "4k" in model: backup_files = [("kernel.bin"), ("rootfs.bin")] no_backup_files = [("kernel_cfe_auto.bin"), ("root_cfe_auto.jffs2"), ("root_cfe_auto.bin"), ("oe_kernel.bin"), ("oe_rootfs.bin"), ("rootfs.tar.bz2"), ("kernel_auto.bin"), ("uImage"), ("rootfs.ubi")] text += "kernel.bin, rootfs.bin" else: backup_files = [("kernel.bin"), ("rootfs.tar.bz2")] no_backup_files = [("kernel_cfe_auto.bin"), ("rootfs.bin"), ("root_cfe_auto.jffs2"), ("root_cfe_auto.bin"), ("oe_kernel.bin"), ("oe_rootfs.bin"), ("kernel_auto.bin"), ("uImage"), ("rootfs.ubi")] text += "kernel.bin, rootfs.tar.bz2" elif model.startswith("vu"): if "4k" in model: backup_files = [("kernel_auto.bin"), ("rootfs.tar.bz2")] no_backup_files = [("kernel_cfe_auto.bin"), ("rootfs.bin"), ("root_cfe_auto.jffs2"), ("root_cfe_auto.bin"), ("oe_kernel.bin"), ("oe_rootfs.bin"), ("kernel.bin"), ("uImage"), ("rootfs.ubi")] text += "kernel_auto.bin, rootfs.tar.bz2" elif model in ("vuduo2", "vusolose", "vusolo2", "vuzero"): backup_files = [("kernel_cfe_auto.bin"), ("root_cfe_auto.bin")] no_backup_files = [("rootfs.bin"), ("root_cfe_auto.jffs2"), ("oe_kernel.bin"), ("oe_rootfs.bin"), ("kernel.bin"), ("rootfs.tar.bz2"), ("kernel_auto.bin"), ("uImage"), ("rootfs.ubi")] text += "kernel_cfe_auto.bin, root_cfe_auto.bin" else: backup_files = [("kernel_cfe_auto.bin"), ("root_cfe_auto.jffs2")] no_backup_files = [("rootfs.bin"), ("root_cfe_auto.bin"), ("oe_kernel.bin"), ("oe_rootfs.bin"), ("kernel.bin"), ("rootfs.tar.bz2"), ("kernel_auto.bin"), ("uImage"), ("rootfs.ubi")] text += "kernel_cfe_auto.bin, root_cfe_auto.jffs2" else: if model in ("hd51", "h7", "sf4008", "sf5008", "sf8008", "sf8008m", "vs1500", "et11000", "et13000", "bre2ze4k", "spycat4k", "spycat4kmini", "protek4k", "e4hdultra", "arivacombo", "arivatwin") or model.startswith( ("anadol", "axashis4", "dinobot4", "ferguson4", "mediabox4", "axashisc4")): backup_files = [("kernel.bin"), ("rootfs.tar.bz2")] no_backup_files = [("kernel_cfe_auto.bin"), ("rootfs.bin"), ("root_cfe_auto.jffs2"), ("root_cfe_auto.bin"), ("oe_kernel.bin"), ("oe_rootfs.bin"), ("kernel_auto.bin"), ("uImage"), ("rootfs.ubi")] text += "kernel.bin, rootfs.tar.bz2" elif model in ("h9", "h9se", "h9combo", "h9combose", "i55plus", "i55se", "h10", "hzero", "h8", "dinobotu55", "iziboxx3", "dinoboth265", "axashistwin", "protek4kx1"): backup_files = [("uImage"), ("rootfs.ubi")] no_backup_files = [("kernel_cfe_auto.bin"), ("root_cfe_auto.jffs2"), ("root_cfe_auto.bin"), ("oe_kernel.bin"), ("oe_rootfs.bin"), ("rootfs.tar.bz2"), ("kernel_auto.bin"), ("kernel.bin"), ("rootfs.tar.bz2")] text += "uImage, rootfs.ubi" elif model in ("hd60", "hd61", "multibox", "multiboxplus"): backup_files = [("uImage"), ("rootfs.tar.bz2")] no_backup_files = [("kernel_cfe_auto.bin"), ("root_cfe_auto.jffs2"), ("root_cfe_auto.bin"), ("oe_kernel.bin"), ("oe_rootfs.bin"), ("rootfs.ubi"), ("kernel_auto.bin"), ("kernel.bin")] text += "uImage, rootfs.tar.bz2" elif model.startswith( ("et4", "et5", "et6", "et7", "et8", "et9", "et10")): backup_files = [("kernel.bin"), ("rootfs.bin")] no_backup_files = [("kernel_cfe_auto.bin"), ("root_cfe_auto.jffs2"), ("root_cfe_auto.bin"), ("oe_kernel.bin"), ("oe_rootfs.bin"), ("rootfs.tar.bz2"), ("kernel_auto.bin"), ("uImage"), ("rootfs.ubi")] text += "kernel.bin, rootfs.bin" elif model.startswith("ebox"): backup_files = [("kernel_cfe_auto.bin"), ("root_cfe_auto.jffs2")] no_backup_files = [("rootfs.bin"), ("root_cfe_auto.bin"), ("oe_kernel.bin"), ("oe_rootfs.bin"), ("kernel.bin"), ("rootfs.tar.bz2"), ("kernel_auto.bin"), ("uImage"), ("rootfs.ubi")] text += "kernel_cfe_auto.bin, root_cfe_auto.jffs2" elif model.startswith( ("fusion", "pure", "optimus", "force", "iqon", "ios", "tm2", "tmn", "tmt", "tms", "lunix", "mediabox", "vala")): backup_files = [("oe_kernel.bin"), ("oe_rootfs.bin")] no_backup_files = [("kernel_cfe_auto.bin"), ("rootfs.bin"), ("root_cfe_auto.jffs2"), ("root_cfe_auto.bin"), ("kernel.bin"), ("rootfs.tar.bz2"), ("kernel_auto.bin"), ("uImage"), ("rootfs.ubi")] text += "oe_kernel.bin, oe_rootfs.bin" elif "4k" or "uhd" in model: backup_files = [("oe_kernel.bin"), ("rootfs.tar.bz2")] no_backup_files = [("kernel_cfe_auto.bin"), ("rootfs.bin"), ("root_cfe_auto.jffs2"), ("root_cfe_auto.bin"), ("oe_rootfs.bin"), ("kernel.bin"), ("kernel_auto.bin"), ("uImage"), ("rootfs.ubi")] text += "oe_kernel.bin, rootfs.tar.bz2" else: backup_files = [("kernel.bin"), ("rootfs.bin")] no_backup_files = [("kernel_cfe_auto.bin"), ("root_cfe_auto.jffs2"), ("root_cfe_auto.bin"), ("oe_kernel.bin"), ("oe_rootfs.bin"), ("rootfs.tar.bz2"), ("kernel_auto.bin"), ("uImage"), ("rootfs.ubi")] text += "kernel.bin, rootfs.bin" try: self.founds = False text += _('\nThe found files:') for name in os.listdir(dirname): if name in backup_files: text += _(" %s (maybe ok)") % name self.founds = True if name in no_backup_files: text += _(" %s (maybe error)") % name self.founds = True if not self.founds: text += _(' nothing!') except: pass if self.founds: open_list = [ (_("Simulate (no write)"), "simulate"), (_("Standard (root and kernel)"), "standard"), (_("Only root"), "root"), (_("Only kernel"), "kernel"), ] open_list2 = [ (_("Simulate second partition (no write)"), "simulate2"), (_("Second partition (root and kernel)"), "standard2"), (_("Second partition (only root)"), "rootfs2"), (_("Second partition (only kernel)"), "kernel2"), ] if self.dualboot: open_list += open_list2 else: open_list = [ (_("Exit"), "exit"), ] self.session.openWithCallback(self.Callbackflashing, MessageBox, text, simple=True, list=open_list) def Callbackflashing(self, ret): if ret: if ret == "exit": self.close() return if self.session.nav.RecordTimer.isRecording(): self.session.open( MessageBox, _("A recording is currently running. Please stop the recording before trying to start a flashing." ), MessageBox.TYPE_ERROR) self.founds = False return dir_flash = self.getCurrentSelected() text = _("Flashing: ") cmd = "echo -e" if ret == "simulate": text += _("Simulate (no write)") cmd = "%s -n '%s'" % (ofgwrite_bin, dir_flash) elif ret == "standard": text += _("Standard (root and kernel)") if self.ForceMode: cmd = "%s -f -r -k '%s' > /dev/null 2>&1 &" % ( ofgwrite_bin, dir_flash) else: cmd = "%s -r -k '%s' > /dev/null 2>&1 &" % (ofgwrite_bin, dir_flash) elif ret == "root": text += _("Only root") cmd = "%s -r '%s' > /dev/null 2>&1 &" % (ofgwrite_bin, dir_flash) elif ret == "kernel": text += _("Only kernel") cmd = "%s -k '%s' > /dev/null 2>&1 &" % (ofgwrite_bin, dir_flash) elif ret == "simulate2": text += _("Simulate second partition (no write)") cmd = "%s -kmtd3 -rmtd4 -n '%s'" % (ofgwrite_bin, dir_flash) elif ret == "standard2": text += _("Second partition (root and kernel)") cmd = "%s -kmtd3 -rmtd4 '%s' > /dev/null 2>&1 &" % ( ofgwrite_bin, dir_flash) elif ret == "rootfs2": text += _("Second partition (only root)") cmd = "%s -rmtd4 '%s' > /dev/null 2>&1 &" % (ofgwrite_bin, dir_flash) elif ret == "kernel2": text += _("Second partition (only kernel)") cmd = "%s -kmtd3 '%s' > /dev/null 2>&1 &" % (ofgwrite_bin, dir_flash) else: return message = "echo -e '\n" message += _('NOT found files for flashing!\n') message += "'" if ret == "simulate" or ret == "simulate2": if self.founds: message = "echo -e '\n" message += _('Show only found image and mtd partitions.\n') message += "'" else: if self.founds: message = "echo -e '\n" message += _( 'ofgwrite will stop enigma2 now to run the flash.\n') message += _( 'Your STB will freeze during the flashing process.\n') message += _( 'Please: DO NOT reboot your STB and turn off the power.\n' ) message += _( 'The image or kernel will be flashing and auto booted in few minutes.\n' ) message += "'" self.session.open(Console, text, [message, cmd]) def keyRed(self): self.close() def keyYellow(self): if self["key_yellow"].getText() == _("Unzip"): filename = self.filelist.getFilename() if filename and filename.endswith(".zip"): self.session.openWithCallback( self.doUnzip, MessageBox, _("Do you really want to unpack %s ?") % filename, MessageBox.TYPE_YESNO) elif self["key_yellow"].getText() == _("Backup info"): self.session.open(MessageBox, "\n\n\n%s" % self.getBackupInfo(), MessageBox.TYPE_INFO) def getBackupInfo(self): backup_dir = self.getCurrentSelected() backup_info = "" for line in open(backup_dir + VERSIONFILE, "r"): backup_info += line return backup_info def doUnzip(self, answer): if answer is True: dirname = self.filelist.getCurrentDirectory() filename = self.filelist.getFilename() if dirname and filename: try: os.system('unzip -o %s%s -d %s' % (dirname, filename, dirname)) self.filelist.refresh() except: pass def confirmedDelete(self, answer): if answer is True: backup_dir = self.getCurrentSelected() cmdmessage = "echo -e 'Removing backup: %s\n'" % os.path.basename( backup_dir.rstrip('/')) cmddelete = "rm -rf %s > /dev/null 2>&1" % backup_dir self.session.open(Console, _("Delete backup"), [cmdmessage, cmddelete], self.filelist.refresh) def KeyBlue(self): if self["key_blue"].getText() == _("Delete"): self.session.openWithCallback( self.confirmedDelete, MessageBox, _("You are about to delete this backup:\n\n%s\nContinue?") % self.getBackupInfo(), MessageBox.TYPE_YESNO)
class FlashImageConfig(Screen): def __init__(self, session, curdir, matchingPattern=None): try: sz_w = getDesktop(0).size().width() except: sz_w = 720 if sz_w >= 1280: self.skin = skinflashhd else: self.skin = skinflashsd Screen.__init__(self, session) self["Title"].setText(_("Select the folder with backup")) self["key_red"] = StaticText(_("Cancel")) self["key_green"] = StaticText("") self["key_yellow"] = StaticText("") self["curdir"] = StaticText(_("current: %s")%(curdir or '')) self.founds = False self.filelist = FileList(curdir, matchingPattern=matchingPattern, enableWrapAround=True) self.filelist.onSelectionChanged.append(self.__selChanged) self["filelist"] = self.filelist self["FilelistActions"] = ActionMap(["SetupActions", "ColorActions"], { "green": self.keyGreen, "red": self.keyRed, "yellow": self.keyYellow, "ok": self.keyOk, "cancel": self.keyRed }) self.onLayoutFinish.append(self.__layoutFinished) def __layoutFinished(self): pass def getCurrentSelected(self): dirname = self.filelist.getCurrentDirectory() filename = self.filelist.getFilename() if not filename and not dirname: cur = '' elif not filename: cur = dirname elif not dirname: cur = filename else: if not self.filelist.canDescent() or len(filename) <= len(dirname): cur = dirname else: cur = filename return cur or '' def __selChanged(self): self["key_yellow"].setText("") self["key_green"].setText("") self["curdir"].setText(_("current: %s")%(self.getCurrentSelected())) file_name = self.getCurrentSelected() try: if not self.filelist.canDescent() and file_name != '' and file_name != '/': filename = self.filelist.getFilename() if filename and filename.endswith(".zip"): self["key_yellow"].setText(_("Unzip")) elif self.filelist.canDescent() and file_name != '' and file_name != '/': self["key_green"].setText(_("Run flash")) except: pass def keyOk(self): if self.filelist.canDescent(): self.filelist.descent() def confirmedWarning(self, result): if result: self.founds = False self.showparameterlist() def keyGreen(self): if self["key_green"].getText() == _("Run flash"): dirname = self.filelist.getCurrentDirectory() if dirname: self.session.openWithCallback(lambda r: self.confirmedWarning(r), MessageBox, _("Warning!\nUse at your own risk! Make always a backup before use!\nDon't use it if you use multiple ubi volumes in ubi layer!") , MessageBox.TYPE_INFO) def showparameterlist(self): if self["key_green"].getText() == _("Run flash"): dirname = self.getCurrentSelected() if dirname: backup_files = [] no_backup_files = [] text = _("Select parameter for start flash!\n") text += _('For flashing your receiver files are needed:\n') # refer to /proc/stb/info/hwmodel file. if os.path.exists("/proc/stb/info/hwmodel"): f = open("/proc/stb/info/hwmodel") model = f.read().strip() f.close() if model in ["force1", "force1plus", "twin", "2T", "nano", "single", "nano2T", "ios100", "ios200", "ios300", "ios300NEW", "optimussos1", "optimussos2", "tmnano2super", "tmnano3tcombo", "tmnanose", "tmnanosecombo", "tmnanoeco", "force2", "force2plus", "optimussos1plus", "optimussos2plus", "optimussos3plus"]: backup_files = [("oe_kernel"), ("oe_rootfs.bin")] no_backup_files = ["oe_kernel.bin", "oe_rootfs.bin", "oe_rootfs.bin"] text += 'oe_kernel.bin, oe_rootfs.bin' else: backup_files = ["kernel_cfe_auto.bin", "root_cfe_auto.jffs2"] no_backup_files = ["kernel.bin", "root_cfe_auto.bin", "rootfs.bin"] text += 'kernel_cfe_auto.bin, root_cfe_auto.jffs2' # if os.path.exists("/proc/stb/info/boxtype"): # backup_files = [("kernel.bin"), ("rootfs.bin")] # no_backup_files = ["kernel_cfe_auto.bin", "root_cfe_auto.jffs2", "root_cfe_auto.bin"] # text += 'kernel.bin, rootfs.bin' # elif os.path.exists("/proc/stb/info/vumodel"): # f = open("/proc/stb/info/vumodel") # model = f.read().strip() # f.close() # if model in ["solo2", "duo2"]: # backup_files = ["kernel_cfe_auto.bin", "root_cfe_auto.bin"] # no_backup_files = ["kernel.bin", "root_cfe_auto.jffs2", "rootfs.bin"] # text += 'kernel_cfe_auto.bin, root_cfe_auto.bin' try: self.founds = False text += _('\nThe found files:') for name in os.listdir(dirname): if name in backup_files: text += _(" %s (maybe ok)") % name self.founds = True if name in no_backup_files: text += _(" %s (maybe error)") % name self.founds = True if not self.founds: text += _(' nothing!') except: pass if self.founds: open_list = [ (_("Simulate (no write)"), "simulate"), (_("Standard (root and kernel)"), "Standard"), (_("Only root"), "root"), (_("Only kernel"), "kernel"), (_("Only root with use mtdy device"), "mtdy"), (_("Only kernel with use mtdx device"), "mtdx"), ] else: open_list = [ (_("Exit"), "exit"), ] self.session.openWithCallback(self.Callbackflashing, MessageBox, text, simple = True, list = open_list) def Callbackflashing(self, ret): if ret: if ret == "exit": self.close() return if self.session.nav.RecordTimer.isRecording(): self.session.open(MessageBox, _("A recording is currently running. Please stop the recording before trying to start a flashing."), MessageBox.TYPE_ERROR) self.founds = False return dir_flash = self.getCurrentSelected() text = _("Flashing: ") cmd = "echo -e" if ret == "simulate": text += _("Simulate (no write)") cmd = "%s -n '%s'" % (ofgwrite_bin, dir_flash) elif ret == "Standard": text += _("Standard (root and kernel)") cmd = "%s -r -k '%s' > /dev/null 2>&1 &" % (ofgwrite_bin, dir_flash) elif ret == "root": text += _("Only root") cmd = "%s -r '%s' > /dev/null 2>&1 &" % (ofgwrite_bin, dir_flash) elif ret == "kernel": text += _("Only kernel") cmd = "%s -k '%s' > /dev/null 2>&1 &" % (ofgwrite_bin, dir_flash) elif ret == "mtdy": text += _("Only root with use mtdy device") cmd = "%s -rmtdy '%s' > /dev/null 2>&1 &" % (ofgwrite_bin, dir_flash) elif ret == "mtdx": text += _("Only kernel with use mtdx device") cmd = "%s -kmtdx '%s' > /dev/null 2>&1 &" % (ofgwrite_bin, dir_flash) else: return message = "echo -e '\n" message += _('NOT found files for flashing!\n') message += "'" if ret != "simulate": if self.founds: message = "echo -e '\n" message += _('ofgwrite will stop enigma2 now to run the flash.\n') message += _('Your STB will freeze during the flashing process.\n') message += _('Please: DO NOT reboot your STB and turn off the power.\n') message += _('The image or kernel will be flashing and auto booted in few minutes.\n') message += "'" else: if self.founds: message = "echo -e '\n" message += _('Show only found image and mtd partitions.\n') message += "'" try: if os.path.exists(ofgwrite_bin): os.chmod(ofgwrite_bin, 0755) except: pass self.session.open(Console, text,[message, cmd]) def keyRed(self): self.close() def keyYellow(self): if self["key_yellow"].getText() == _("Unzip"): filename = self.filelist.getFilename() if filename and filename.endswith(".zip"): self.session.openWithCallback(self.doUnzip, MessageBox, _("Do you really want to unpack %s ?") % filename, MessageBox.TYPE_YESNO) def doUnzip(self, answer): if answer is True: dirname = self.filelist.getCurrentDirectory() filename = self.filelist.getFilename() if dirname and filename: try: os.system('unzip -o %s%s -d %s'%(dirname,filename,dirname)) self.filelist.refresh() except: pass
class EVOMC_AudioPlayer(Screen, HelpableScreen): def __init__(self, session): Screen.__init__(self, session) HelpableScreen.__init__(self) self.bScreen = self.session.instantiateDialog(Blackscreen) self.bScreen.show() self.myaudioScreenSaverconfig = int(config.plugins.EVOMC_saver.myaudioScreenSaver.value) self.myaudioScreenSaverTimer = eTimer() self.myaudioScreenSaverTimer.timeout.get().append(self.myaudioScreenSaverTimer_Timeout) self.ResetmyaudioScreenSaverTimer() self.start_timer = eTimer() self.moveTimer = eTimer() self.start_timer.timeout.get().append(self.onLayoutFinished) self.isVisible = True self.oldService = self.session.nav.getCurrentlyPlayingServiceReference() self.skindir = "/usr/lib/enigma2/python/Plugins/Extensions/EVOMediaCenter/skins/basic" self.coverArtFileName = "" self["PositionGauge"] = ServicePositionGauge(self.session.nav) self["key_red"] = Button(_("Delete")) self["key_green"] = Button(_("Play All")) self["key_yellow"] = Button(_("Favorites")) self["key_blue"] = Button(_("Settings")) self["fileinfo"] = Label() self["coverArt"] = MediaPixmap() self["currentfolder"] = Label() self["currentfavname"] = Label() self.playlist = MyPlayList() self.currList = "filelist" self.curfavfolder = -1 self["play"] = Pixmap() self["stop"] = Pixmap() self["curplayingtitle"] = Label() self.currPlaying = 0 self.PlaySingle = 0 self.PlaySingleRUN = 0 self.PlayAll = 0 self.__event_tracker = ServiceEventTracker(screen=self, eventmap= { iPlayableService.evEOF: self.doEOF, iPlayableService.evStopped: self.StopPlayback, iPlayableService.evUser+11: self.__evDecodeError, iPlayableService.evUser+12: self.__evPluginError, iPlayableService.evUser+13: self["coverArt"].embeddedCoverArt }) self["actions"] = HelpableActionMap(self, "EVOMC_AudioPlayerActions", { "ok": (self.KeyPlaySingle, "Play selected file"), "left": (self.leftUp, "List Top"), "right": (self.rightDown, "List Bottom"), "up": (self.up, "List up"), "down": (self.down, "List down"), "menu": (self.KeyMenu, "File / Folder Options"), "video": (self.visibility, "Show / Hide Player"), "nextBouquet": (self.NextFavFolder, "Next Favorite Folder"), "prevBouquet": (self.PrevFavFolder, "Previous Favorite Folder"), "red": (self.deleteFile, "Delete File"), "green": (self.KeyPlayAll, "Play All"), "yellow": (self.FavoriteFolders, "Favorite Folders"), "blue": (self.Settings, "Settings"), }, -2) self["OkCancelActions"] = HelpableActionMap(self, "OkCancelActions", { "cancel": (self.Exit, "Exit Audio Player"), }, -2) self["InfobarShowHideActions"] = HelpableActionMap(self, "InfobarShowHideActions", { "toggleShow": (self.showFileInfo, "Show File Info"), }, -2) self["MediaPlayerActions"] = HelpableActionMap(self, "MediaPlayerActions", { "stop": (self.StopPlayback, "Stop Playback"), }, -2) self.aspect = getAspect() currDir = config.plugins.EVOMC_ap.lastDir.value if not pathExists(currDir): currDir = "/" self["currentfolder"].setText(str(currDir)) self.filelist = FileList(currDir, useServiceRef = True, showDirectories = True, showFiles = True, matchingPattern = "(?i)^.*\.(mp3|ogg|wma|wav|wave|flac|m4a)") self["filelist"] = self.filelist self["thumbnail"] = Pixmap() evfd.getInstance().vfd_write_string("EVO-AUDIOPLAYER") self.ThumbTimer = eTimer() self.ThumbTimer.callback.append(self.showThumb) self.ThumbTimer.start(config.plugins.EVOMC_ap.preview_delay.getValue() * 1000, True) self.DimmerTimer = eTimer() self.DimmerTimer.callback.append(self.showDimmer) self.DimmerTimer.start(config.plugins.EVOMC_all.dimmer_delay.getValue() * 1000, True) self.BlinkingPlayIconTimer = eTimer() self.BlinkingPlayIconTimer.callback.append(self.BlinkingPlayIcon) self.blinking=False self.FileInfoTimer = eTimer() self.FileInfoTimer.callback.append(self.updateFileInfo) self.myaudioScreenSaverconfig = int(config.plugins.EVOMC_saver.myaudioScreenSaver.value) self.ResetmyaudioScreenSaverTimer() def onLayoutFinished(self): global startindex self.startindex = startindex self.num += 1 if startindex is not None: self.start_timer.stop() else: if self.num < 30: self.start_timer.start(2000) else: self.start_timer.stop() fehler = "Fehler beim automatischen Start" self.session.open(MessageBox,_("%s" %fehler), MessageBox.TYPE_INFO) def myaudioScreenSaverTimer_Timeout(self): if self.myaudioScreenSaverTimer.isActive(): self.myaudioScreenSaverTimer.stop() self.session.openWithCallback(self.ResetmyaudioScreenSaverTimer,myaudioScreenSaver) def ResetmyaudioScreenSaverTimer(self): if onmyaudioScreenSaver: pass if self.myaudioScreenSaverconfig != 0: if self.myaudioScreenSaverTimer.isActive(): self.myaudioScreenSaverTimer.stop() self.myaudioScreenSaverTimer.start(self.myaudioScreenSaverconfig * 1000) def deleteFile(self): if self.currList == "filelist": self.service = self.filelist.getServiceRef() else: self.service = self.playlist.getSelection() if self.service is None: return if self.service.type != 4098 and self.session.nav.getCurrentlyPlayingServiceReference() is not None: if self.service == self.session.nav.getCurrentlyPlayingServiceReference(): self.stopEntry() serviceHandler = eServiceCenter.getInstance() offline = serviceHandler.offlineOperations(self.service) info = serviceHandler.info(self.service) name = info and info.getName(self.service) result = False if offline is not None: # simulate first if not offline.deleteFromDisk(1): result = True if result == True: self.session.openWithCallback(self.deleteConfirmed_offline, MessageBox, _("Do you really want to delete %s?") % (name)) else: self.session.openWithCallback(self.close, MessageBox, _("You cannot delete this!"), MessageBox.TYPE_ERROR) def deleteConfirmed_offline(self, confirmed): if confirmed: serviceHandler = eServiceCenter.getInstance() offline = serviceHandler.offlineOperations(self.service) result = False if offline is not None: # really delete! if not offline.deleteFromDisk(0): result = True if result == False: self.session.open(MessageBox, _("Delete failed!"), MessageBox.TYPE_ERROR) else: self.removeListEntry() def removeListEntry(self): self.savePlaylistOnExit = True currdir = self.filelist.getCurrentDirectory() self.filelist.changeDir(currdir) deleteend = False while not deleteend: index = 0 deleteend = True if len(self.playlist) > 0: for x in self.playlist.list: if self.service == x[0]: self.playlist.deleteFile(index) deleteend = False break index += 1 self.playlist.updateList() if self.currList == "playlist": if len(self.playlist) == 0: self.switchToFileList() def up(self): self["filelist"].up() system("stfbcontrol a 255") self.ThumbTimer.start(config.plugins.EVOMC_ap.preview_delay.getValue() * 1000, True) self.DimmerTimer.start(config.plugins.EVOMC_all.dimmer_delay.getValue() * 1000, True) def down(self): self["filelist"].down() system("stfbcontrol a 255") self.ThumbTimer.start(config.plugins.EVOMC_ap.preview_delay.getValue() * 1000, True) self.DimmerTimer.start(config.plugins.EVOMC_all.dimmer_delay.getValue() * 1000, True) def leftUp(self): self["filelist"].pageUp() system("stfbcontrol a 255") self.ThumbTimer.start(config.plugins.EVOMC_ap.preview_delay.getValue() * 1000, True) self.DimmerTimer.start(config.plugins.EVOMC_all.dimmer_delay.getValue() * 1000, True) def rightDown(self): self["filelist"].pageDown() system("stfbcontrol a 255") self.ThumbTimer.start(config.plugins.EVOMC_ap.preview_delay.getValue() * 1000, True) self.DimmerTimer.start(config.plugins.EVOMC_all.dimmer_delay.getValue() * 1000, True) def showDimmer(self): if config.plugins.EVOMC_all.showDimmer.value: system("stfbcontrol a 80") # else: # pass def NextFavFolder(self): system("stfbcontrol a 255") if self.curfavfolder + 1 < config.plugins.EVOMC_favorites.foldercount.value: self.curfavfolder += 1 self.favname = config.plugins.EVOMC_favorites.folders[self.curfavfolder].name.value self.folder = config.plugins.EVOMC_favorites.folders[self.curfavfolder].basedir.value self["currentfolder"].setText(("%s") % (self.folder)) self["currentfavname"].setText(("%s") % (self.favname)) if pathExists(self.folder) == True: self["filelist"].changeDir(self.folder) else: return def PrevFavFolder(self): system("stfbcontrol a 255") if self.curfavfolder <= 0: return else: self.curfavfolder -= 1 self.favname = config.plugins.EVOMC_favorites.folders[self.curfavfolder].name.value self.folder = config.plugins.EVOMC_favorites.folders[self.curfavfolder].basedir.value self["currentfolder"].setText(("%s") % (self.folder)) self["currentfavname"].setText(("%s") % (self.favname)) if pathExists(self.folder) == True: self["filelist"].changeDir(self.folder) def KeyPlaySingle(self): filename = self["filelist"].getFilename() print "filename", filename print "self.PlaySingle", self.PlaySingle if self.PlaySingleRUN == 0: if self.PlaySingle == 1 or config.plugins.EVOMC_ap.showPreview.getValue(): if filename.upper().endswith(".MP3") or filename.upper().endswith(".OGG") or filename.upper().endswith(".WAV") or filename.upper().endswith(".WAVE") or filename.upper().endswith(".FLAC") or filename.upper().endswith(".M4A"): return else: if config.plugins.EVOMC_ap.showPreview.getValue(): if filename.upper().endswith(".MP3") or filename.upper().endswith(".OGG") or filename.upper().endswith(".WAV") or filename.upper().endswith(".WAVE") or filename.upper().endswith(".FLAC") or filename.upper().endswith(".M4A"): return system("stfbcontrol a 255") self.ThumbTimer.stop() if self["filelist"].canDescent(): self["currentfavname"].setText("") self.curfavfolder = -1 self.filelist.descent() self["currentfolder"].setText(str(self.filelist.getCurrentDirectory())) else: self.PlaySingle = 1 self.PlaySingleRUN = 1 self.PlayService() self.BlinkingPlayIconTimer.stop() def KeyPlayAll(self): self.ThumbTimer.stop() if not self["filelist"].canDescent(): self.PlaySingle = 0 self.PlayAll = 1 self.PlayService() self.BlinkingPlayIconTimer.start(1000, True) def PlayService(self): system("stfbcontrol a 255") self.StopPlayback() self.filelist.refresh() self.currPlaying = 1 if self.PlayAll == 1: self.BlinkingPlayIconTimer.start(1000, True) evfd.getInstance().vfd_write_string("PLAY") self.session.nav.playService(self["filelist"].getServiceRef()) self.FileInfoTimer.start(2000, True) self["play"].instance.setPixmapFromFile(str(self.skindir) + "/images/icons/play_enabled.png") self["stop"].instance.setPixmapFromFile(str(self.skindir) + "/images/icons/stop_disabled.png") system("vfdctl +play") system("vfdctl +mp3") system("vfdctl +music") path = self["filelist"].getFilename() self["coverArt"].updateCoverArt(path) def JumpToFolder(self, jumpto = None): if jumpto is None: return else: self["filelist"].changeDir(jumpto) self["currentfolder"].setText(("%s") % (jumpto)) def FavoriteFolders(self): self.session.openWithCallback(self.JumpToFolder, EVOMC_FavoriteFolders) def StartThumb(self): self.session.openWithCallback(self.returnVal, ThumbView, self.filelist.getFileList(), self.filelist.getFilename(), self.filelist.getCurrentDirectory()) def showThumb(self): if config.plugins.EVOMC_ap.showPreview.getValue() == False: return if self["filelist"].canDescent(): return else: if self["filelist"].getServiceRef() is not None: system("stfbcontrol a 255") self.ThumbTimer.stop() system("killall -9 showiframe") system("stfbcontrol a 255") self.filelist.refresh() self.session.nav.stopService() self.session.nav.playService(self["filelist"].getServiceRef()) self.currPlaying = 1 self["play"].instance.setPixmapFromFile(str(self.skindir) + "/images/icons/play_enabled.png") self["stop"].instance.setPixmapFromFile(str(self.skindir) + "/images/icons/stop_disabled.png") self.FileInfoTimer.start(2000, True) self.BlinkingPlayIconTimer.start(1000, True) def returnVal(self, val=0): if val > 0: for x in self.filelist.getFileList(): if x[0][1] == True: val += 1 self.filelist.moveToIndex(val) def StartExif(self): if not self.filelist.canDescent(): self.session.open(ExifView, self.filelist.getCurrentDirectory() + self.filelist.getFilename(), self.filelist.getFilename()) def visibility(self, force=1): if self.isVisible == True: self.isVisible = False self.hide() else: self.isVisible = True self.show() def BlinkingPlayIcon(self): if self.blinking: self.blinking=False self["play"].instance.setPixmapFromFile(str(self.skindir) + "/images/icons/play_disabled.png") self.BlinkingPlayIconTimer.start(1000, True) else: self.blinking=True self["play"].instance.setPixmapFromFile(str(self.skindir) + "/images/icons/play_enabled.png") self.BlinkingPlayIconTimer.start(1000, True) def StopPlayback(self): evfd.getInstance().vfd_write_string("STOP") if self.isVisible == False: self.show() self.isVisible = True if self.session.nav.getCurrentService() is None: return else: self.session.nav.stopService() self["play"].instance.setPixmapFromFile(str(self.skindir) + "/images/icons/play_disabled.png") self["stop"].instance.setPixmapFromFile(str(self.skindir) + "/images/icons/stop_enabled.png") self.currPlaying = 0 self.BlinkingPlayIconTimer.stop() self.ThumbTimer.stop() system("killall -9 showiframe") system("stfbcontrol a 255") self.ThumbTimer.start(config.plugins.EVOMC_ap.preview_delay.getValue() * 1000, True) self.DimmerTimer.start(config.plugins.EVOMC_all.dimmer_delay.getValue() * 1000, True) system("vfdctl -play") system("vfdctl -mp3") system("vfdctl -music") self.StopPlayback() def showFileInfo(self): if self["filelist"].canDescent(): return else: system("stfbcontrol a 255") self.ThumbTimer.start(config.plugins.EVOMC_ap.preview_delay.getValue() * 1000, True) self.DimmerTimer.start(config.plugins.EVOMC_all.dimmer_delay.getValue() * 1000, True) self.session.open(EVOMC_AudioInfoView, self["filelist"].getCurrentDirectory() + self["filelist"].getFilename() , self["filelist"].getFilename(), self["filelist"].getServiceRef()) def updateFileInfo(self): if self["filelist"].canDescent(): return currPlay = self.session.nav.getCurrentService() if currPlay is not None: stitle = currPlay.info().getInfoString(iServiceInformation.sTagTitle) sArtist = currPlay.info().getInfoString(iServiceInformation.sTagArtist) sAlbum = currPlay.info().getInfoString(iServiceInformation.sTagAlbum) sGenre = currPlay.info().getInfoString(iServiceInformation.sTagGenre) sYear = currPlay.info().getInfoString(iServiceInformation.sTimeCreate) # sComment = currPlay.info().getInfoString(iServiceInformation.sTagComment) if stitle == "": stitle = currPlay.info().getName().split('/')[-1] self["fileinfo"].setText("Title: " + stitle + "\nArtist: " + sArtist + "\nAlbum: " + sAlbum + "\nGenre: " + sGenre) self["curplayingtitle"].setText(stitle) else: pass def doEOF(self): try: print "EVO-MediaCenter: EOF Event ..." if self.PlaySingle == 0: print "Play Next File ..." self.ThumbTimer.stop() self.down() try: self.PlayService() except: pass else: print "Stop Playback ..." self.StopPlayback() system("vfdctl -play") system("vfdctl -mp3") system("vfdctl -music") except: pass def __evDecodeError(self): currPlay = self.session.nav.getCurrentService() sAudioType = currPlay.info().getInfoString(iServiceInformation.sUser+10) print "[__evAudioDecodeError] audio-codec %s can't be decoded by hardware" % (sAudioType) self.session.open(MessageBox, _("This UFS can't decode %s streams!") % sAudioType, type = MessageBox.TYPE_INFO,timeout = 5 ) def __evPluginError(self): currPlay = self.session.nav.getCurrentService() message = currPlay.info().getInfoString(iServiceInformation.sUser+12) print "[__evPluginError]" , message self.session.open(MessageBox, message, type = MessageBox.TYPE_INFO,timeout = 20 ) def Playlists(self): evfd.getInstance().vfd_write_string("PLAYLIST") self.ThumbTimer.stop() self.session.open(MessageBox,"Coming soon ... :)", MessageBox.TYPE_INFO) def KeyMenu(self): self.ThumbTimer.stop() if self["filelist"].canDescent(): if self.filelist.getCurrent()[0][1]: self.currentDirectory = self.filelist.getCurrent()[0][0] self.foldername = self.currentDirectory.split('/') self.foldername = self.foldername[-2] self.session.open(EVOMC_FolderOptions, self.currentDirectory, self.foldername) def Settings(self): evfd.getInstance().vfd_write_string("SETTINGS") system("stfbcontrol a 255") self.ThumbTimer.stop() self.session.open(AudioPlayerSettings) config.plugins.EVOMC_ap.save() config.plugins.EVOMC_all.save() def Exit(self): if self.isVisible == False: self.visibility() return if self.filelist.getCurrentDirectory() is None: config.plugins.EVOMC_ap.lastDir.value = "/" else: config.plugins.EVOMC_ap.lastDir.value = self.filelist.getCurrentDirectory() system("killall -9 showiframe") system("stfbcontrol a 255") system("vfdctl -play") system("vfdctl -mp3") system("vfdctl -music") self.ThumbTimer.stop() self.DimmerTimer.stop() self.FileInfoTimer.stop() del self["coverArt"].picload config.plugins.EVOMC_ap.save() config.plugins.EVOMC_all.save() self.session.nav.stopService() evfd.getInstance().vfd_write_string("EVO-MediaCenter") self.close()
class FlashImageConfig(Screen): def __init__(self, session, curdir, matchingPattern=None): try: sz_w = getDesktop(0).size().width() except: sz_w = 720 if sz_w == 1920: self.skin = skinflashfullhd elif sz_w >= 1280: self.skin = skinflashhd else: self.skin = skinflashsd Screen.__init__(self, session) self["Title"].setText(_("Select the folder with backup")) self["key_red"] = StaticText(_("Close")) self["key_green"] = StaticText("") self["key_yellow"] = StaticText("") self["key_blue"] = StaticText("") self["curdir"] = StaticText(_("current: %s")%(curdir or '')) self.founds = False self.dualboot = self.dualBoot() self.filelist = FileList(curdir, matchingPattern=matchingPattern, enableWrapAround=True) self.filelist.onSelectionChanged.append(self.__selChanged) self["filelist"] = self.filelist self["FilelistActions"] = ActionMap(["SetupActions", "ColorActions"], { "green": self.keyGreen, "red": self.keyRed, "yellow": self.keyYellow, "blue": self.KeyBlue, "ok": self.keyOk, "cancel": self.keyRed }) self.onLayoutFinish.append(self.__layoutFinished) def __layoutFinished(self): pass def dualBoot(self): if os.path.exists("/proc/stb/info/boxtype"): try: fd = open("/proc/stb/info/boxtype") model = fd.read().strip() fd.close() if model == "et8500": rootfs2 = False kernel2 = False f = open("/proc/mtd") l = f.readlines() for x in l: if 'rootfs2' in x: rootfs2 = True if 'kernel2' in x: kernel2 = True f.close() if rootfs2 and kernel2: return True except: pass return False def getCurrentSelected(self): dirname = self.filelist.getCurrentDirectory() filename = self.filelist.getFilename() if not filename and not dirname: cur = '' elif not filename: cur = dirname elif not dirname: cur = filename else: if not self.filelist.canDescent() or len(filename) <= len(dirname): cur = dirname else: cur = filename return cur or '' def __selChanged(self): self["key_yellow"].setText("") self["key_green"].setText("") self["key_blue"].setText("") self["curdir"].setText(_("current: %s")%(self.getCurrentSelected())) file_name = self.getCurrentSelected() try: if not self.filelist.canDescent() and file_name != '' and file_name != '/': filename = self.filelist.getFilename() if filename and filename.endswith(".zip"): self["key_yellow"].setText(_("Unzip")) elif self.filelist.canDescent() and file_name != '' and file_name != '/': self["key_green"].setText(_("Run flash")) if os.path.isfile(file_name + LOGFILE) and os.path.isfile(file_name + VERSIONFILE): self["key_yellow"].setText(_("Backup info")) self["key_blue"].setText(_("Delete")) except: pass def keyOk(self): if self.filelist.canDescent(): self.filelist.descent() def confirmedWarning(self, result): if result: self.founds = False self.showparameterlist() def keyGreen(self): if self["key_green"].getText() == _("Run flash"): dirname = self.filelist.getCurrentDirectory() if dirname: warning_text = "\n" if self.dualboot: warning_text += _("\nYou are using dual multiboot!") self.session.openWithCallback(lambda r: self.confirmedWarning(r), MessageBox, _("Warning!\nUse at your own risk! Make always a backup before use!\nDon't use it if you use multiple ubi volumes in ubi layer!") + warning_text, MessageBox.TYPE_INFO) def showparameterlist(self): if self["key_green"].getText() == _("Run flash"): dirname = self.getCurrentSelected() if dirname: backup_files = [] no_backup_files = [] text = _("Select parameter for start flash!\n") text += _('For flashing your receiver files are needed:\n') if os.path.exists("/proc/stb/info/hwmodel"): f = open("/proc/stb/info/hwmodel") model = f.read().strip() f.close() if model in ["fusionhd", "fusionhdse"]: backup_files = ["oe_kernel.bin", "oe_rootfs.bin"] text += "oe_kernel.bin, oe_rootfs.bin" elif os.path.exists("/proc/stb/info/boxtype"): f = open("/proc/stb/info/boxtype") model = f.read().strip() f.close() if model in ["hd51"]: backup_files = [("kernel1.bin"), ("rootfs.tar.bz2")] no_backup_files = ["kernel_cfe_auto.bin", "kernel.bin", "rootfs.bin", "root_cfe_auto.jffs2", "root_cfe_auto.bin"] text += 'kernel1.bin, rootfs.tar.bz2' else: backup_files = [("kernel.bin"), ("rootfs.bin")] no_backup_files = ["kernel_cfe_auto.bin", "root_cfe_auto.jffs2", "root_cfe_auto.bin"] text += 'kernel.bin, rootfs.bin' elif os.path.exists("/proc/stb/info/vumodel"): f = open("/proc/stb/info/vumodel") model = f.read().strip() f.close() if model in ["solo4k", "uno4k", "ultimo4k"]: backup_files = ["kernel_auto.bin", "rootfs.tar.bz2"] no_backup_files = ["kernel.bin", "kernel_cfe_auto.bin", "root_cfe_auto.bin" "root_cfe_auto.jffs2", "rootfs.bin"] text += 'kernel_auto.bin, rootfs.tar.bz2' elif model in ["duo2", "solose", "solo2", "zero"]: backup_files = ["kernel_cfe_auto.bin", "root_cfe_auto.bin"] no_backup_files = ["kernel.bin", "kernel_auto.bin", "root_cfe_auto.jffs2", "rootfs.bin", "rootfs.tar.bz2"] text += 'kernel_cfe_auto.bin, root_cfe_auto.bin' else: backup_files = ["kernel_cfe_auto.bin", "root_cfe_auto.jffs2"] no_backup_files = ["kernel.bin", "kernel_auto.bin", "root_cfe_auto.bin", "rootfs.bin", "rootfs.tar.bz2"] text += 'kernel_cfe_auto.bin, root_cfe_auto.jffs2' try: self.founds = False text += _('\nThe found files:') for name in os.listdir(dirname): if name in backup_files: text += _(" %s (maybe ok)") % name self.founds = True if name in no_backup_files: text += _(" %s (maybe error)") % name self.founds = True if not self.founds: text += _(' nothing!') except: pass if self.founds: open_list = [ (_("Simulate (no write)"), "simulate"), (_("Standard (root and kernel)"), "standard"), (_("Only root"), "root"), (_("Only kernel"), "kernel"), ] open_list2 = [ (_("Simulate second partition (no write)"), "simulate2"), (_("Second partition (root and kernel)"), "standard2"), (_("Second partition (only root)"), "root2"), (_("Second partition (only kernel)"), "kernel2"), ] if self.dualboot: open_list += open_list2 else: open_list = [ (_("Exit"), "exit"), ] self.session.openWithCallback(self.Callbackflashing, MessageBox, text, simple = True, list = open_list) def Callbackflashing(self, ret): if ret: if ret == "exit": self.close() return if self.session.nav.RecordTimer.isRecording(): self.session.open(MessageBox, _("A recording is currently running. Please stop the recording before trying to start a flashing."), MessageBox.TYPE_ERROR) self.founds = False return dir_flash = self.getCurrentSelected() text = _("Flashing: ") cmd = "echo -e" if ret == "simulate": text += _("Simulate (no write)") cmd = "%s -n '%s'" % (ofgwrite_bin, dir_flash) elif ret == "standard": text += _("Standard (root and kernel)") cmd = "%s -r -k '%s' > /dev/null 2>&1 &" % (ofgwrite_bin, dir_flash) elif ret == "root": text += _("Only root") cmd = "%s -r '%s' > /dev/null 2>&1 &" % (ofgwrite_bin, dir_flash) elif ret == "kernel": text += _("Only kernel") cmd = "%s -k '%s' > /dev/null 2>&1 &" % (ofgwrite_bin, dir_flash) elif ret == "simulate2": text += _("Simulate second partition (no write)") cmd = "%s -kmtd3 -rmtd4 -n '%s'" % (ofgwrite_bin, dir_flash) elif ret == "standard2": text += _("Second partition (root and kernel)") cmd = "%s -kmtd3 -rmtd4 '%s' > /dev/null 2>&1 &" % (ofgwrite_bin, dir_flash) elif ret == "root2": text += _("Second partition (only root)") cmd = "%s -rmtd4 '%s' > /dev/null 2>&1 &" % (ofgwrite_bin, dir_flash) elif ret == "kernel2": text += _("Second partition (only kernel)") cmd = "%s -kmtd3 '%s' > /dev/null 2>&1 &" % (ofgwrite_bin, dir_flash) else: return message = "echo -e '\n" message += _('NOT found files for flashing!\n') message += "'" if ret == "simulate" or ret == "simulate2": if self.founds: message = "echo -e '\n" message += _('Show only found image and mtd partitions.\n') message += "'" else: if self.founds: message = "echo -e '\n" message += _('ofgwrite will stop enigma2 now to run the flash.\n') message += _('Your STB will freeze during the flashing process.\n') message += _('Please: DO NOT reboot your STB and turn off the power.\n') message += _('The image or kernel will be flashing and auto booted in few minutes.\n') message += "'" try: if os.path.exists(ofgwrite_bin): os.chmod(ofgwrite_bin, 0755) except: pass self.session.open(Console, text,[message, cmd]) def keyRed(self): self.close() def keyYellow(self): if self["key_yellow"].getText() == _("Unzip"): filename = self.filelist.getFilename() if filename and filename.endswith(".zip"): self.session.openWithCallback(self.doUnzip, MessageBox, _("Do you really want to unpack %s ?") % filename, MessageBox.TYPE_YESNO) elif self["key_yellow"].getText() == _("Backup info"): self.session.open(MessageBox, "\n\n\n%s" % self.getBackupInfo(), MessageBox.TYPE_INFO) def getBackupInfo(self): backup_dir = self.getCurrentSelected() backup_info = "" for line in open(backup_dir + VERSIONFILE, "r"): backup_info += line return backup_info def doUnzip(self, answer): if answer is True: dirname = self.filelist.getCurrentDirectory() filename = self.filelist.getFilename() if dirname and filename: try: os.system('unzip -o %s%s -d %s'%(dirname,filename,dirname)) self.filelist.refresh() except: pass def confirmedDelete(self, answer): if answer is True: backup_dir = self.getCurrentSelected() cmdmessage = "echo -e 'Removing backup: %s\n'" % os.path.basename(backup_dir.rstrip('/')) cmddelete = "rm -rf %s > /dev/null 2>&1" % backup_dir self.session.open(Console, _("Delete backup"), [cmdmessage, cmddelete], self.filelist.refresh) def KeyBlue(self): if self["key_blue"].getText() == _("Delete"): self.session.openWithCallback(self.confirmedDelete, MessageBox, _("You are about to delete this backup:\n\n%s\nContinue?") % self.getBackupInfo(), MessageBox.TYPE_YESNO)
class EVOMC_VideoPlayer(Screen, InfoBarBase, InfoBarSeek, InfoBarNotifications, HelpableScreen): def __init__(self, session): Screen.__init__(self, session) HelpableScreen.__init__(self) InfoBarNotifications.__init__(self) InfoBarBase.__init__(self) InfoBarSeek.__init__(self, actionmap="MediaPlayerSeekActions") self.isVisible = True self.oldService = self.session.nav.getCurrentlyPlayingServiceReference() self.session.nav.stopService() self.playlistparsers = {} self.addPlaylistParser(PlaylistIOM3U, "m3u") self.playlist = MyPlayList() self["fileinfo"] = Label() self["key_red"] = Button(_("Delete")) self["key_green"] = Button(_("")) self["key_yellow"] = Button("Favorites") self["key_blue"] = Button(_("Settings")) self["currentfolder"] = Label("") self["currentfavname"] = Label("") self.currList = "filelist" self.curfavfolder = -1 self["actions"] = HelpableActionMap( self, "EVOMC_VideoPlayerActions", { "ok": (self.KeyOk, "Play selected file"), "left": (self.leftUp, "List Top"), "right": (self.rightDown, "List Bottom"), "up": (self.up, "List up"), "down": (self.down, "List down"), "menu": (self.KeyMenu, "File / Folder Options"), "video": (self.visibility, "Show / Hide Player"), "nextBouquet": (self.NextFavFolder, "Next Favorite Folder"), "prevBouquet": (self.PrevFavFolder, "Previous Favorite Folder"), "stop": (self.StopPlayback, "Stop Playback"), "red": (self.deleteFile, "Delete File"), "yellow": (self.FavoriteFolders, "Favorite Folders"), # "green": (self.showPreview, "Preview"), "blue": (self.KeySettings, "Settings"), }, -2, ) self["InfobarShowHideActions"] = HelpableActionMap( self, "InfobarShowHideActions", {"toggleShow": (self.showFileInfo, "Show File Info")}, -2 ) self["OkCancelActions"] = HelpableActionMap( self, "OkCancelActions", {"cancel": (self.Exit, "Exit Video Player")}, -2 ) self.aspect = getAspect() currDir = config.plugins.EVOMC_vp.lastDir.value if not pathExists(currDir): currDir = "/" self["currentfolder"].setText(str(currDir)) if pathExists("/usr/lib/enigma2/python/Plugins/Extensions/DVDPlayer") is True: self.filelist = FileList( currDir, useServiceRef=True, showDirectories=True, showFiles=True, matchingPattern="(?i)^.*\.(mp4|ts|trp|wmv|mpg|vob|avi|mkv|dat|flac|m2ts|trp|flv)", ) else: self.filelist = FileList( currDir, useServiceRef=True, showDirectories=True, showFiles=True, matchingPattern="(?i)^.*\.(mp4|ts|trp|wmv|mpg|vob|avi|mkv|dat|flac|m2ts|trp|flv)", ) self["filelist"] = self.filelist self["thumbnail"] = Pixmap() evfd.getInstance().vfd_write_string("EVO-VIDEOPLAYER") # self.filelist.refresh() # self.ThumbTimer = eTimer() # self.ThumbTimer.callback.append(self.showThumb) # self.ThumbTimer.start(config.plugins.EVOMC_vp.preview_delay.getValue() * 1000, True) # self.filelistTimer = eTimer() # self.filelistTimer.callback.append(self.filelist.refresh()) # self.filelistTimer.start(60, True) self.DimmerTimer = eTimer() self.DimmerTimer.callback.append(self.showDimmer) self.DimmerTimer.start(config.plugins.EVOMC_all.dimmer_delay.getValue() * 1000, True) self.__event_tracker = ServiceEventTracker( screen=self, eventmap={ iPlayableService.evUser + 11: self.__evDecodeError, iPlayableService.evUser + 12: self.__evPluginError, }, ) def addPlaylistParser(self, parser, extension): self.playlistparsers[extension] = parser def deleteFile(self): if self.currList == "filelist": self.service = self.filelist.getServiceRef() else: self.service = self.playlist.getSelection() if self.service is None: return if self.service.type != 4098 and self.session.nav.getCurrentlyPlayingServiceReference() is not None: if self.service == self.session.nav.getCurrentlyPlayingServiceReference(): self.stopEntry() serviceHandler = eServiceCenter.getInstance() offline = serviceHandler.offlineOperations(self.service) info = serviceHandler.info(self.service) name = info and info.getName(self.service) result = False if offline is not None: # simulate first if not offline.deleteFromDisk(1): result = True if result == True: self.session.openWithCallback( self.deleteConfirmed_offline, MessageBox, _("Do you really want to delete %s?") % (name) ) else: self.session.openWithCallback(self.close, MessageBox, _("You cannot delete this!"), MessageBox.TYPE_ERROR) def deleteConfirmed_offline(self, confirmed): if confirmed: serviceHandler = eServiceCenter.getInstance() offline = serviceHandler.offlineOperations(self.service) result = False if offline is not None: # really delete! if not offline.deleteFromDisk(0): result = True if result == False: self.session.open(MessageBox, _("Delete failed!"), MessageBox.TYPE_ERROR) else: self.removeListEntry() def removeListEntry(self): self.savePlaylistOnExit = True currdir = self.filelist.getCurrentDirectory() self.filelist.changeDir(currdir) deleteend = False while not deleteend: index = 0 deleteend = True if len(self.playlist) > 0: for x in self.playlist.list: if self.service == x[0]: self.playlist.deleteFile(index) deleteend = False break index += 1 self.playlist.updateList() if self.currList == "playlist": if len(self.playlist) == 0: self.switchToFileList() def up(self): system("stfbcontrol a 255") self["filelist"].up() # self.ThumbTimer.start(config.plugins.EVOMC_vp.preview_delay.getValue() * 1000, True) self.DimmerTimer.start(config.plugins.EVOMC_all.dimmer_delay.getValue() * 1000, True) def down(self): system("stfbcontrol a 255") self["filelist"].down() # self.ThumbTimer.start(config.plugins.EVOMC_vp.preview_delay.getValue() * 1000, True) self.DimmerTimer.start(config.plugins.EVOMC_all.dimmer_delay.getValue() * 1000, True) def leftUp(self): system("stfbcontrol a 255") self["filelist"].pageUp() # self.ThumbTimer.start(config.plugins.EVOMC_vp.preview_delay.getValue() * 1000, True) self.DimmerTimer.start(config.plugins.EVOMC_all.dimmer_delay.getValue() * 1000, True) def rightDown(self): system("stfbcontrol a 255") self["filelist"].pageDown() # self.ThumbTimer.start(config.plugins.EVOMC_vp.preview_delay.getValue() * 1000, True) self.DimmerTimer.start(config.plugins.EVOMC_all.dimmer_delay.getValue() * 1000, True) def showDimmer(self): if config.plugins.EVOMC_all.showDimmer.getValue(): system("stfbcontrol a 80") def NextFavFolder(self): system("stfbcontrol a 255") if self.curfavfolder + 1 < config.plugins.EVOMC_favorites.foldercount.value: self.curfavfolder += 1 self.favname = config.plugins.EVOMC_favorites.folders[self.curfavfolder].name.value self.folder = config.plugins.EVOMC_favorites.folders[self.curfavfolder].basedir.value self["currentfolder"].setText(("%s") % (self.folder)) self["currentfavname"].setText(("%s") % (self.favname)) if pathExists(self.folder) == True: self["filelist"].changeDir(self.folder) else: return def PrevFavFolder(self): system("stfbcontrol a 255") if self.curfavfolder <= 0: return else: self.curfavfolder -= 1 self.favname = config.plugins.EVOMC_favorites.folders[self.curfavfolder].name.value self.folder = config.plugins.EVOMC_favorites.folders[self.curfavfolder].basedir.value self["currentfolder"].setText(("%s") % (self.folder)) self["currentfavname"].setText(("%s") % (self.favname)) if pathExists(self.folder) == True: self["filelist"].changeDir(self.folder) # def showPreview(self): # system("stfbcontrol a 255") # if self["filelist"].canDescent(): # return # else: # if self["filelist"].getServiceRef() is not None: # self.DimmerTimer.stop() # self.session.nav.stopService() # self.session.nav.playService(self["filelist"].getServiceRef()) # def showThumb(self): # if config.plugins.EVOMC_vp.showPreview.getValue() == False: # return # if self["filelist"].canDescent(): # return # else: # if self["filelist"].getServiceRef() is not None: # self.DimmerTimer.stop() # self.session.nav.stopService() # self.session.nav.playService(self["filelist"].getServiceRef()) def showFileInfo(self): if self["filelist"].canDescent(): return else: system("stfbcontrol a 255") # self.ThumbTimer.start(config.plugins.EVOMC_vp.preview_delay.getValue() * 1000, True) self.DimmerTimer.start(config.plugins.EVOMC_all.dimmer_delay.getValue() * 1000, True) self.session.open( EVOMC_VideoInfoView, self["filelist"].getCurrentDirectory() + self["filelist"].getFilename(), self["filelist"].getFilename(), self["filelist"].getServiceRef(), ) def KeyOk(self): system("stfbcontrol a 255") system("echo 3 -> /dev/ttyAS1") self.filelist.refresh() if self.isVisible == False: self.visibility() return # self.ThumbTimer.stop() self.DimmerTimer.stop() if self.filelist.canDescent(): self.filelist.descent() else: evfd.getInstance().vfd_write_string("PLAY") if self.filelist.getServiceRef().type == 4098: ServiceRef = self.filelist.getServiceRef() extension = ServiceRef.getPath()[ServiceRef.getPath().rfind(".") + 1 :] if self.playlistparsers.has_key(extension): playlist = self.playlistparsers[extension]() list = playlist.open(ServiceRef.getPath()) for x in list: self.playlist.addFile(x.ref) self.playlist.updateList() else: self.playlist.addFile(self.filelist.getServiceRef()) self.playlist.updateList() currref = self.playlist.getServiceRefList()[self.playlist.getCurrentIndex()] print "currref !!!!!!!!!!!!!!!!!!!!!!!!!", currref self.session.open(MoviePlayer, currref) # system("echo " + hex(config.plugins.EVOMC_globalsettings.dst_top.value)[2:] + " > /proc/stb/vmpeg/0/dst_top") # system("echo " + hex(config.plugins.EVOMC_globalsettings.dst_left.value)[2:] + " > /proc/stb/vmpeg/0/dst_left") # system("echo " + hex(config.plugins.EVOMC_globalsettings.dst_width.value)[2:] + " > /proc/stb/vmpeg/0/dst_width") # system("echo " + hex(config.plugins.EVOMC_globalsettings.dst_height.value)[2:] + " > /proc/stb/vmpeg/0/dst_height") def KeyMenu(self): # self.ThumbTimer.stop() if self["filelist"].canDescent(): if self.filelist.getCurrent()[0][1]: self.currentDirectory = self.filelist.getCurrent()[0][0] foldername = self.currentDirectory.split("/") foldername = foldername[-2] self.session.open(EVOMC_FolderOptions, self.currentDirectory, foldername) # def StartThumb(self): # self.session.openWithCallback(self.returnVal, ThumbView, self.filelist.getFileList(), self.filelist.getFilename(), self.filelist.getCurrentDirectory()) # def returnVal(self, val=0): # if val > 0: # for x in self.filelist.getFileList(): # if x[0][1] == True: # val += 1 # self.filelist.moveToIndex(val) # def StartExif(self): # if not self.filelist.canDescent(): # self.session.open(ExifView, self.filelist.getCurrentDirectory() + self.filelist.getFilename(), self.filelist.getFilename()) def visibility(self, force=1): if self.isVisible == True: self.isVisible = False self.hide() else: self.isVisible = True self.show() def StopPlayback(self): # self.ThumbTimer.stop() system("echo C -> /dev/ttyAS1") self.session.nav.stopService() self.session.nav.playService(self.oldService) # self.ThumbTimer.start(config.plugins.EVOMC_vp.preview_delay.getValue() * 1000, True) self.DimmerTimer.start(config.plugins.EVOMC_all.dimmer_delay.getValue() * 1000, True) system("stfbcontrol a 255") self.show() def JumpToFolder(self, jumpto=None): if jumpto is None: return else: self["filelist"].changeDir(jumpto) self["currentfolder"].setText(("%s") % (jumpto)) def FavoriteFolders(self): self.session.openWithCallback(self.JumpToFolder, EVOMC_FavoriteFolders) def KeySettings(self): self.session.open(VideoPlayerSettings) config.plugins.EVOMC_vp.save() config.plugins.EVOMC_all.save() def __evDecodeError(self): currPlay = self.session.nav.getCurrentService() sVideoType = currPlay.info().getInfoString(iServiceInformation.sVideoType) print "[__evDecodeError] video-codec %s can't be decoded by hardware" % (sVideoType) self.session.open( MessageBox, _("This Dreambox can't decode %s video streams!") % sVideoType, type=MessageBox.TYPE_INFO, timeout=10, ) def __evPluginError(self): currPlay = self.session.nav.getCurrentService() message = currPlay.info().getInfoString(iServiceInformation.sUser + 12) print "[__evPluginError]", message self.session.open(MessageBox, ("GStreamer Error: missing %s") % message, type=MessageBox.TYPE_INFO, timeout=20) def Exit(self): system("stfbcontrol a 255") if self.isVisible == False: self.visibility() return if self.filelist.getCurrentDirectory() is None: config.plugins.EVOMC_vp.lastDir.value = "/" else: config.plugins.EVOMC_vp.lastDir.value = self.filelist.getCurrentDirectory() self.session.nav.stopService() self.DimmerTimer.stop() config.plugins.EVOMC_vp.save() config.plugins.EVOMC_all.save() self.close() def showAfterSeek(self): self.show() def checkSkipShowHideLock(self): self.updatedSeekState() def unPauseService(self): self.setSeekState(self.SEEK_STATE_PLAY) def updatedSeekState(self): if self.seekstate == self.SEEK_STATE_PAUSE: self.playlist.pauseFile() elif self.seekstate == self.SEEK_STATE_PLAY: self.playlist.playFile() elif self.isStateForward(self.seekstate): self.playlist.forwardFile() elif self.isStateBackward(self.seekstate): self.playlist.rewindFile() def addPlaylistParser(self, parser, extension): self.playlistparsers[extension] = parser
class FlashImageConfig(Screen): def __init__(self, session, curdir, matchingPattern=None): try: sz_w = getDesktop(0).size().width() except: sz_w = 720 if sz_w == 1920: self.skin = skinflashfullhd elif sz_w >= 1280: self.skin = skinflashhd else: self.skin = skinflashsd Screen.__init__(self, session) self['Title'].setText(_('Select the folder with backup')) self['key_red'] = StaticText(_('Close')) self['key_green'] = StaticText('') self['key_yellow'] = StaticText('') self['key_blue'] = StaticText('') self['curdir'] = StaticText(_('current: %s') % (curdir or '')) self.founds = False self.dualboot = self.dualBoot() self.ForceMode = self.ForceMode() self.filelist = FileList(curdir, matchingPattern=matchingPattern, enableWrapAround=True) self.filelist.onSelectionChanged.append(self.__selChanged) self['filelist'] = self.filelist self['FilelistActions'] = ActionMap( ['SetupActions', 'ColorActions'], { 'green': self.keyGreen, 'red': self.keyRed, 'yellow': self.keyYellow, 'blue': self.KeyBlue, 'ok': self.keyOk, 'cancel': self.keyRed }) self.onLayoutFinish.append(self.__layoutFinished) def __layoutFinished(self): pass def dualBoot(self): if getBoxType() == 'et8500': rootfs2 = False kernel2 = False f = open('/proc/mtd') l = f.readlines() for x in l: if 'rootfs2' in x: rootfs2 = True if 'kernel2' in x: kernel2 = True f.close() if rootfs2 and kernel2: return True return False def ForceMode(self): if getBoxType() in ('h9', 'h9combo', 'i55plus', 'h10'): return True return False def getCurrentSelected(self): dirname = self.filelist.getCurrentDirectory() filename = self.filelist.getFilename() if not filename and not dirname: cur = '' elif not filename: cur = dirname elif not dirname: cur = filename elif not self.filelist.canDescent() or len(filename) <= len(dirname): cur = dirname else: cur = filename return cur or '' def __selChanged(self): self['key_yellow'].setText('') self['key_green'].setText('') self['key_blue'].setText('') self['curdir'].setText(_('current: %s') % self.getCurrentSelected()) file_name = self.getCurrentSelected() try: if not self.filelist.canDescent( ) and file_name != '' and file_name != '/': filename = self.filelist.getFilename() if filename and filename.endswith('.zip'): self['key_yellow'].setText(_('Unzip')) elif self.filelist.canDescent( ) and file_name != '' and file_name != '/': self['key_green'].setText(_('Run flash')) if os.path.isfile(file_name + LOGFILE) and os.path.isfile(file_name + VERSIONFILE): self['key_yellow'].setText(_('Backup info')) self['key_blue'].setText(_('Delete')) except: pass def keyOk(self): if self.filelist.canDescent(): self.filelist.descent() def confirmedWarning(self, result): if result: self.founds = False self.showparameterlist() def keyGreen(self): if self['key_green'].getText() == _('Run flash'): dirname = self.filelist.getCurrentDirectory() if dirname: warning_text = '\n' if self.dualboot: warning_text += _('\nYou are using dual multiboot!') self.session.openWithCallback( lambda r: self.confirmedWarning(r), MessageBox, _("Warning!\nUse at your own risk! Make always a backup before use!\nDon't use it if you use multiple ubi volumes in ubi layer!" ) + warning_text, MessageBox.TYPE_INFO) def showparameterlist(self): if self['key_green'].getText() == _('Run flash'): dirname = self.getCurrentSelected() model = getBoxType() if dirname: backup_files = [] no_backup_files = [] text = _('Select parameter for start flash!\n') text += _('For flashing your receiver files are needed:\n') if model.startswith('dm'): if 'dm9' in model: backup_files = ['kernel.bin', 'rootfs.tar.bz2'] no_backup_files = [ 'kernel_cfe_auto.bin', 'rootfs.bin', 'root_cfe_auto.jffs2', 'root_cfe_auto.bin', 'oe_kernel.bin', 'oe_rootfs.bin', 'kernel_auto.bin', 'uImage', 'rootfs.ubi' ] text += 'kernel.bin, rootfs.tar.bz2' elif model in ('dm520', 'dm7080', 'dm820'): backup_files = ['*.xz'] no_backup_files = [ 'kernel_cfe_auto.bin', 'rootfs.bin', 'root_cfe_auto.jffs2', 'root_cfe_auto.bin', 'oe_kernel.bin', 'oe_rootfs.bin', 'kernel_auto.bin', 'kernel.bin', 'rootfs.tar.bz2', 'uImage', 'rootfs.ubi' ] text += '*.xz' else: backup_files = ['*.nfi'] no_backup_files = [ 'kernel_cfe_auto.bin', 'rootfs.bin', 'root_cfe_auto.jffs2', 'root_cfe_auto.bin', 'oe_kernel.bin', 'oe_rootfs.bin', 'kernel_auto.bin', 'kernel.bin', 'rootfs.tar.bz2', 'uImage', 'rootfs.ubi' ] text += '*.nfi' elif model.startswith('gb'): if '4k' not in model: backup_files = ['kernel.bin', 'rootfs.bin'] no_backup_files = [ 'kernel_cfe_auto.bin', 'root_cfe_auto.jffs2', 'root_cfe_auto.bin', 'oe_kernel.bin', 'oe_rootfs.bin', 'rootfs.tar.bz2', 'kernel_auto.bin', 'uImage', 'rootfs.ubi' ] text += 'kernel.bin, rootfs.bin' else: backup_files = ['kernel.bin', 'rootfs.tar.bz2'] no_backup_files = [ 'kernel_cfe_auto.bin', 'rootfs.bin', 'root_cfe_auto.jffs2', 'root_cfe_auto.bin', 'oe_kernel.bin', 'oe_rootfs.bin', 'kernel_auto.bin', 'uImage', 'rootfs.ubi' ] text += 'kernel.bin, rootfs.tar.bz2' elif model.startswith('vu'): if '4k' in model: backup_files = ['kernel_auto.bin', 'rootfs.tar.bz2'] no_backup_files = [ 'kernel_cfe_auto.bin', 'rootfs.bin', 'root_cfe_auto.jffs2', 'root_cfe_auto.bin', 'oe_kernel.bin', 'oe_rootfs.bin', 'kernel.bin', 'uImage', 'rootfs.ubi' ] text += 'kernel_auto.bin, rootfs.tar.bz2' elif model in ('vuduo2', 'vusolose', 'vusolo2', 'vuzero'): backup_files = [ 'kernel_cfe_auto.bin', 'root_cfe_auto.bin' ] no_backup_files = [ 'rootfs.bin', 'root_cfe_auto.jffs2', 'oe_kernel.bin', 'oe_rootfs.bin', 'kernel.bin', 'rootfs.tar.bz2', 'kernel_auto.bin', 'uImage', 'rootfs.ubi' ] text += 'kernel_cfe_auto.bin, root_cfe_auto.bin' else: backup_files = [ 'kernel_cfe_auto.bin', 'root_cfe_auto.jffs2' ] no_backup_files = [ 'rootfs.bin', 'root_cfe_auto.bin', 'oe_kernel.bin', 'oe_rootfs.bin', 'kernel.bin', 'rootfs.tar.bz2', 'kernel_auto.bin', 'uImage', 'rootfs.ubi' ] text += 'kernel_cfe_auto.bin, root_cfe_auto.jffs2' elif model in ('hd51', 'h7', 'sf4008', 'sf5008', 'sf8008', 'vs1500', 'et11000', 'et13000', 'bre2ze4k', 'spycat4k', 'spycat4kmini', 'protek4k', 'e4hdultra', 'cc1', 'spycatminiv2', 'iziboxecohd', 'jdhdduo', 'turing', 'arivacombo', 'arivatwin') or model.startswith( ('anadol', 'axashis4', 'dinobot4', 'ferguson4', 'mediabox4', 'axashisc4')): backup_files = ['kernel.bin', 'rootfs.tar.bz2'] no_backup_files = [ 'kernel_cfe_auto.bin', 'rootfs.bin', 'root_cfe_auto.jffs2', 'root_cfe_auto.bin', 'oe_kernel.bin', 'oe_rootfs.bin', 'kernel_auto.bin', 'uImage', 'rootfs.ubi' ] text += 'kernel.bin, rootfs.tar.bz2' elif model in ('h9', 'h9combo', 'i55plus', 'h10', 'dinobotu55', 'iziboxx3', 'dinoboth265', 'axashistwin', 'protek4kx1'): backup_files = ['uImage', 'rootfs.ubi'] no_backup_files = [ 'kernel_cfe_auto.bin', 'root_cfe_auto.jffs2', 'root_cfe_auto.bin', 'oe_kernel.bin', 'oe_rootfs.bin', 'rootfs.tar.bz2', 'kernel_auto.bin', 'kernel.bin', 'rootfs.tar.bz2' ] text += 'uImage, rootfs.ubi' elif model in ('hd60', 'hd61', 'multibox', 'multiboxplus', 'v8plus'): backup_files = ['uImage', 'rootfs.tar.bz2'] no_backup_files = [ 'kernel_cfe_auto.bin', 'root_cfe_auto.jffs2', 'root_cfe_auto.bin', 'oe_kernel.bin', 'oe_rootfs.bin', 'rootfs.ubi', 'kernel_auto.bin', 'kernel.bin' ] text += 'uImage, rootfs.tar.bz2' elif model.startswith( ('et4', 'et5', 'et6', 'et7', 'et8', 'et9', 'et10')): backup_files = ['kernel.bin', 'rootfs.bin'] no_backup_files = [ 'kernel_cfe_auto.bin', 'root_cfe_auto.jffs2', 'root_cfe_auto.bin', 'oe_kernel.bin', 'oe_rootfs.bin', 'rootfs.tar.bz2', 'kernel_auto.bin', 'uImage', 'rootfs.ubi' ] text += 'kernel.bin, rootfs.bin' elif model.startswith('ebox'): backup_files = [ 'kernel_cfe_auto.bin', 'root_cfe_auto.jffs2' ] no_backup_files = [ 'rootfs.bin', 'root_cfe_auto.bin', 'oe_kernel.bin', 'oe_rootfs.bin', 'kernel.bin', 'rootfs.tar.bz2', 'kernel_auto.bin', 'uImage', 'rootfs.ubi' ] text += 'kernel_cfe_auto.bin, root_cfe_auto.jffs2' elif model.startswith( ('fusion', 'pure', 'optimus', 'force', 'iqon', 'ios', 'tm2', 'tmn', 'tmt', 'tms', 'lunix', 'mediabox', 'vala')): backup_files = ['oe_kernel.bin', 'oe_rootfs.bin'] no_backup_files = [ 'kernel_cfe_auto.bin', 'rootfs.bin', 'root_cfe_auto.jffs2', 'root_cfe_auto.bin', 'kernel.bin', 'rootfs.tar.bz2', 'kernel_auto.bin', 'uImage', 'rootfs.ubi' ] text += 'oe_kernel.bin, oe_rootfs.bin' elif '4k' or 'uhd' in model: backup_files = ['oe_kernel.bin', 'rootfs.tar.bz2'] no_backup_files = [ 'kernel_cfe_auto.bin', 'rootfs.bin', 'root_cfe_auto.jffs2', 'root_cfe_auto.bin', 'oe_rootfs.bin', 'kernel.bin', 'kernel_auto.bin', 'uImage', 'rootfs.ubi' ] text += 'oe_kernel.bin, rootfs.tar.bz2' else: backup_files = ['kernel.bin', 'rootfs.bin'] no_backup_files = [ 'kernel_cfe_auto.bin', 'root_cfe_auto.jffs2', 'root_cfe_auto.bin', 'oe_kernel.bin', 'oe_rootfs.bin', 'rootfs.tar.bz2', 'kernel_auto.bin', 'uImage', 'rootfs.ubi' ] text += 'kernel.bin, rootfs.bin' try: self.founds = False text += _('\nThe found files:') for name in os.listdir(dirname): if name in backup_files: text += _(' %s (maybe ok)') % name self.founds = True if name in no_backup_files: text += _(' %s (maybe error)') % name self.founds = True if not self.founds: text += _(' nothing!') except: pass if self.founds: open_list = [(_('Simulate (no write)'), 'simulate'), (_('Standard (root and kernel)'), 'standard'), (_('Only root'), 'root'), (_('Only kernel'), 'kernel')] open_list2 = [ (_('Simulate second partition (no write)'), 'simulate2'), (_('Second partition (root and kernel)'), 'standard2'), (_('Second partition (only root)'), 'rootfs2'), (_('Second partition (only kernel)'), 'kernel2') ] if self.dualboot: open_list += open_list2 else: open_list = [(_('Exit'), 'exit')] self.session.openWithCallback(self.Callbackflashing, MessageBox, text, simple=True, list=open_list) def Callbackflashing(self, ret): if ret: if ret == 'exit': self.close() return if self.session.nav.RecordTimer.isRecording(): self.session.open( MessageBox, _('A recording is currently running. Please stop the recording before trying to start a flashing.' ), MessageBox.TYPE_ERROR) self.founds = False return dir_flash = self.getCurrentSelected() text = _('Flashing: ') cmd = 'echo -e' if ret == 'simulate': text += _('Simulate (no write)') cmd = "%s -n '%s'" % (ofgwrite_bin, dir_flash) elif ret == 'standard': text += _('Standard (root and kernel)') if self.ForceMode: cmd = "%s -f -r -k '%s' > /dev/null 2>&1 &" % ( ofgwrite_bin, dir_flash) else: cmd = "%s -r -k '%s' > /dev/null 2>&1 &" % (ofgwrite_bin, dir_flash) elif ret == 'root': text += _('Only root') cmd = "%s -r '%s' > /dev/null 2>&1 &" % (ofgwrite_bin, dir_flash) elif ret == 'kernel': text += _('Only kernel') cmd = "%s -k '%s' > /dev/null 2>&1 &" % (ofgwrite_bin, dir_flash) elif ret == 'simulate2': text += _('Simulate second partition (no write)') cmd = "%s -kmtd3 -rmtd4 -n '%s'" % (ofgwrite_bin, dir_flash) elif ret == 'standard2': text += _('Second partition (root and kernel)') cmd = "%s -kmtd3 -rmtd4 '%s' > /dev/null 2>&1 &" % ( ofgwrite_bin, dir_flash) elif ret == 'rootfs2': text += _('Second partition (only root)') cmd = "%s -rmtd4 '%s' > /dev/null 2>&1 &" % (ofgwrite_bin, dir_flash) elif ret == 'kernel2': text += _('Second partition (only kernel)') cmd = "%s -kmtd3 '%s' > /dev/null 2>&1 &" % (ofgwrite_bin, dir_flash) else: return message = "echo -e '\n" message += _('NOT found files for flashing!\n') message += "'" if ret == 'simulate' or ret == 'simulate2': if self.founds: message = "echo -e '\n" message += _('Show only found image and mtd partitions.\n') message += "'" elif self.founds: message = "echo -e '\n" message += _( 'ofgwrite will stop enigma2 now to run the flash.\n') message += _( 'Your STB will freeze during the flashing process.\n') message += _( 'Please: DO NOT reboot your STB and turn off the power.\n') message += _( 'The image or kernel will be flashing and auto booted in few minutes.\n' ) message += "'" self.session.open(Console, text, [message, cmd]) def keyRed(self): self.close() def keyYellow(self): if self['key_yellow'].getText() == _('Unzip'): filename = self.filelist.getFilename() if filename and filename.endswith('.zip'): self.session.openWithCallback( self.doUnzip, MessageBox, _('Do you really want to unpack %s ?') % filename, MessageBox.TYPE_YESNO) elif self['key_yellow'].getText() == _('Backup info'): self.session.open(MessageBox, '\n\n\n%s' % self.getBackupInfo(), MessageBox.TYPE_INFO) def getBackupInfo(self): backup_dir = self.getCurrentSelected() backup_info = '' for line in open(backup_dir + VERSIONFILE, 'r'): backup_info += line return backup_info def doUnzip(self, answer): if answer is True: dirname = self.filelist.getCurrentDirectory() filename = self.filelist.getFilename() if dirname and filename: try: os.system('unzip -o %s%s -d %s' % (dirname, filename, dirname)) self.filelist.refresh() except: pass def confirmedDelete(self, answer): if answer is True: backup_dir = self.getCurrentSelected() cmdmessage = "echo -e 'Removing backup: %s\n'" % os.path.basename( backup_dir.rstrip('/')) cmddelete = 'rm -rf %s > /dev/null 2>&1' % backup_dir self.session.open(Console, _('Delete backup'), [cmdmessage, cmddelete], self.filelist.refresh) def KeyBlue(self): if self['key_blue'].getText() == _('Delete'): self.session.openWithCallback( self.confirmedDelete, MessageBox, _('You are about to delete this backup:\n\n%s\nContinue?') % self.getBackupInfo(), MessageBox.TYPE_YESNO)
class EVOMC_VideoPlayer(Screen, InfoBarBase, InfoBarSeek, InfoBarNotifications, HelpableScreen): def __init__(self, session): Screen.__init__(self, session) HelpableScreen.__init__(self) InfoBarNotifications.__init__(self) InfoBarBase.__init__(self) InfoBarSeek.__init__(self, actionmap="MediaPlayerSeekActions") self.isVisible = True self.oldService = self.session.nav.getCurrentlyPlayingServiceReference( ) self.session.nav.stopService() self.playlistparsers = {} self.addPlaylistParser(PlaylistIOM3U, "m3u") self.playlist = MyPlayList() self["fileinfo"] = Label() self["key_red"] = Button(_("Delete")) self["key_green"] = Button(_("")) self["key_yellow"] = Button("Favorites") self["key_blue"] = Button(_("Settings")) self["currentfolder"] = Label("") self["currentfavname"] = Label("") self.currList = "filelist" self.curfavfolder = -1 self["actions"] = HelpableActionMap( self, "EVOMC_VideoPlayerActions", { "ok": (self.KeyOk, "Play selected file"), "left": (self.leftUp, "List Top"), "right": (self.rightDown, "List Bottom"), "up": (self.up, "List up"), "down": (self.down, "List down"), "menu": (self.KeyMenu, "File / Folder Options"), "video": (self.visibility, "Show / Hide Player"), "nextBouquet": (self.NextFavFolder, "Next Favorite Folder"), "prevBouquet": (self.PrevFavFolder, "Previous Favorite Folder"), "stop": (self.StopPlayback, "Stop Playback"), "red": (self.deleteFile, "Delete File"), "yellow": (self.FavoriteFolders, "Favorite Folders"), # "green": (self.showPreview, "Preview"), "blue": (self.KeySettings, "Settings"), }, -2) self["InfobarShowHideActions"] = HelpableActionMap( self, "InfobarShowHideActions", { "toggleShow": (self.showFileInfo, "Show File Info"), }, -2) self["OkCancelActions"] = HelpableActionMap(self, "OkCancelActions", { "cancel": (self.Exit, "Exit Video Player"), }, -2) self.aspect = getAspect() currDir = config.plugins.EVOMC_vp.lastDir.value if not pathExists(currDir): currDir = "/" self["currentfolder"].setText(str(currDir)) if pathExists("/usr/lib/enigma2/python/Plugins/Extensions/DVDPlayer" ) is True: self.filelist = FileList( currDir, useServiceRef=True, showDirectories=True, showFiles=True, matchingPattern= "(?i)^.*\.(mp4|ts|trp|wmv|mpg|vob|avi|mkv|dat|flac|m2ts|trp|flv)" ) else: self.filelist = FileList( currDir, useServiceRef=True, showDirectories=True, showFiles=True, matchingPattern= "(?i)^.*\.(mp4|ts|trp|wmv|mpg|vob|avi|mkv|dat|flac|m2ts|trp|flv)" ) self["filelist"] = self.filelist self["thumbnail"] = Pixmap() evfd.getInstance().vfd_write_string("EVO-VIDEOPLAYER") # self.filelist.refresh() # self.ThumbTimer = eTimer() # self.ThumbTimer.callback.append(self.showThumb) # self.ThumbTimer.start(config.plugins.EVOMC_vp.preview_delay.getValue() * 1000, True) # self.filelistTimer = eTimer() # self.filelistTimer.callback.append(self.filelist.refresh()) # self.filelistTimer.start(60, True) self.DimmerTimer = eTimer() self.DimmerTimer.callback.append(self.showDimmer) self.DimmerTimer.start( config.plugins.EVOMC_all.dimmer_delay.getValue() * 1000, True) self.__event_tracker = ServiceEventTracker( screen=self, eventmap={ iPlayableService.evUser + 11: self.__evDecodeError, iPlayableService.evUser + 12: self.__evPluginError }) def addPlaylistParser(self, parser, extension): self.playlistparsers[extension] = parser def deleteFile(self): if self.currList == "filelist": self.service = self.filelist.getServiceRef() else: self.service = self.playlist.getSelection() if self.service is None: return if self.service.type != 4098 and self.session.nav.getCurrentlyPlayingServiceReference( ) is not None: if self.service == self.session.nav.getCurrentlyPlayingServiceReference( ): self.stopEntry() serviceHandler = eServiceCenter.getInstance() offline = serviceHandler.offlineOperations(self.service) info = serviceHandler.info(self.service) name = info and info.getName(self.service) result = False if offline is not None: # simulate first if not offline.deleteFromDisk(1): result = True if result == True: self.session.openWithCallback( self.deleteConfirmed_offline, MessageBox, _("Do you really want to delete %s?") % (name)) else: self.session.openWithCallback(self.close, MessageBox, _("You cannot delete this!"), MessageBox.TYPE_ERROR) def deleteConfirmed_offline(self, confirmed): if confirmed: serviceHandler = eServiceCenter.getInstance() offline = serviceHandler.offlineOperations(self.service) result = False if offline is not None: # really delete! if not offline.deleteFromDisk(0): result = True if result == False: self.session.open(MessageBox, _("Delete failed!"), MessageBox.TYPE_ERROR) else: self.removeListEntry() def removeListEntry(self): self.savePlaylistOnExit = True currdir = self.filelist.getCurrentDirectory() self.filelist.changeDir(currdir) deleteend = False while not deleteend: index = 0 deleteend = True if len(self.playlist) > 0: for x in self.playlist.list: if self.service == x[0]: self.playlist.deleteFile(index) deleteend = False break index += 1 self.playlist.updateList() if self.currList == "playlist": if len(self.playlist) == 0: self.switchToFileList() def up(self): system("stfbcontrol a 255") self["filelist"].up() # self.ThumbTimer.start(config.plugins.EVOMC_vp.preview_delay.getValue() * 1000, True) self.DimmerTimer.start( config.plugins.EVOMC_all.dimmer_delay.getValue() * 1000, True) def down(self): system("stfbcontrol a 255") self["filelist"].down() # self.ThumbTimer.start(config.plugins.EVOMC_vp.preview_delay.getValue() * 1000, True) self.DimmerTimer.start( config.plugins.EVOMC_all.dimmer_delay.getValue() * 1000, True) def leftUp(self): system("stfbcontrol a 255") self["filelist"].pageUp() # self.ThumbTimer.start(config.plugins.EVOMC_vp.preview_delay.getValue() * 1000, True) self.DimmerTimer.start( config.plugins.EVOMC_all.dimmer_delay.getValue() * 1000, True) def rightDown(self): system("stfbcontrol a 255") self["filelist"].pageDown() # self.ThumbTimer.start(config.plugins.EVOMC_vp.preview_delay.getValue() * 1000, True) self.DimmerTimer.start( config.plugins.EVOMC_all.dimmer_delay.getValue() * 1000, True) def showDimmer(self): if config.plugins.EVOMC_all.showDimmer.getValue(): system("stfbcontrol a 80") def NextFavFolder(self): system("stfbcontrol a 255") if self.curfavfolder + 1 < config.plugins.EVOMC_favorites.foldercount.value: self.curfavfolder += 1 self.favname = config.plugins.EVOMC_favorites.folders[ self.curfavfolder].name.value self.folder = config.plugins.EVOMC_favorites.folders[ self.curfavfolder].basedir.value self["currentfolder"].setText(("%s") % (self.folder)) self["currentfavname"].setText(("%s") % (self.favname)) if pathExists(self.folder) == True: self["filelist"].changeDir(self.folder) else: return def PrevFavFolder(self): system("stfbcontrol a 255") if self.curfavfolder <= 0: return else: self.curfavfolder -= 1 self.favname = config.plugins.EVOMC_favorites.folders[ self.curfavfolder].name.value self.folder = config.plugins.EVOMC_favorites.folders[ self.curfavfolder].basedir.value self["currentfolder"].setText(("%s") % (self.folder)) self["currentfavname"].setText(("%s") % (self.favname)) if pathExists(self.folder) == True: self["filelist"].changeDir(self.folder) # def showPreview(self): # system("stfbcontrol a 255") # if self["filelist"].canDescent(): # return # else: # if self["filelist"].getServiceRef() is not None: # self.DimmerTimer.stop() # self.session.nav.stopService() # self.session.nav.playService(self["filelist"].getServiceRef()) # def showThumb(self): # if config.plugins.EVOMC_vp.showPreview.getValue() == False: # return # if self["filelist"].canDescent(): # return # else: # if self["filelist"].getServiceRef() is not None: # self.DimmerTimer.stop() # self.session.nav.stopService() # self.session.nav.playService(self["filelist"].getServiceRef()) def showFileInfo(self): if self["filelist"].canDescent(): return else: system("stfbcontrol a 255") # self.ThumbTimer.start(config.plugins.EVOMC_vp.preview_delay.getValue() * 1000, True) self.DimmerTimer.start( config.plugins.EVOMC_all.dimmer_delay.getValue() * 1000, True) self.session.open( EVOMC_VideoInfoView, self["filelist"].getCurrentDirectory() + self["filelist"].getFilename(), self["filelist"].getFilename(), self["filelist"].getServiceRef()) def KeyOk(self): system("stfbcontrol a 255") system("echo 3 -> /dev/ttyAS1") self.filelist.refresh() if self.isVisible == False: self.visibility() return # self.ThumbTimer.stop() self.DimmerTimer.stop() if self.filelist.canDescent(): self.filelist.descent() else: evfd.getInstance().vfd_write_string("PLAY") if self.filelist.getServiceRef().type == 4098: ServiceRef = self.filelist.getServiceRef() extension = ServiceRef.getPath( )[ServiceRef.getPath().rfind('.') + 1:] if self.playlistparsers.has_key(extension): playlist = self.playlistparsers[extension]() list = playlist.open(ServiceRef.getPath()) for x in list: self.playlist.addFile(x.ref) self.playlist.updateList() else: self.playlist.addFile(self.filelist.getServiceRef()) self.playlist.updateList() currref = self.playlist.getServiceRefList()[ self.playlist.getCurrentIndex()] print "currref !!!!!!!!!!!!!!!!!!!!!!!!!", currref self.session.open(MoviePlayer, currref) # system("echo " + hex(config.plugins.EVOMC_globalsettings.dst_top.value)[2:] + " > /proc/stb/vmpeg/0/dst_top") # system("echo " + hex(config.plugins.EVOMC_globalsettings.dst_left.value)[2:] + " > /proc/stb/vmpeg/0/dst_left") # system("echo " + hex(config.plugins.EVOMC_globalsettings.dst_width.value)[2:] + " > /proc/stb/vmpeg/0/dst_width") # system("echo " + hex(config.plugins.EVOMC_globalsettings.dst_height.value)[2:] + " > /proc/stb/vmpeg/0/dst_height") def KeyMenu(self): # self.ThumbTimer.stop() if self["filelist"].canDescent(): if self.filelist.getCurrent()[0][1]: self.currentDirectory = self.filelist.getCurrent()[0][0] foldername = self.currentDirectory.split('/') foldername = foldername[-2] self.session.open(EVOMC_FolderOptions, self.currentDirectory, foldername) # def StartThumb(self): # self.session.openWithCallback(self.returnVal, ThumbView, self.filelist.getFileList(), self.filelist.getFilename(), self.filelist.getCurrentDirectory()) # def returnVal(self, val=0): # if val > 0: # for x in self.filelist.getFileList(): # if x[0][1] == True: # val += 1 # self.filelist.moveToIndex(val) # def StartExif(self): # if not self.filelist.canDescent(): # self.session.open(ExifView, self.filelist.getCurrentDirectory() + self.filelist.getFilename(), self.filelist.getFilename()) def visibility(self, force=1): if self.isVisible == True: self.isVisible = False self.hide() else: self.isVisible = True self.show() def StopPlayback(self): # self.ThumbTimer.stop() system("echo C -> /dev/ttyAS1") self.session.nav.stopService() self.session.nav.playService(self.oldService) # self.ThumbTimer.start(config.plugins.EVOMC_vp.preview_delay.getValue() * 1000, True) self.DimmerTimer.start( config.plugins.EVOMC_all.dimmer_delay.getValue() * 1000, True) system("stfbcontrol a 255") self.show() def JumpToFolder(self, jumpto=None): if jumpto is None: return else: self["filelist"].changeDir(jumpto) self["currentfolder"].setText(("%s") % (jumpto)) def FavoriteFolders(self): self.session.openWithCallback(self.JumpToFolder, EVOMC_FavoriteFolders) def KeySettings(self): self.session.open(VideoPlayerSettings) config.plugins.EVOMC_vp.save() config.plugins.EVOMC_all.save() def __evDecodeError(self): currPlay = self.session.nav.getCurrentService() sVideoType = currPlay.info().getInfoString( iServiceInformation.sVideoType) print "[__evDecodeError] video-codec %s can't be decoded by hardware" % ( sVideoType) self.session.open(MessageBox, _("This Dreambox can't decode %s video streams!") % sVideoType, type=MessageBox.TYPE_INFO, timeout=10) def __evPluginError(self): currPlay = self.session.nav.getCurrentService() message = currPlay.info().getInfoString(iServiceInformation.sUser + 12) print "[__evPluginError]", message self.session.open(MessageBox, ("GStreamer Error: missing %s") % message, type=MessageBox.TYPE_INFO, timeout=20) def Exit(self): system("stfbcontrol a 255") if self.isVisible == False: self.visibility() return if self.filelist.getCurrentDirectory() is None: config.plugins.EVOMC_vp.lastDir.value = "/" else: config.plugins.EVOMC_vp.lastDir.value = self.filelist.getCurrentDirectory( ) self.session.nav.stopService() self.DimmerTimer.stop() config.plugins.EVOMC_vp.save() config.plugins.EVOMC_all.save() self.close() def showAfterSeek(self): self.show() def checkSkipShowHideLock(self): self.updatedSeekState() def unPauseService(self): self.setSeekState(self.SEEK_STATE_PLAY) def updatedSeekState(self): if self.seekstate == self.SEEK_STATE_PAUSE: self.playlist.pauseFile() elif self.seekstate == self.SEEK_STATE_PLAY: self.playlist.playFile() elif self.isStateForward(self.seekstate): self.playlist.forwardFile() elif self.isStateBackward(self.seekstate): self.playlist.rewindFile() def addPlaylistParser(self, parser, extension): self.playlistparsers[extension] = parser