Example #1
0
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
Example #3
0
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()
Example #4
0
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
Example #6
0
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)
Example #7
0
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