コード例 #1
0
	def manualsetEpgReload(self, answer):
		if answer:
			epgcache = eEPGCache.getInstance()
			epgcache.save()
			epgcache = eEPGCache.getInstance()
			epgcache.load()
			self.setBackup()
コード例 #2
0
ファイル: BackupRestore.py プロジェクト: resmas/enigma2
	def doBackup(self):
		configfile.save()
		if config.plugins.softwaremanager.epgcache.value:
			eEPGCache.getInstance().save()
		try:
			if path.exists(self.backuppath) == False:
				makedirs(self.backuppath)
			self.backupdirs = ' '.join( config.plugins.configurationbackup.backupdirs.value )
			if not "/tmp/installed-list.txt" in self.backupdirs:
				self.backupdirs = self.backupdirs + " /tmp/installed-list.txt"
			if not "/tmp/changed-configfiles.txt" in self.backupdirs:
				self.backupdirs = self.backupdirs + " /tmp/changed-configfiles.txt"

			cmd1 = "opkg list-installed | egrep 'enigma2-plugin-|task-base|packagegroup-base' > /tmp/installed-list.txt"
			cmd2 = "opkg list-changed-conffiles > /tmp/changed-configfiles.txt"
			cmd3 = "tar -czvf " + self.fullbackupfilename + " " + self.backupdirs
			cmd = [cmd1, cmd2, cmd3]
			if path.exists(self.fullbackupfilename):
				dt = str(date.fromtimestamp(stat(self.fullbackupfilename).st_ctime))
				self.newfilename = self.backuppath + "/" + dt + '-' + self.backupfile
				if path.exists(self.newfilename):
					remove(self.newfilename)
				rename(self.fullbackupfilename,self.newfilename)
			if self.finished_cb:
				self.session.openWithCallback(self.finished_cb, Console, title = _("Backup is running..."), cmdlist = cmd,finishedCallback = self.backupFinishedCB,closeOnSuccess = True)
			else:
				self.session.open(Console, title = _("Backup is running..."), cmdlist = cmd,finishedCallback = self.backupFinishedCB, closeOnSuccess = True)
		except OSError:
			if self.finished_cb:
				self.session.openWithCallback(self.finished_cb, MessageBox, _("Sorry, your backup destination is not writeable.\nPlease select a different one."), MessageBox.TYPE_INFO, timeout = 10 )
			else:
				self.session.openWithCallback(self.backupErrorCB,MessageBox, _("Sorry, your backup destination is not writeable.\nPlease select a different one."), MessageBox.TYPE_INFO, timeout = 10 )
コード例 #3
0
ファイル: UsageConfig.py プロジェクト: popazerty/try
	def EpgCacheChanged(configElement):
		config.misc.epgcache_filename.setValue(os.path.join(config.misc.epgcachepath.value, config.misc.epgcachefilename.value.replace('.dat', '') + '.dat'))
		config.misc.epgcache_filename.save()
		eEPGCache.getInstance().setCacheFile(config.misc.epgcache_filename.value)
		epgcache = eEPGCache.getInstance()
		epgcache.save()
		if not config.misc.epgcache_filename.value.startswith("/etc/enigma2/"):
			if os.path.exists('/etc/enigma2/' + config.misc.epgcachefilename.value.replace('.dat', '') + '.dat'):
				os.remove('/etc/enigma2/' + config.misc.epgcachefilename.value.replace('.dat', '') + '.dat')
コード例 #4
0
ファイル: plugin.py プロジェクト: OpenDMM/enigma2
	def test_save(self):
		self.addCleanup(self.cleanup_save)
		testdb = "__test.db"
		self.oldfile = config.misc.epgcache_filename.value
		config.misc.epgcache_filename.value = resolveFilename(SCOPE_CONFIG, testdb)
		self._remove_db()
		print "saving to %s... " % (config.misc.epgcache_filename.value),
		config.misc.epgcache_filename.save()
		eEPGCache.getInstance().save()
コード例 #5
0
ファイル: BackupRestore.py プロジェクト: Open-Plus/opgui
	def doBackup(self):
		self.save_shutdownOK = config.usage.shutdownOK.value
		config.usage.shutdownOK.setValue(True)
		config.usage.shutdownOK.save()
		configfile.save()
		try:
			if config.plugins.softwaremanager.epgcache.value:
				eEPGCache.getInstance().save()
		except:
			pass
		try:
			if path.exists(self.backuppath) == False:
				makedirs(self.backuppath)
			InitConfig()
			self.backupdirs=" ".join(f.strip("/") for f in config.plugins.configurationbackup.backupdirs_default.value)
			for f in config.plugins.configurationbackup.backupdirs.value:
				if not f.strip("/") in self.backupdirs:
					self.backupdirs += " " + f.strip("/")
			if not "tmp/installed-list.txt" in self.backupdirs:
				self.backupdirs += " tmp/installed-list.txt"
			if not "tmp/changed-configfiles.txt" in self.backupdirs:
				self.backupdirs += " tmp/changed-configfiles.txt"
			if not "tmp/passwd.txt" in self.backupdirs:
				self.backupdirs += " tmp/passwd.txt"
			if not "tmp/groups.txt" in self.backupdirs:
				self.backupdirs += " tmp/groups.txt"

			ShellCompatibleFunctions.backupUserDB()
			pkgs=ShellCompatibleFunctions.listpkg(type="user")
			installed = open("/tmp/installed-list.txt", "w")
			installed.write('\n'.join(pkgs))
			installed.close()
			cmd2 = "opkg list-changed-conffiles > /tmp/changed-configfiles.txt"
			cmd3 = "tar -C / -czvf " + self.fullbackupfilename + " " + self.backupdirs
			for f in config.plugins.configurationbackup.backupdirs_exclude.value:
				cmd3 = cmd3 + " --exclude " + f.strip("/")
			for f in BLACKLISTED:
				cmd3 = cmd3 + " --exclude " + f.strip("/")
			cmd = [cmd2, cmd3]
			if path.exists(self.fullbackupfilename):
				dt = str(date.fromtimestamp(stat(self.fullbackupfilename).st_ctime))
				self.newfilename = self.backuppath + "/" + dt + '-' + self.backupfile
				if path.exists(self.newfilename):
					remove(self.newfilename)
				rename(self.fullbackupfilename,self.newfilename)
			if self.finished_cb:
				self.session.openWithCallback(self.finished_cb, Console, title = _("Backup is running..."), cmdlist = cmd,finishedCallback = self.backupFinishedCB,closeOnSuccess = True)
			else:
				self.session.open(Console, title = _("Backup is running..."), cmdlist = cmd,finishedCallback = self.backupFinishedCB, closeOnSuccess = True)
		except OSError:
			if self.finished_cb:
				self.session.openWithCallback(self.finished_cb, MessageBox, _("Sorry, your backup destination is not writeable.\nPlease select a different one."), MessageBox.TYPE_INFO, timeout = 10 )
			else:
				self.session.openWithCallback(self.backupErrorCB,MessageBox, _("Sorry, your backup destination is not writeable.\nPlease select a different one."), MessageBox.TYPE_INFO, timeout = 10 )
コード例 #6
0
	def backupsettings(self, retval):

		if retval:

			if SystemInfo["canMultiBoot"]:
				self.multibootslot = retval[0]
				doBackup = retval[1] == "with backup"
			else:
				doBackup = retval == "with backup"

			BACKUP_SCRIPT = "/usr/lib/enigma2/python/Plugins/Extensions/AutoBackup/settings-backup.sh"

			def findmedia(destination):
				def avail(path):
					if not(SystemInfo["HasMMC"] and '/mmc' in path) and not os.path.islink(path):
						try:
							statvfs = os.statvfs(path)
							return (statvfs.f_bavail * statvfs.f_frsize) / (1 << 20) >= 500 and path
						except:
							pass
				for path in [destination] + getNonNetworkMediaMounts():
					if avail(path):
						return path

			self.destination = findmedia(os.path.isfile(BACKUP_SCRIPT) and config.plugins.autobackup.where.value or "/media/hdd")

			if self.destination:

				destination = "/".join([self.destination, 'downloaded_images'])
				self.zippedimage = "://" in self.source and "/".join([destination, self.imagename]) or self.source
				self.unzippedimage = "/".join([destination, '%s.unzipped' % self.imagename[:-4]])

				if os.path.isfile(destination):
					os.remove(destination)
				if not os.path.isdir(destination):
					os.mkdir(destination)

				if doBackup:
					if os.path.isfile(BACKUP_SCRIPT):
						self["info"].setText(_("Backing up to: %s") % self.destination)
						configfile.save()
						if config.plugins.autobackup.epgcache.value:
							eEPGCache.getInstance().save()
						self.containerbackup = Console()
						self.containerbackup.ePopen("%s%s'%s' %s" % (BACKUP_SCRIPT, config.plugins.autobackup.autoinstall.value and " -a " or " ", self.destination, int(config.plugins.autobackup.prevbackup.value)), self.backupsettingsDone)
					else:
						self.session.openWithCallback(self.startDownload, MessageBox, _("Unable to backup settings as the AutoBackup plugin is missing, do you want to continue?"), default=False, simple=True)
				else:
					self.startDownload()
			else:
				self.session.openWithCallback(self.abort, MessageBox, _("Could not find suitable media - Please insert a media (e.g. USB stick) and try again!"), type=MessageBox.TYPE_ERROR, simple=True)
		else:
			self.abort()
コード例 #7
0
ファイル: UsageConfig.py プロジェクト: 1198s/enigma2
	def EpgSettingsChanged(configElement):
		mask = 0xffffffff
		if not config.epg.eit.value:
			mask &= ~(eEPGCache.NOWNEXT | eEPGCache.SCHEDULE | eEPGCache.SCHEDULE_OTHER)
		if not config.epg.mhw.value:
			mask &= ~eEPGCache.MHW
		if not config.epg.freesat.value:
			mask &= ~(eEPGCache.FREESAT_NOWNEXT | eEPGCache.FREESAT_SCHEDULE | eEPGCache.FREESAT_SCHEDULE_OTHER)
		if not config.epg.viasat.value:
			mask &= ~eEPGCache.VIASAT
		if not config.epg.netmed.value:
			mask &= ~(eEPGCache.NETMED_SCHEDULE | eEPGCache.NETMED_SCHEDULE_OTHER)
		eEPGCache.getInstance().setEpgSources(mask)
コード例 #8
0
ファイル: plugin.py プロジェクト: MOA-2011/enigma2-plugins
	def cancel(self):
		nowTime = time.time()
		if nowTime > 1388534400:
			setRTCtime(nowTime)
			if config.plugins.SystemTime.choiceSystemTime.value == "0":
				eDVBLocalTimeHandler.getInstance().setUseDVBTime(True)
			else:
				eDVBLocalTimeHandler.getInstance().setUseDVBTime(False)
			try:
				eEPGCache.getInstance().timeUpdated()
			except:
				pass
		Console.cancel(self)
コード例 #9
0
ファイル: FlashImage.py プロジェクト: openNSS/enigma2
	def startBackupsettings(self, retval):
		if retval:
			if os.path.isfile(self.BACKUP_SCRIPT):
				self["info"].setText(_("Backing up to: %s") % self.destination)
				configfile.save()
				if config.plugins.autobackup.epgcache.value:
					eEPGCache.getInstance().save()
				self.containerbackup = Console()
				self.containerbackup.ePopen("%s%s'%s' %s" % (self.BACKUP_SCRIPT, config.plugins.autobackup.autoinstall.value and " -a " or " ", self.destination, int(config.plugins.autobackup.prevbackup.value)), self.backupsettingsDone)
			else:
				self.session.openWithCallback(self.startDownload, MessageBox, _("Unable to backup settings as the AutoBackup plugin is missing, do you want to continue?"), default=False, simple=True)
		else:
			self.abort()
コード例 #10
0
	def update_schedule(self, result = None, retval = None, extra_args = None):
		if eDVBLocalTimeHandler.getInstance().ready():
			nowTime = time()
			if nowTime > 1388534400:
				setRTCtime(nowTime)
				if config.plugins.SystemTime.choiceSystemTime.value == "0":
					eDVBLocalTimeHandler.getInstance().setUseDVBTime(True)
				else:
					eDVBLocalTimeHandler.getInstance().setUseDVBTime(False)
				try:
					eEPGCache.getInstance().timeUpdated()
				except:
					pass
コード例 #11
0
ファイル: NetworkTime.py プロジェクト: ALShalahi/enigma2
	def update_schedule(self, result = None, retval = None, extra_args = None):
		nowTime = time()
		if nowTime > 10000:
			print '[NTP]: setting E2 time:',nowTime
			setRTCtime(nowTime)
			if config.misc.SyncTimeUsing.value == "1":
				eDVBLocalTimeHandler.getInstance().setUseDVBTime(False)
			else:
				eDVBLocalTimeHandler.getInstance().setUseDVBTime(True)
			eEPGCache.getInstance().timeUpdated()
			self.timer.startLongTimer(int(config.misc.useNTPminutes.value) * 60)
		else:
			print 'NO TIME SET'
			self.timer.startLongTimer(10)
コード例 #12
0
	def setEpgReload(self, answer):
		if answer:
			epgcache = eEPGCache.getInstance()
			epgcache.save()
			epgcache = eEPGCache.getInstance()
			epgcache.load()
			self.updateDestination()
			if config.plugins.epgrefresh_extra.save_backup.value and config.plugins.epgrefresh_extra.epgcachepath.value != "/etc/enigma2/":
				restore_backup = config.misc.epgcache_filename.value + ".backup"
				if os.path.exists(config.misc.epgcache_filename.value):
					try:
						os.system("cp -f %s %s" % (config.misc.epgcache_filename.value, restore_backup))
						os.chmod("%s" % (restore_backup), 0644)
					except:
						pass
コード例 #13
0
ファイル: BackupRestore.py プロジェクト: Huevos/enigma2
 def doBackup(self):
     configfile.save()
     if config.plugins.softwaremanager.epgcache.value:
         eEPGCache.getInstance().save()
     try:
         if not path.exists(self.backuppath):
             makedirs(self.backuppath)
         self.backupdirs = " ".join(config.plugins.configurationbackup.backupdirs.value)
         if path.exists(self.fullbackupfilename):
             dt = str(date.fromtimestamp(stat(self.fullbackupfilename).st_ctime))
             self.newfilename = self.backuppath + "/" + dt + "-" + self.backupfile
             if path.exists(self.newfilename):
                 remove(self.newfilename)
             rename(self.fullbackupfilename, self.newfilename)
         if self.finished_cb:
             self.session.openWithCallback(
                 self.finished_cb,
                 Console,
                 title=_("Backup is running..."),
                 cmdlist=["tar -czvf " + self.fullbackupfilename + " " + self.backupdirs],
                 finishedCallback=self.backupFinishedCB,
                 closeOnSuccess=True,
             )
         else:
             self.session.open(
                 Console,
                 title=_("Backup is running..."),
                 cmdlist=["tar -czvf " + self.fullbackupfilename + " " + self.backupdirs],
                 finishedCallback=self.backupFinishedCB,
                 closeOnSuccess=True,
             )
     except OSError:
         if self.finished_cb:
             self.session.openWithCallback(
                 self.finished_cb,
                 MessageBox,
                 _("Sorry, your backup destination is not writeable.\nPlease select a different one."),
                 MessageBox.TYPE_INFO,
                 timeout=10,
             )
         else:
             self.session.openWithCallback(
                 self.backupErrorCB,
                 MessageBox,
                 _("Sorry, your backup destination is not writeable.\nPlease select a different one."),
                 MessageBox.TYPE_INFO,
                 timeout=10,
             )
コード例 #14
0
def saveEpg():
	epgcache = eEPGCache.getInstance()
	epgcache.save()
	return {
		"result": True,
		"message": ""
	}
コード例 #15
0
def getServicesNowNextEpg(sList):
	ret = []
	if not sList:
		return { "events": ret, "result": False }

	sRefList = sList.split(",")
	search = ['IBDCTSERNX']
	for service in sRefList:
		search.append((service, 0, -1))
		search.append((service, 1, -1))

	epgcache = eEPGCache.getInstance()
	events = epgcache.lookupEvent(search)
	if events is not None:
		for event in events:
			ev = {}
			ev['id'] = event[0]
			ev['begin_timestamp'] = event[1]
			ev['duration_sec'] = event[2]
			ev['title'] = event[4]
			ev['shortdesc'] = convertDesc(event[5])
			ev['longdesc'] = convertDesc(event[6])
			#if event[7] is not None:
			#	achannels = GetWithAlternative(event[7], False)
			#	if achannels:
			#		ev['asrefs'] = achannels
			ev['sref'] = event[7]
			ev['sname'] = filterName(event[8])
			ev['now_timestamp'] = event[3]
			ret.append(ev)

	return { "events": ret, "result": True }
コード例 #16
0
def getSearchSimilarEpg(ref, eventid):
	ref = unquote(ref)
	ret = []
	ev = {}
	epgcache = eEPGCache.getInstance()
	events = epgcache.search(('IBDTSENR', 128, eEPGCache.SIMILAR_BROADCASTINGS_SEARCH, ref, eventid));
	if events is not None:
		for event in events:
			ev = {}
			ev['id'] = event[0]
			ev['date'] = "%s %s" % (tstrings[("day_" + strftime("%w", (localtime(event[1]))))], strftime("%d.%m.%Y", (localtime(event[1]))))
			ev['begin_timestamp'] = event[1]
			ev['begin'] = strftime("%H:%M", (localtime(event[1])))
			ev['duration_sec'] = event[2]
			ev['duration'] = int(event[2] / 60)
			ev['end'] = strftime("%H:%M",(localtime(event[1] + event[2])))
			ev['title'] = event[3]
			ev['shortdesc'] = convertDesc(event[4])
			ev['longdesc'] = convertDesc(event[5])
			ev['sref'] = event[7]
			ev['sname'] = filterName(event[6])
			ev['picon'] = getPicon(event[7])
			ev['now_timestamp'] = None
			ret.append(ev)

	return { "events": ret, "result": True }
コード例 #17
0
def getNowNextEpg(ref, servicetype):
	ref = unquote(ref)
	ret = []
	epgcache = eEPGCache.getInstance()
	events = epgcache.lookupEvent(['IBDCTSERNX', (ref, servicetype, -1)])
	if events is not None:
		for event in events:
			ev = {}
			ev['id'] = event[0]
			if event[1]:
				ev['begin_timestamp'] = event[1]
				ev['duration_sec'] = event[2]
				ev['title'] = event[4]
				ev['shortdesc'] = convertDesc(event[5])
				ev['longdesc'] = convertDesc(event[6])
				ev['sref'] = event[7]
				ev['sname'] = filterName(event[8])
				ev['now_timestamp'] = event[3]
				ev['remaining'] = (event[1] + event[2]) - event[3]
			else:
				ev['begin_timestamp'] = 0
				ev['duration_sec'] = 0
				ev['title'] = "N/A"
				ev['shortdesc'] = ""
				ev['longdesc'] = ""
				ev['sref'] = event[7]
				ev['sname'] = filterName(event[8])
				ev['now_timestamp'] = 0
				ev['remaining'] = 0

			ret.append(ev)

	return { "events": ret, "result": True }
コード例 #18
0
	def __init__(self, session, service=None, event=None):
		Screen.__init__(self, session)
		
		global instance
		instance = self
		
		self.session = session
		self.skinName = [ "SeriesPluginInfoScreen" ]
		
		self["logo"] = Pixmap()
		self["cover"] = Pixmap()
		self["state"] = Pixmap()
		
		self["event_title"] = Label()
		self["event_episode"] = Label()
		self["event_description"] = ScrollLabel()
		self["datetime"] = Label()
		self["channel"] = Label()
		self["duration"] = Label()
		
		self["key_red"] = Button("")				# Rename or Record
		self["key_green"] = Button("")			# Trakt Seen / Not Seen
		self["key_yellow"] = Button("")			# Show all Episodes of current season
		self["key_blue"] = Button("")				# Show all Seasons
		
		self.redButtonFunction = None
		
		#TODO HelpableActionMap
		self["actions"] = ActionMap(["OkCancelActions", "EventViewActions", "DirectionActions", "ColorActions"],
		{
			"cancel":    self.close,
			"ok":        self.close,
			"up":        self["event_description"].pageUp,
			"down":      self["event_description"].pageDown,
			"red":       self.redButton,
			"prevEvent": self.prevEpisode,
			"nextEvent": self.nextEpisode,
			
			#TODO
			#"pageUp":    self.pageUp,
			#"pageDown":  self.pageDown,
			#"openSimilarList": self.openSimilarList
		})
		
		splog("SPI: SeriesPluginInfo", service, event)
		self.service = service
		self.event = event
		
		self.name = ""
		self.short = ""
		self.data = None
		
		self.path = None
		self.eservice = None
		
		self.epg = eEPGCache.getInstance()
		self.serviceHandler = eServiceCenter.getInstance()
		self.seriesPlugin = getInstance()
		
		self.onLayoutFinish.append( self.layoutFinished )
コード例 #19
0
def getBouquetEpg(ref, begintime=-1, endtime=None):
	ref = unquote(ref)
	ret = []
	services = eServiceCenter.getInstance().list(eServiceReference(ref))
	if not services:
		return { "events": ret, "result": False }

	search = ['IBDCTSERN']
	for service in services.getContent('S'):
		if endtime:
			search.append((service, 0, begintime, endtime))
		else:
			search.append((service, 0, begintime))

	epgcache = eEPGCache.getInstance()
	events = epgcache.lookupEvent(search)
	if events is not None:
		for event in events:
			ev = {}
			ev['id'] = event[0]
			ev['begin_timestamp'] = event[1]
			ev['duration_sec'] = event[2]
			ev['title'] = event[4]
			ev['shortdesc'] = convertDesc(event[5])
			ev['longdesc'] = convertDesc(event[6])
			ev['sref'] = event[7]
			ev['sname'] = filterName(event[8])
			ev['now_timestamp'] = event[3]
			ret.append(ev)

	return { "events": ret, "result": True }
コード例 #20
0
	def loadepg(self, result, retval, extra_args):
		if retval is 0:
			epgcache = new.instancemethod(_enigma.eEPGCache_load,None,eEPGCache)
			epgcache = eEPGCache.getInstance().load()
			self.mbox = self.session.open(MessageBox,(_("EPG downloaded")), MessageBox.TYPE_INFO, timeout = 4 )
		else:
			self.mbox = self.session.open(MessageBox,(_("Sorry, the EPG download error")), MessageBox.TYPE_INFO, timeout = 4 )
コード例 #21
0
ファイル: NovumEventsInfo.py プロジェクト: gazhay/skins
	def __init__(self, type):
		Converter.__init__(self, type)
		self.epgcache = eEPGCache.getInstance()

		args = type.split(',')
		if len(args) != 2: 
			raise ElementError("type must contain exactly 2 arguments")
	
		type = args.pop(0)
		showDuration = args.pop(0)
				
		if type == "Event1":
			self.type = self.Event1
		elif type == "Event2":
			self.type = self.Event2
		elif type == "Event3":
			self.type = self.Event3
		elif type == "PrimeTime":
			self.type = self.PrimeTime
		else:
			self.type = self.Event0
			
		if showDuration == "noDuration":
			self.showDuration = self.noDuration
		elif showDuration == "onlyDuration":
			self.showDuration = self.onlyDuration
		elif showDuration == "showDuration":
			self.showDuration = self.withDuration
		elif showDuration == "shortDescription":
			self.showDuration = self.shortDescription
		else:
			self.showDuration = self.longDescription
コード例 #22
0
def loadEpg():
	epgcache = eEPGCache.getInstance()
	epgcache.load()
	return {
		"result": True,
		"message": ""
	}
コード例 #23
0
ファイル: EventName.py プロジェクト: Mariusz1970/enigma2
	def __init__(self, type):
		Converter.__init__(self, type)
		self.epgcache = eEPGCache.getInstance()
		if type == "Description":
			self.type = self.SHORT_DESCRIPTION
		elif type == "ExtendedDescription":
			self.type = self.EXTENDED_DESCRIPTION
		elif type == "FullDescription":
			self.type = self.FULL_DESCRIPTION
		elif type == "ID":
			self.type = self.ID
		elif type == "NameNow" or type == "NowName":
			self.type = self.NAME_NOW
		elif type == "NameNext" or type == "NextName":
			self.type = self.NAME_NEXT
		elif type == "Genre":
			self.type = self.GENRE
		elif type == "Rating":
			self.type = self.RATING
		elif type == "SmallRating":
			self.type = self.SRATING

		elif type == "NextDescription":
			self.type = self.NEXT_DESCRIPTION
		elif type == "ThirdName":
			self.type = self.THIRD_NAME
		elif type == "ThirdDescription":
			self.type = self.THIRD_DESCRIPTION
		else:
			self.type = self.NAME
コード例 #24
0
	def updateEpgCache(self):
		config.misc.epgcache_filename.setValue(os.path.join(config.plugins.epgrefresh_extra.epgcachepath.value, config.plugins.epgrefresh_extra.epgcachefilename.value.replace(".dat","") + ".dat"))
		config.misc.epgcache_filename.save()
		configfile.save()
		if self.prev_lastepgcachepath != config.misc.epgcache_filename.value:
			eEPGCache.getInstance().setCacheFile(config.misc.epgcache_filename.value)
			eEPGCache.getInstance().save()
			self.updateDestination()
			if config.plugins.epgrefresh_extra.save_backup.value and config.plugins.epgrefresh_extra.epgcachepath.value != "/etc/enigma2/":
				restore_backup = config.misc.epgcache_filename.value + ".backup"
				if os.path.exists(config.misc.epgcache_filename.value):
					try:
						os.system("cp -f %s %s" % (config.misc.epgcache_filename.value, restore_backup))
						os.chmod("%s" % (restore_backup), 0644)
					except:
						pass
コード例 #25
0
	def __init__(self, selChangedCB = None, timer = None, time_epoch = 120, overjump_empty = True):
		GUIComponent.__init__(self)
		self.cur_event = None
		self.cur_service = None
		self.offs = 0
		self.timer = timer
		self.last_time = time()
		self.onSelChanged = [ ]
		if selChangedCB is not None:
			self.onSelChanged.append(selChangedCB)
		self.l = eListboxPythonMultiContent()
		self.l.setBuildFunc(self.buildEntry)
		self.setOverjump_Empty(overjump_empty)
		self.epgcache = eEPGCache.getInstance()
		self.clocks =  [ LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_SKIN, 'skin_default/icons/epgclock_add.png')),
				 LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_SKIN, 'skin_default/icons/epgclock_pre.png')),
				 LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_SKIN, 'skin_default/icons/epgclock.png')),
				 LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_SKIN, 'skin_default/icons/epgclock_prepost.png')),
				 LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_SKIN, 'skin_default/icons/epgclock_post.png')) ]
		self.time_base = None
		self.time_epoch = time_epoch
		self.list = None
		self.select_rect = None
		self.event_rect = None
		self.service_rect = None
		self.picon_size = None
		self.currentlyPlaying = None
		self.showPicon = False
		self.showServiceTitle = True
		self.picload = ePicLoad()
		self.nowEvPix = None
		self.othEvPix = None
		self.selEvPix = None
		self.recEvPix = None
		self.curSerPix = None

		self.foreColor = 0xffffff
		self.foreColorSelected = 0xffc000
		self.borderColor = 0x464445
		self.backColor = 0x595959
		self.backColorSelected = 0x808080
		self.foreColorService = 0xffffff
		self.foreColorServiceSelected = 0xffffff
		self.backColorService = 0x000000
		self.backColorServiceSelected = 0x508050
		self.borderColorService = 0x000000
		self.foreColorNow = 0xffffff
		self.backColorNow = 0x505080
		self.foreColorRec = 0xffffff
		self.backColorRec = 0x805050
		self.serviceFont = gFont("Regular", 20)
		self.entryFontName = "Regular"
		self.entryFontSize = 18

		self.listHeight = None
		self.listWidth = None
		self.serviceBorderWidth = 1
		self.serviceNamePadding = 0
		self.eventBorderWidth = 1
		self.eventNamePadding = 0
コード例 #26
0
ファイル: TimerEntry.py プロジェクト: OpenDMM/enigma2
	def keyGo(self, result = None):
		self.getConfigListValues()
		if self.timer.eit is not None:
			event = eEPGCache.getInstance().lookupEventId(self.timer.service_ref.ref, self.timer.eit)
			if event:
				n = event.getNumOfLinkageServices()
				if n > 1:
					tlist = []
					ref = self.session.nav.getCurrentlyPlayingServiceReference()
					parent = self.timer.service_ref.ref
					selection = 0
					for x in range(n):
						i = event.getLinkageService(parent, x)
						if i.toString() == ref.toString():
							selection = x
						tlist.append((i.getName(), i))
					self.session.openWithCallback(self.subserviceSelected, ChoiceBox, title=_("Please select a subservice to record..."), list = tlist, selection = selection)
					return
				elif n > 0:
					parent = self.timer.service_ref.ref
					self.timer.service_ref = ServiceReference(event.getLinkageService(parent, 0))
		
		if self.timerentry_plugins:
			self.timer.plugins = {}
			for key, val in self.timerentry_plugins.iteritems():
				self.timer.plugins[val[0]] = (str(key[1].value),str(val[2]))
				print "timerentry self.timer.plugins", self.timer.plugins
		
		self.saveTimer()
		self.close((True, self.timer))
コード例 #27
0
	def searchEPG(self, searchString = None, searchSave = True):
		if searchString:
			self.currSearch = searchString
			if searchSave:
				# Maintain history
				history = config.plugins.epgsearch.history.value
				if searchString not in history:
					history.insert(0, searchString)
					maxLen = config.plugins.epgsearch.history_length.value
					if len(history) > maxLen:
						del history[maxLen:]
				else:
					history.remove(searchString)
					history.insert(0, searchString)

			# Workaround to allow search for umlauts if we know the encoding (pretty bad, I know...)
			encoding = config.plugins.epgsearch.encoding.value
			searchString = searchString.replace('\xc2\x86', '').replace('\xc2\x87', '')
			if encoding != 'UTF-8':
				try:
					searchString = searchString.decode('UTF-8').encode(encoding)
				except (UnicodeDecodeError, UnicodeEncodeError):
					pass

			# Search EPG, default to empty list
			epgcache = eEPGCache.getInstance() # XXX: the EPGList also keeps an instance of the cache but we better make sure that we get what we want :-)
			ret = epgcache.search(('RIBDT', 1000, eEPGCache.PARTIAL_TITLE_SEARCH, searchString, eEPGCache.NO_CASE_CHECK)) or []
			ret.sort(key=itemgetter(2)) # sort by time

			# Update List
			l = self["list"]
			l.recalcEntrySize()
			l.list = ret
			l.l.setList(ret)
コード例 #28
0
ファイル: GraphMultiEpg.py プロジェクト: kakunbsc/enigma2.2
    def __init__(self, selChangedCB=None, timer=None, time_epoch=120, overjump_empty=True):
        self.cur_event = None
        self.cur_service = None
        self.offs = 0
        self.timer = timer
        self.onSelChanged = []
        if selChangedCB is not None:
            self.onSelChanged.append(selChangedCB)
        GUIComponent.__init__(self)
        self.l = eListboxPythonMultiContent()
        self.l.setItemHeight(54)
        self.l.setBuildFunc(self.buildEntry)
        if overjump_empty:
            self.l.setSelectableFunc(self.isSelectable)
        self.epgcache = eEPGCache.getInstance()
        self.clock_pixmap = LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, "750S/icons/epgclock.png"))
        self.clock_add_pixmap = LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, "750S/icons/epgclock_add.png"))
        self.clock_pre_pixmap = LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, "750S/icons/epgclock_pre.png"))
        self.clock_post_pixmap = LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, "750S/icons/epgclock_post.png"))
        self.clock_prepost_pixmap = LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, "750S/icons/epgclock_prepost.png"))
        self.time_base = None
        self.time_epoch = time_epoch
        self.list = None
        self.event_rect = None

        self.foreColor = None
        self.foreColorSelected = None
        self.borderColor = None
        self.backColor = 0x586D88
        self.backColorSelected = 0x808080
        self.foreColorService = None
        self.backColorService = None
コード例 #29
0
	def currentEventTime(self):
		remaining = 0
		ref = self.session.nav.getCurrentlyPlayingServiceReference()
		if ref:
			path = ref.getPath()
			if path: # Movie
				service = self.session.nav.getCurrentService()
				seek = service and service.seek()
				if seek:
					length = seek.getLength()
					position = seek.getPlayPosition()
					if length and position:
						remaining = length[1] - position[1]
						if remaining > 0:
							remaining = remaining / 90000
			else: # DVB
				epg = eEPGCache.getInstance()
				event = epg.lookupEventTime(ref, -1, 0)
				if event:
					now = int(time())
					start = event.getBeginTime()
					duration = event.getDuration()
					end = start + duration
					remaining = end - now
		if remaining > 0:
			return remaining + config.recording.margin_after.value * 60
		return remaining
コード例 #30
0
	def prepareRefresh(self):
		print("[EPGRefresh] About to start refreshing EPG")
		try:
			self.readConfiguration()
		except Exception as e:
			print("[EPGRefresh] Error occured while reading in configuration:", e)
		if len(self.services[0]) == 0 and len(self.services[1]) == 0:
			self.isrunning = False
			return
		self.scanServices = self.generateServicelist(self.services[0], self.services[1])
		print("[EPGRefresh] Services we're going to scan:", ', '.join([repr(x) for x in self.scanServices]))
		self.maybeStopAdapter()
		if config.plugins.epgrefresh.adapter.value == "main":
			refreshAdapter = MainPictureAdapter(self.session)
		elif config.plugins.epgrefresh.adapter.value == "record":
			refreshAdapter = RecordAdapter(self.session)
		else:
			if config.plugins.epgrefresh.adapter.value == "pip":
				hidden = False
			elif config.plugins.epgrefresh.adapter.value == "pip_hidden":
				hidden = True
			refreshAdapter = PipAdapter(self.session, hide=hidden)
		if (not refreshAdapter.backgroundCapable and Screens.Standby.inStandby) or not refreshAdapter.prepare():
			print("[EPGRefresh] Adapter is not able to run in background or not available, falling back to MainPictureAdapter")
			refreshAdapter = MainPictureAdapter(self.session)
			refreshAdapter.prepare()
		self.refreshAdapter = refreshAdapter
		self.isrunning = True
		if config.plugins.epgrefresh.erase.value:
			print("[EPGRefresh] flushing EPG cache...")
			from enigma import eEPGCache
			epgcache = eEPGCache.getInstance()
			epgcache.flushEPG()
		self.refresh()
		print("[EPGRefresh] pre start...")
コード例 #31
0
ファイル: SVDRP.py プロジェクト: OpenVisionE2/enigma2-plugins
    def LSTE(self, args):
        args = args.split()
        first = args and args.pop(0)
        #TODO: find out format of "at <time>"
        if not first or first in ('now', 'next',
                                  'at') or args and args[1] == "at":
            # XXX: "parameter not implemented" might be weird to say in case of no parameters, but who cares :-)
            payload = "%d parameter not implemented" % (CODE_IMP_PARAM, )
            return self.sendLine(payload)
        try:
            channelId = int(first) - 1
            service = self.channelList[channelId]
        except ValueError:
            # XXX: add support for sref
            payload = "%d parameter not implemented" % (CODE_IMP_PARAM, )
            return self.sendLine(payload)

        # handle additional parametes "now" and "next"
        type = 0
        time = -1
        endtime = -1
        options = "IBDTSERN"
        if args:
            options = "IBDTSERNX"
            if args[0] == "now":
                type = 0
                endtime = None
            elif args[0] == "next":
                type = 1
                endtime = None

        # fetch data
        epgcache = eEPGCache.getInstance()
        if endtime is None:
            params = (service, type, time)
        else:
            params = (service, type, time, endtime)
        events = epgcache.lookupEvent([options, params])
        if not events:
            return self.sendLine("550 No schedule found")

        # process data
        def sendEventLine(eit, begin, duration, title, description, extended,
                          sref, sname):
            payload = "%d-E %d %d %d 0" % (CODE_EPG, eit, begin, duration)
            self.sendLine(payload)
            payload = "%d-T %s" % (CODE_EPG, title)
            self.sendLine(payload)
            payload = "%d-S %s" % (CODE_EPG, description)
            self.sendLine(payload)
            payload = "%d-D %s" % (CODE_EPG, extended.replace('\xc2\x8a', '|'))
            self.sendLine(payload)
            payload = "%d-e" % (CODE_EPG, )
            self.sendLine(payload)

        lastItem = events.pop()
        payload = "%d-C %s %s" % (CODE_EPG, lastItem[-2], lastItem[-1])
        self.sendLine(payload)
        for event in events:
            sendEventLine(*event)
        sendEventLine(*lastItem)
        payload = "%d-c" % (CODE_EPG, )
        self.sendLine(payload)
        payload = "%d End of EPG data" % (CODE_EPG, )
        self.sendLine(payload)
コード例 #32
0
ファイル: Vps.py プロジェクト: wolfje55/enigma2-plugins
    def check_and_add_event(self, neweventid):
        if not config.plugins.vps.allow_seeking_multiple_pdc.value:
            return

        epgcache = eEPGCache.getInstance()
        evt = epgcache.lookupEventId(self.rec_ref, neweventid)

        if evt:
            evt_begin = evt.getBeginTime() + 60
            evt_end = evt.getBeginTime() + evt.getDuration() - 60

            if evt_begin < self.timer.begin:
                return

            for checktimer in self.session.nav.RecordTimer.timer_list:
                if checktimer == self.timer:
                    continue
                if (checktimer.begin - evt_begin) > 3600 * 2:
                    break

                compareString = checktimer.service_ref.ref.toCompareString()
                if compareString == self.timer.service_ref.ref.toCompareString(
                ) or compareString == self.rec_ref.toCompareString():
                    if checktimer.eit == neweventid:
                        return

                    if checktimer.begin <= evt_begin and checktimer.end >= evt_end:
                        if checktimer.vpsplugin_enabled is None or not checktimer.vpsplugin_enabled:
                            return

                        # manuell angelegter Timer mit VPS
                        if checktimer.name == "" and checktimer.vpsplugin_time is not None:
                            checktimer.eit = neweventid
                            checktimer.name = evt.getEventName()
                            checktimer.description = evt.getShortDescription()
                            checktimer.vpsplugin_time = None
                            checktimer.log(
                                0,
                                "[VPS] changed timer (found same PDC-Time as in other VPS-recording)"
                            )
                            return

            # eigenen Timer überprüfen, wenn Zeiten nicht überschrieben werden dürfen
            if not self.timer.vpsplugin_overwrite and evt_begin <= self.timer.end:
                check_already_existing = [
                    x for (x, y) in self.next_events if y == neweventid
                ]
                if len(check_already_existing) > 0:
                    start = check_already_existing.pop()
                    if start == evt_begin:
                        return
                    else:
                        self.next_events.remove((start, neweventid))
                        self.timer.log(
                            0, "[VPS] delete event_id " + str(neweventid) +
                            " because of delay " + str(evt_begin - start))

                self.next_events.append((evt_begin, neweventid))
                self.next_events = sorted(self.next_events)
                self.timer.log(0, "[VPS] add event_id " + str(neweventid))

            else:
                newevent_data = parseEvent(evt)
                newEntry = RecordTimerEntry(ServiceReference(self.rec_ref),
                                            *newevent_data)
                newEntry.vpsplugin_enabled = True
                newEntry.vpsplugin_overwrite = True
                newEntry.dirname = self.timer.dirname
                newEntry.log(
                    0,
                    "[VPS] added this timer (found same PDC-Time as in other VPS-recording)"
                )

                # Wenn kein Timer-Konflikt auftritt, wird der Timer angelegt.
                res = NavigationInstance.instance.RecordTimer.record(newEntry)
                self.timer.log(0, "[VPS] added another timer, res " + str(res))
コード例 #33
0
 def SaveEPG(self):
     from enigma import eEPGCache
     epgcache = eEPGCache.getInstance()
     epgcache.save()
コード例 #34
0
    def backupsettings(self, retval):

        if retval:

            if SystemInfo["canMultiBoot"]:
                self.multibootslot = retval

            BACKUP_SCRIPT = "/usr/lib/enigma2/python/Plugins/Extensions/AutoBackup/settings-backup.sh"

            def findmedia(destination):
                def avail(path):
                    if os.path.isdir(path) and not os.path.islink(
                            path) and not (SystemInfo["HasMMC"]
                                           and '/mmc' in path):
                        statvfs = os.statvfs(path)
                        return (statvfs.f_bavail *
                                statvfs.f_frsize) / (1 << 20) >= 500 and path

                for path in [destination] + [
                        '/media/%s' % x for x in os.listdir('/media')
                ]:
                    if avail(path):
                        return path

            self.destination = findmedia(
                os.path.isfile(BACKUP_SCRIPT)
                and config.plugins.autobackup.where.value or "/media/hdd")

            if self.destination:

                destination = "/".join([self.destination, 'downloaded_images'])
                self.zippedimage = "://" in self.source and "/".join(
                    [destination, self.imagename]) or self.source
                self.unzippedimage = "/".join(
                    [destination,
                     '%s.unzipped' % self.imagename[:-4]])

                if os.path.isfile(destination):
                    os.remove(destination)
                if not os.path.isdir(destination):
                    os.mkdir(destination)

                if os.path.isfile(BACKUP_SCRIPT):
                    self["info"].setText(
                        _("Backing up to: %s") % self.destination)
                    configfile.save()
                    if config.plugins.autobackup.epgcache.value:
                        eEPGCache.getInstance().save()
                    self.containerbackup = Console()
                    self.containerbackup.ePopen(
                        "%s%s'%s' %s" %
                        (BACKUP_SCRIPT,
                         config.plugins.autobackup.autoinstall.value and " -a "
                         or " ", self.destination,
                         int(config.plugins.autobackup.prevbackup.value)),
                        self.backupsettingsDone)
                else:
                    self.session.openWithCallback(
                        self.startDownload,
                        MessageBox,
                        _("Unable to backup settings as the AutoBackup plugin is missing, do you want to continue?"
                          ),
                        default=False,
                        simple=True)
            else:
                self.session.openWithCallback(
                    self.abort,
                    MessageBox,
                    _("Could not find suitable media - Please insert a media (e.g. USB stick) and try again!"
                      ),
                    type=MessageBox.TYPE_ERROR,
                    simple=True)
        else:
            self.abort()
コード例 #35
0
def getInfo(session=None, need_fullinfo=False):
    # TODO: get webif versione somewhere!
    info = {}
    global STATICBOXINFO

    if not (STATICBOXINFO is None or need_fullinfo):
        return STATICBOXINFO

    info['brand'] = getMachineBrand()
    info['model'] = getMachineName()
    info['boxtype'] = getBoxType()
    info['machinebuild'] = getMachineBuild()

    chipset = "unknown"
    if fileExists("/etc/.box"):
        f = open("/etc/.box", 'r')
        model = f.readline().strip().lower()
        f.close()
        if model.startswith("ufs") or model.startswith("ufc"):
            if model in ("ufs910", "ufs922", "ufc960"):
                chipset = "SH4 @266MHz"
            else:
                chipset = "SH4 @450MHz"
        elif model in ("topf", "tf7700hdpvr"):
            chipset = "SH4 @266MHz"
        elif model.startswith("azbox"):
            f = open("/proc/stb/info/model", 'r')
            model = f.readline().strip().lower()
            f.close()
            if model == "me":
                chipset = "SIGMA 8655"
            elif model == "minime":
                chipset = "SIGMA 8653"
            else:
                chipset = "SIGMA 8634"
        elif model.startswith("spark"):
            if model == "spark7162":
                chipset = "SH4 @540MHz"
            else:
                chipset = "SH4 @450MHz"
    elif fileExists("/proc/stb/info/azmodel"):
        f = open("/proc/stb/info/model", 'r')
        model = f.readline().strip().lower()
        f.close()
        if model == "me":
            chipset = "SIGMA 8655"
        elif model == "minime":
            chipset = "SIGMA 8653"
        else:
            chipset = "SIGMA 8634"
    elif fileExists("/proc/stb/info/model"):
        f = open("/proc/stb/info/model", 'r')
        model = f.readline().strip().lower()
        f.close()
        if model == "tf7700hdpvr":
            chipset = "SH4 @266MHz"
        elif model == "nbox":
            chipset = "STi7100 @266MHz"
        elif model == "arivalink200":
            chipset = "STi7109 @266MHz"
        elif model in ("adb2850", "adb2849", "dsi87"):
            chipset = "STi7111 @450MHz"
        elif model in ("sagemcom88", "esi88"):
            chipset = "STi7105 @450MHz"
        elif model.startswith("spark"):
            if model == "spark7162":
                chipset = "STi7162 @540MHz"
            else:
                chipset = "STi7111 @450MHz"
        elif model == "dm800":
            chipset = "bcm7401"
            info['model'] = "DM800 HD PVR"

    if fileExists("/proc/stb/info/chipset"):
        f = open("/proc/stb/info/chipset", 'r')
        chipset = f.readline().strip()
        f.close()

    info['chipset'] = chipset

    memFree = 0
    for line in open("/proc/meminfo", 'r'):
        parts = line.split(':')
        key = parts[0].strip()
        if key == "MemTotal":
            info['mem1'] = parts[1].strip().replace("kB", _("kB"))
        elif key in ("MemFree", "Buffers", "Cached"):
            memFree += int(parts[1].strip().split(' ', 1)[0])
    info['mem2'] = "%s %s" % (memFree, _("kB"))
    info['mem3'] = _("%s free / %s total") % (info['mem2'], info['mem1'])

    try:
        f = open("/proc/uptime", "rb")
        uptime = int(float(f.readline().split(' ', 2)[0].strip()))
        f.close()
        uptimetext = ''
        if uptime > 86400:
            d = uptime / 86400
            uptime = uptime % 86400
            uptimetext += '%dd ' % d
        uptimetext += "%d:%.2d" % (uptime / 3600, (uptime % 3600) / 60)
    except:
        uptimetext = "?"
    info['uptime'] = uptimetext

    info["webifver"] = getOpenWebifVer()
    info['imagedistro'] = getImageDistro()
    info['friendlyimagedistro'] = getFriendlyImageDistro()
    info['oever'] = getOEVersion()
    info['imagever'] = getImageVersion()
    ib = getImageBuild()
    if ib:
        info['imagever'] = info['imagever'] + "." + ib
    info['enigmaver'] = getEnigmaVersionString()
    info['driverdate'] = getDriverDate()
    info['kernelver'] = about.getKernelVersionString()

    try:
        from Tools.StbHardware import getFPVersion
    except ImportError:
        from Tools.DreamboxHardware import getFPVersion

    try:
        info['fp_version'] = getFPVersion()
    except:
        info['fp_version'] = None

    friendlychipsetdescription = _("Chipset")
    friendlychipsettext = info['chipset'].replace("bcm", "Broadcom ")
    if friendlychipsettext in ("7335", "7356", "7362", "73625", "7424", "7425",
                               "7429"):
        friendlychipsettext = "Broadcom " + friendlychipsettext
    if not (info['fp_version'] is None or info['fp_version'] == 0):
        friendlychipsetdescription = friendlychipsetdescription + " (" + _(
            "Frontprocessor Version") + ")"
        friendlychipsettext = friendlychipsettext + " (" + str(
            info['fp_version']) + ")"

    info['friendlychipsetdescription'] = friendlychipsetdescription
    info['friendlychipsettext'] = friendlychipsettext

    info['tuners'] = []
    for i in range(0, nimmanager.getSlotCount()):
        print "[OpenWebif] -D- tuner '%d' '%s' '%s'" % (
            i, nimmanager.getNimName(i), nimmanager.getNim(i).getSlotName())
        info['tuners'].append({
            "name":
            nimmanager.getNim(i).getSlotName(),
            "type":
            nimmanager.getNimName(i) + " (" +
            nimmanager.getNim(i).getFriendlyType() + ")",
            "rec":
            "",
            "live":
            ""
        })

    info['ifaces'] = []
    ifaces = iNetwork.getConfiguredAdapters()
    for iface in ifaces:
        info['ifaces'].append({
            "name":
            iNetwork.getAdapterName(iface),
            "friendlynic":
            getFriendlyNICChipSet(iface),
            "linkspeed":
            getLinkSpeed(iface),
            "mac":
            iNetwork.getAdapterAttribute(iface, "mac"),
            "dhcp":
            iNetwork.getAdapterAttribute(iface, "dhcp"),
            "ipv4method":
            getIPv4Method(iface),
            "ip":
            formatIp(iNetwork.getAdapterAttribute(iface, "ip")),
            "mask":
            formatIp(iNetwork.getAdapterAttribute(iface, "netmask")),
            "v4prefix":
            sum([
                bin(int(x)).count('1') for x in formatIp(
                    iNetwork.getAdapterAttribute(iface, "netmask")).split('.')
            ]),
            "gw":
            formatIp(iNetwork.getAdapterAttribute(iface, "gateway")),
            "ipv6":
            getAdapterIPv6(iface)['addr'],
            "ipmethod":
            getIPMethod(iface),
            "firstpublic":
            getAdapterIPv6(iface)['firstpublic']
        })

    info['hdd'] = []
    for hdd in harddiskmanager.hdd:
        dev = hdd.findMount()
        if dev:
            stat = os.statvfs(dev)
            free = stat.f_bavail * stat.f_frsize / 1048576.
        else:
            free = -1

        if free <= 1024:
            free = "%i %s" % (free, _("MB"))
        else:
            free = free / 1024.
            free = "%.1f %s" % (free, _("GB"))

        size = hdd.diskSize() * 1000000 / 1048576.
        if size > 1048576:
            size = "%.1f %s" % ((size / 1048576.), _("TB"))
        elif size > 1024:
            size = "%.1f %s" % ((size / 1024.), _("GB"))
        else:
            size = "%d %s" % (size, _("MB"))

        iecsize = hdd.diskSize()
        # Harddisks > 1000 decimal Gigabytes are labelled in TB
        if iecsize > 1000000:
            iecsize = (iecsize + 50000) // float(100000) / 10
            # Omit decimal fraction if it is 0
            if (iecsize % 1 > 0):
                iecsize = "%.1f %s" % (iecsize, _("TB"))
            else:
                iecsize = "%d %s" % (iecsize, _("TB"))
        # Round harddisk sizes beyond ~300GB to full tens: 320, 500, 640, 750GB
        elif iecsize > 300000:
            iecsize = "%d %s" % (((iecsize + 5000) // 10000 * 10), _("GB"))
        # ... be more precise for media < ~300GB (Sticks, SSDs, CF, MMC, ...): 1, 2, 4, 8, 16 ... 256GB
        elif iecsize > 1000:
            iecsize = "%d %s" % (((iecsize + 500) // 1000), _("GB"))
        else:
            iecsize = "%d %s" % (iecsize, _("MB"))

        info['hdd'].append({
            "model":
            hdd.model(),
            "capacity":
            size,
            "labelled_capacity":
            iecsize,
            "free":
            free,
            "mount":
            dev,
            "friendlycapacity":
            _("%s free / %s total") % (free, size + ' ("' + iecsize + '")')
        })

    info['shares'] = []
    autofiles = ('/etc/auto.network', '/etc/auto.network_vti')
    for autofs in autofiles:
        if fileExists(autofs):
            method = "autofs"
            for line in file(autofs).readlines():
                if not line.startswith('#'):
                    # Replace escaped spaces that can appear inside credentials with underscores
                    # Not elegant but we wouldn't want to expose credentials on the OWIF anyways
                    tmpline = line.replace("\ ", "_")
                    tmp = tmpline.split()
                    if not len(tmp) == 3:
                        continue
                    name = tmp[0].strip()
                    type = "unknown"
                    if "cifs" in tmp[1]:
                        # Linux still defaults to SMBv1
                        type = "SMBv1.0"
                        settings = tmp[1].split(",")
                        for setting in settings:
                            if setting.startswith("vers="):
                                type = setting.replace("vers=", "SMBv")
                    elif "nfs" in tmp[1]:
                        type = "NFS"

                    # Default is r/w
                    mode = _("r/w")
                    settings = tmp[1].split(",")
                    for setting in settings:
                        if setting == "ro":
                            mode = _("r/o")

                    uri = tmp[2]
                    parts = []
                    parts = tmp[2].split(':')
                    if parts[0] is "":
                        server = uri.split('/')[2]
                        uri = uri.strip()[1:]
                    else:
                        server = parts[0]

                    ipaddress = None
                    if server:
                        # Will fail on literal IPs
                        try:
                            # Try IPv6 first, as will Linux
                            if has_ipv6:
                                tmpaddress = None
                                tmpaddress = getaddrinfo(server, 0, AF_INET6)
                                if tmpaddress:
                                    ipaddress = "[" + list(
                                        tmpaddress)[0][4][0] + "]"
                            # Use IPv4 if IPv6 fails or is not present
                            if ipaddress is None:
                                tmpaddress = None
                                tmpaddress = getaddrinfo(server, 0, AF_INET)
                                if tmpaddress:
                                    ipaddress = list(tmpaddress)[0][4][0]
                        except:
                            pass

                    friendlyaddress = server
                    if ipaddress is not None and not ipaddress == server:
                        friendlyaddress = server + " (" + ipaddress + ")"
                    info['shares'].append({
                        "name": name,
                        "method": method,
                        "type": type,
                        "mode": mode,
                        "path": uri,
                        "host": server,
                        "ipaddress": ipaddress,
                        "friendlyaddress": friendlyaddress
                    })
    # TODO: fstab

    info['transcoding'] = False
    #: models transcoding feature
    if fileExists("/proc/stb/encoder/0/bitrate"):
        if os.path.exists(
                eEnv.resolve(
                    '${libdir}/enigma2/python/Plugins/SystemPlugins/TransCodingSetup/plugin.pyo'
                )
        ) or os.path.exists(
                eEnv.resolve(
                    '${libdir}/enigma2/python/Plugins/SystemPlugins/TranscodingSetup/plugin.pyo'
                )
        ) or os.path.exists(
                eEnv.resolve(
                    '${libdir}/enigma2/python/Plugins/SystemPlugins/MultiTransCodingSetup/plugin.pyo'
                )):
            info['transcoding'] = True

    info['kinopoisk'] = False
    lang = ['ru', 'uk', 'lv', 'lt', 'et']
    current_language = language.getLanguage()
    for l in lang:
        if l in current_language:
            info['kinopoisk'] = True
            break

    info['EX'] = ''

    if session:
        try:
            recs = NavigationInstance.instance.getRecordings()
            if recs:
                # only one stream and only TV
                from Plugins.Extensions.OpenWebif.controllers.stream import streamList
                s_name = ''
                s_cip = ''

                print "[OpenWebif] -D- streamList count '%d'" % len(streamList)
                if len(streamList) == 1:
                    from Screens.ChannelSelection import service_types_tv
                    from enigma import eEPGCache
                    epgcache = eEPGCache.getInstance()
                    serviceHandler = eServiceCenter.getInstance()
                    services = serviceHandler.list(
                        eServiceReference('%s ORDER BY name' %
                                          (service_types_tv)))
                    channels = services and services.getContent("SN", True)
                    s = streamList[0]
                    srefs = s.ref.toString()
                    for channel in channels:
                        if srefs == channel[0]:
                            s_name = channel[1] + ' (' + s.clientIP + ')'
                            break
                print "[OpenWebif] -D- s_name '%s'" % s_name

                for stream in streamList:
                    srefs = stream.ref.toString()
                    print "[OpenWebif] -D- srefs '%s'" % srefs

                sname = ''
                timers = []
                for timer in NavigationInstance.instance.RecordTimer.timer_list:
                    if timer.isRunning() and not timer.justplay:
                        timers.append(
                            timer.service_ref.getServiceName().replace(
                                '\xc2\x86', '').replace('\xc2\x87', ''))
                        print "[OpenWebif] -D- timer '%s'" % timer.service_ref.getServiceName(
                        )
                # only one recording
                if len(timers) == 1:
                    sname = timers[0]

                if sname == '' and s_name != '':
                    sname = s_name

                print "[OpenWebif] -D- recs count '%d'" % len(recs)

                for rec in recs:
                    feinfo = rec.frontendInfo()
                    frontendData = feinfo and feinfo.getAll(True)
                    if frontendData is not None:
                        cur_info = feinfo.getTransponderData(True)
                        if cur_info:
                            nr = frontendData['tuner_number']
                            info['tuners'][nr]['rec'] = getOrbitalText(
                                cur_info) + ' / ' + sname

            service = session.nav.getCurrentService()
            if service is not None:
                sname = service.info().getName()
                feinfo = service.frontendInfo()
                frontendData = feinfo and feinfo.getAll(True)
                if frontendData is not None:
                    cur_info = feinfo.getTransponderData(True)
                    if cur_info:
                        nr = frontendData['tuner_number']
                        info['tuners'][nr]['live'] = getOrbitalText(
                            cur_info) + ' / ' + sname
        except Exception, error:
            info['EX'] = error
コード例 #36
0
ファイル: timers.py プロジェクト: jenseneverest/OpenWebif
def getTimers(session):
	rt = session.nav.RecordTimer
	timers = []
	for timer in rt.timer_list + rt.processed_timers:
		if hasattr(timer, "wakeup_t"):
			energytimer = timer.wakeup_t or timer.standby_t or timer.shutdown_t or timer.fnc_t != "off" or 0
			if energytimer:
				continue

		descriptionextended = "N/A"
		filename = None
		nextactivation = None
		if timer.eit and timer.service_ref:
			event = eEPGCache.getInstance().lookupEvent(['EX', (str(timer.service_ref), 2, timer.eit)])
			if event and event[0][0]:
				descriptionextended = event[0][0]

		try:
			filename = timer.Filename
		except Exception:
			pass

		try:
			nextactivation = timer.next_activation
		except Exception:
			pass

		disabled = 0
		if timer.disabled:
			disabled = 1

		justplay = 0
		if timer.justplay:
			justplay = 1

		if hasattr(timer, "allow_duplicate"):
			allow_duplicate = timer.allow_duplicate and 1 or 0
		else:
			allow_duplicate = 1

		autoadjust = -1
		if hasattr(timer, "autoadjust"):
			autoadjust = timer.autoadjust and 1 or 0
		elif hasattr(config.recording, "adjust_time_to_event"):
			autoadjust = config.recording.adjust_time_to_event.value and 1 or 0

		if timer.dirname:
			dirname = timer.dirname
		else:
			dirname = "None"

		dontSave = 0
		if timer.dontSave:
			dontSave = 1

		toggledisabled = 1
		if timer.disabled:
				toggledisabled = 0

		toggledisabledimg = "off"
		if timer.disabled:
				toggledisabledimg = "on"

		asrefs = ""
		achannels = GetWithAlternative(str(timer.service_ref), False)
		if achannels:
			asrefs = achannels

		vpsplugin_enabled = False
		vpsplugin_overwrite = False
		vpsplugin_time = -1
		if hasattr(timer, "vpsplugin_enabled"):
			vpsplugin_enabled = True if timer.vpsplugin_enabled else False
		if hasattr(timer, "vpsplugin_overwrite"):
			vpsplugin_overwrite = True if timer.vpsplugin_overwrite else False
		if hasattr(timer, "vpsplugin_time"):
			vpsplugin_time = timer.vpsplugin_time
			if not vpsplugin_time:
				vpsplugin_time = -1

		always_zap = -1
		if hasattr(timer, "always_zap"):
			if timer.always_zap:
				always_zap = 1
			else:
				always_zap = 0

		pipzap = -1
		if hasattr(timer, "pipzap"):
			if timer.pipzap:
				pipzap = 1
			else:
				pipzap = 0

		isAutoTimer = -1
		if hasattr(timer, "isAutoTimer"):
			if timer.isAutoTimer:
				isAutoTimer = 1
			else:
				isAutoTimer = 0

		if six.PY2:
			descriptionextended = six.text_type(descriptionextended, 'utf_8', errors='ignore').encode('utf_8', 'ignore')

		timers.append({
			"serviceref": str(timer.service_ref),
			"servicename": removeBad(timer.service_ref.getServiceName()),
			"eit": timer.eit,
			"name": timer.name,
			"description": timer.description,
			"descriptionextended": descriptionextended,
			"disabled": disabled,
			"begin": timer.begin,
			"end": timer.end,
			"duration": timer.end - timer.begin,
			"startprepare": timer.start_prepare,
			"justplay": justplay,
			"afterevent": timer.afterEvent,
			"dirname": dirname,
			"tags": " ".join(timer.tags),
			"logentries": timer.log_entries,
			"backoff": timer.backoff,
			"firsttryprepare": timer.first_try_prepare,
			"state": timer.state,
			"repeated": timer.repeated,
			"dontsave": dontSave,
			"cancelled": timer.cancelled,
			"toggledisabled": toggledisabled,
			"toggledisabledimg": toggledisabledimg,
			"filename": filename,
			"nextactivation": nextactivation,
			"realbegin": strftime("%d.%m.%Y %H:%M", (localtime(float(timer.begin)))),
			"realend": strftime("%d.%m.%Y %H:%M", (localtime(float(timer.end)))),
			"asrefs": asrefs,
			"vpsplugin_enabled": vpsplugin_enabled,
			"vpsplugin_overwrite": vpsplugin_overwrite,
			"vpsplugin_time": vpsplugin_time,
			"always_zap": always_zap,
			"pipzap": pipzap,
			"isAutoTimer": isAutoTimer,
			"allow_duplicate": allow_duplicate,
			"autoadjust": autoadjust
		})

	return {
		"result": True,
		"timers": timers
	}
コード例 #37
0
def loadEpg():
    epgcache = eEPGCache.getInstance()
    epgcache.load()
    return {"result": True, "message": ""}
コード例 #38
0
    def doBackup(self):
        self.save_shutdownOK = config.usage.shutdownOK.value
        config.usage.shutdownOK.setValue(True)
        config.usage.shutdownOK.save()
        configfile.save()
        try:
            if config.plugins.softwaremanager.epgcache.value:
                eEPGCache.getInstance().save()
        except:
            pass
        try:
            if pathexists(self.backuppath) == False:
                makedirs(self.backuppath)
            InitConfig()
            self.backupdirs = " ".join(
                f.strip("/") for f in
                config.plugins.configurationbackup.backupdirs_default.value)
            for f in config.plugins.configurationbackup.backupdirs.value:
                if not f.strip("/") in self.backupdirs:
                    self.backupdirs += " " + f.strip("/")
            if not "tmp/installed-list.txt" in self.backupdirs:
                self.backupdirs += " tmp/installed-list.txt"
            if not "tmp/changed-configfiles.txt" in self.backupdirs:
                self.backupdirs += " tmp/changed-configfiles.txt"
            if not "tmp/passwd.txt" in self.backupdirs:
                self.backupdirs += " tmp/passwd.txt"
            if not "tmp/groups.txt" in self.backupdirs:
                self.backupdirs += " tmp/groups.txt"

            ShellCompatibleFunctions.backupUserDB()
            pkgs = ShellCompatibleFunctions.listpkg(type="user")
            installed = open("/tmp/installed-list.txt", "w")
            installed.write('\n'.join(pkgs))
            installed.close()
            cmd2 = "opkg list-changed-conffiles > /tmp/changed-configfiles.txt"
            cmd3 = "tar -C / -czvf " + self.fullbackupfilename
            for f in config.plugins.configurationbackup.backupdirs_exclude.value:
                cmd3 = cmd3 + " --exclude " + f.strip("/")
            for f in BLACKLISTED:
                cmd3 = cmd3 + " --exclude " + f.strip("/")
            cmd3 = cmd3 + " " + self.backupdirs
            cmd = [cmd2, cmd3]
            if pathexists(self.fullbackupfilename):
                dt = str(
                    date.fromtimestamp(stat(self.fullbackupfilename).st_ctime))
                self.newfilename = self.backuppath + "/" + dt + '-' + self.backupfile
                if pathexists(self.newfilename):
                    remove(self.newfilename)
                rename(self.fullbackupfilename, self.newfilename)
            if self.finished_cb:
                self.session.openWithCallback(
                    self.finished_cb,
                    Console,
                    title=_("Backup is running..."),
                    cmdlist=cmd,
                    finishedCallback=self.backupFinishedCB,
                    closeOnSuccess=True)
            else:
                self.session.open(Console,
                                  title=_("Backup is running..."),
                                  cmdlist=cmd,
                                  finishedCallback=self.backupFinishedCB,
                                  closeOnSuccess=True)
        except OSError:
            if self.finished_cb:
                self.session.openWithCallback(
                    self.finished_cb,
                    MessageBox,
                    _("Sorry, your backup destination is not writeable.\nPlease select a different one."
                      ),
                    MessageBox.TYPE_INFO,
                    timeout=10)
            else:
                self.session.openWithCallback(
                    self.backupErrorCB,
                    MessageBox,
                    _("Sorry, your backup destination is not writeable.\nPlease select a different one."
                      ),
                    MessageBox.TYPE_INFO,
                    timeout=10)
コード例 #39
0
 def __init__(self):
     Renderer.__init__(self)
     VariableText.__init__(self)
     self.epgcache = eEPGCache.getInstance()
コード例 #40
0
def getTimers(session):
	rt = session.nav.RecordTimer
	timers = []
	for timer in rt.timer_list + rt.processed_timers:
		descriptionextended = "N/A"
		filename = None
		nextactivation = None
		if timer.eit and timer.service_ref:
			event = eEPGCache.getInstance().lookupEvent(['EX', (str(timer.service_ref), 2, timer.eit)])
			if event and event[0][0]:
				descriptionextended = event[0][0]

		try:
			filename = timer.Filename
		except Exception:
			pass

		try:
			nextactivation = timer.next_activation
		except Exception:
			pass

		disabled = 0
		if timer.disabled:
			disabled = 1

		justplay = 0
		if timer.justplay:
			justplay = 1

		if timer.dirname:
			dirname = timer.dirname
		else:
			dirname = "None"

		dontSave = 0
		if timer.dontSave:
			dontSave = 1

		toggledisabled = 1
		if timer.disabled:
				toggledisabled = 0

		toggledisabledimg = "off"
		if timer.disabled:
				toggledisabledimg = "on"

		asrefs = ""
		achannels = GetWithAlternative(str(timer.service_ref), False)
		if achannels:
			asrefs = achannels

		vpsplugin_enabled = False
		vpsplugin_overwrite = False
		vpsplugin_time = -1
		if hasattr(timer, "vpsplugin_enabled"):
			vpsplugin_enabled = True if timer.vpsplugin_enabled else False
		if hasattr(timer, "vpsplugin_overwrite"):
			vpsplugin_overwrite = True if timer.vpsplugin_overwrite else False
		if hasattr(timer, "vpsplugin_time"):
			vpsplugin_time = timer.vpsplugin_time
			if not vpsplugin_time:
				vpsplugin_time = -1

		always_zap = -1
		if hasattr(timer, "always_zap"):
			if timer.always_zap:
				always_zap = 1
			else:
				always_zap = 0

		timers.append({
			"serviceref": str(timer.service_ref),
			"servicename": timer.service_ref.getServiceName().replace('\xc2\x86', '').replace('\xc2\x87', ''),
			"eit": timer.eit,
			"name": timer.name,
			"description": timer.description,
			"descriptionextended": unicode(descriptionextended, 'utf_8', errors='ignore').encode('utf_8', 'ignore'),
			"disabled": disabled,
			"begin": timer.begin,
			"end": timer.end,
			"duration": timer.end - timer.begin,
			"startprepare": timer.start_prepare,
			"justplay": justplay,
			"afterevent": timer.afterEvent,
			"dirname": dirname,
			"tags": " ".join(timer.tags),
			"logentries": timer.log_entries,
			"backoff": timer.backoff,
			"firsttryprepare": timer.first_try_prepare,
			"state": timer.state,
			"repeated": timer.repeated,
			"dontsave": dontSave,
			"cancelled": timer.cancelled,
			"toggledisabled": toggledisabled,
			"toggledisabledimg": toggledisabledimg,
			"filename": filename,
			"nextactivation": nextactivation,
			"realbegin": strftime("%d.%m.%Y %H:%M", (localtime(float(timer.begin)))),
			"realend": strftime("%d.%m.%Y %H:%M", (localtime(float(timer.end)))),
			"asrefs": asrefs,
			"vpsplugin_enabled": vpsplugin_enabled,
			"vpsplugin_overwrite": vpsplugin_overwrite,
			"vpsplugin_time": vpsplugin_time,
			"always_zap": always_zap
		})

	return {
		"result": True,
		"timers": timers
	}
コード例 #41
0
ファイル: EpgList.py プロジェクト: jack2015/enigma2-openpli
    def __init__(self, type=EPG_TYPE_SINGLE, selChangedCB=None, timer=None):
        self.days = (_("Mon"), _("Tue"), _("Wed"), _("Thu"), _("Fri"),
                     _("Sat"), _("Sun"))
        self.timer = timer
        self.onSelChanged = []
        if selChangedCB is not None:
            self.onSelChanged.append(selChangedCB)
        GUIComponent.__init__(self)
        self.type = type
        self.l = eListboxPythonMultiContent()
        self.eventItemFont = gFont("Regular", applySkinFactor(22))
        self.eventTimeFont = gFont("Regular", applySkinFactor(16))
        self.iconSize = applySkinFactor(21)
        self.iconDistance = applySkinFactor(2)
        self.colGap = applySkinFactor(10)
        self.skinColumns = False
        self.tw = applySkinFactor(90)
        self.dy = 0

        if type == EPG_TYPE_SINGLE:
            self.l.setBuildFunc(self.buildSingleEntry)
        elif type == EPG_TYPE_MULTI:
            self.l.setBuildFunc(self.buildMultiEntry)
        else:
            assert (type == EPG_TYPE_SIMILAR)
            self.l.setBuildFunc(self.buildSimilarEntry)
        self.epgcache = eEPGCache.getInstance()
        self.clocks = [
            LoadPixmap(cached=True,
                       path=resolveFilename(SCOPE_CURRENT_SKIN,
                                            'icons/epgclock_add.png')),
            LoadPixmap(cached=True,
                       path=resolveFilename(SCOPE_CURRENT_SKIN,
                                            'icons/epgclock_pre.png')),
            LoadPixmap(cached=True,
                       path=resolveFilename(SCOPE_CURRENT_SKIN,
                                            'icons/epgclock.png')),
            LoadPixmap(cached=True,
                       path=resolveFilename(SCOPE_CURRENT_SKIN,
                                            'icons/epgclock_prepost.png')),
            LoadPixmap(cached=True,
                       path=resolveFilename(SCOPE_CURRENT_SKIN,
                                            'icons/epgclock_post.png')),
            LoadPixmap(cached=True,
                       path=resolveFilename(SCOPE_CURRENT_SKIN,
                                            'icons/zapclock_add.png')),
            LoadPixmap(cached=True,
                       path=resolveFilename(SCOPE_CURRENT_SKIN,
                                            'icons/zapclock_pre.png')),
            LoadPixmap(cached=True,
                       path=resolveFilename(SCOPE_CURRENT_SKIN,
                                            'icons/zapclock.png')),
            LoadPixmap(cached=True,
                       path=resolveFilename(SCOPE_CURRENT_SKIN,
                                            'icons/zapclock_prepost.png')),
            LoadPixmap(cached=True,
                       path=resolveFilename(SCOPE_CURRENT_SKIN,
                                            'icons/zapclock_post.png')),
            LoadPixmap(cached=True,
                       path=resolveFilename(SCOPE_CURRENT_SKIN,
                                            'icons/zaprecclock_add.png')),
            LoadPixmap(cached=True,
                       path=resolveFilename(SCOPE_CURRENT_SKIN,
                                            'icons/zaprecclock_pre.png')),
            LoadPixmap(cached=True,
                       path=resolveFilename(SCOPE_CURRENT_SKIN,
                                            'icons/zaprecclock.png')),
            LoadPixmap(cached=True,
                       path=resolveFilename(SCOPE_CURRENT_SKIN,
                                            'icons/zaprecclock_prepost.png')),
            LoadPixmap(cached=True,
                       path=resolveFilename(SCOPE_CURRENT_SKIN,
                                            'icons/zaprecclock_post.png')),
            LoadPixmap(cached=True,
                       path=resolveFilename(SCOPE_CURRENT_SKIN,
                                            'icons/repepgclock_add.png')),
            LoadPixmap(cached=True,
                       path=resolveFilename(SCOPE_CURRENT_SKIN,
                                            'icons/repepgclock_pre.png')),
            LoadPixmap(cached=True,
                       path=resolveFilename(SCOPE_CURRENT_SKIN,
                                            'icons/repepgclock.png')),
            LoadPixmap(cached=True,
                       path=resolveFilename(SCOPE_CURRENT_SKIN,
                                            'icons/repepgclock_prepost.png')),
            LoadPixmap(cached=True,
                       path=resolveFilename(SCOPE_CURRENT_SKIN,
                                            'icons/repepgclock_post.png')),
            LoadPixmap(cached=True,
                       path=resolveFilename(SCOPE_CURRENT_SKIN,
                                            'icons/repzapclock_add.png')),
            LoadPixmap(cached=True,
                       path=resolveFilename(SCOPE_CURRENT_SKIN,
                                            'icons/repzapclock_pre.png')),
            LoadPixmap(cached=True,
                       path=resolveFilename(SCOPE_CURRENT_SKIN,
                                            'icons/repzapclock.png')),
            LoadPixmap(cached=True,
                       path=resolveFilename(SCOPE_CURRENT_SKIN,
                                            'icons/repzapclock_prepost.png')),
            LoadPixmap(cached=True,
                       path=resolveFilename(SCOPE_CURRENT_SKIN,
                                            'icons/repzapclock_post.png')),
            LoadPixmap(cached=True,
                       path=resolveFilename(SCOPE_CURRENT_SKIN,
                                            'icons/repzaprecclock_add.png')),
            LoadPixmap(cached=True,
                       path=resolveFilename(SCOPE_CURRENT_SKIN,
                                            'icons/repzaprecclock_pre.png')),
            LoadPixmap(cached=True,
                       path=resolveFilename(SCOPE_CURRENT_SKIN,
                                            'icons/repzaprecclock.png')),
            LoadPixmap(cached=True,
                       path=resolveFilename(
                           SCOPE_CURRENT_SKIN,
                           'icons/repzaprecclock_prepost.png')),
            LoadPixmap(cached=True,
                       path=resolveFilename(SCOPE_CURRENT_SKIN,
                                            'icons/repzaprecclock_post.png')),
            LoadPixmap(cached=True,
                       path=resolveFilename(SCOPE_CURRENT_SKIN,
                                            'icons/pipclock_add.png')),
            LoadPixmap(cached=True,
                       path=resolveFilename(SCOPE_CURRENT_SKIN,
                                            'icons/pipclock_pre.png')),
            LoadPixmap(cached=True,
                       path=resolveFilename(SCOPE_CURRENT_SKIN,
                                            'icons/pipclock.png')),
            LoadPixmap(cached=True,
                       path=resolveFilename(SCOPE_CURRENT_SKIN,
                                            'icons/pipclock_prepost.png')),
            LoadPixmap(cached=True,
                       path=resolveFilename(SCOPE_CURRENT_SKIN,
                                            'icons/pipclock_post.png'))
        ]
コード例 #42
0
	def EpgHistorySecondsChanged(configElement):
		eEPGCache.getInstance().setEpgHistorySeconds(config.epg.histminutes.value*60)
コード例 #43
0
    def getEpisode(self, timer, block=False):

        log.info("timername, service, begin, end:", timer.name,
                 str(timer.service_ref.ref), timer.begin, timer.end)

        if hasattr(timer, 'sp_in_queue'):
            if timer.sp_in_queue:
                msg = _("Skipping timer because it is already in queue")
                log.warning(msg, timer.name)
                timer.log(601, "[SeriesPlugin]" + " " + msg)
                return

        # We have to compare the length,
        # because of the E2 special chars handling for creating the filenames
        #if timer.name == name:
        # Mad Men != Mad_Men

        if TAG in timer.tags:
            msg = _("Skipping timer because it is already handled"
                    ) + "\n\n" + _("Can be configured within the setup")
            log.info(msg, timer.name)
            timer.log(607, "[SeriesPlugin]" + " " + msg)
            return

        if timer.begin < time() + 60:
            msg = _("Skipping timer because it starts in less than 60 seconds")
            log.debug(msg, timer.name)
            timer.log(604, "[SeriesPlugin]" + " " + msg)
            return

        if timer.isRunning():
            msg = _("Skipping timer because it is already running")
            log.debug(msg, timer.name)
            timer.log(605, "[SeriesPlugin]" + " " + msg)
            return

        if timer.justplay:
            msg = _("Skipping timer because it is a just play timer")
            log.debug(msg, timer.name)
            timer.log(606, "[SeriesPlugin]" + " " + msg)
            return

        event = None
        epgcache = eEPGCache.getInstance()

        if timer.eit:
            event = epgcache.lookupEventId(timer.service_ref.ref, timer.eit)
            log.debug("lookupEventId", timer.eit, event)
        if not (event):
            event = epgcache.lookupEventTime(
                timer.service_ref.ref,
                timer.begin + ((timer.end - timer.begin) / 2))
            log.debug("lookupEventTime", event)

        if event:
            if not (len(timer.name) == len(event.getEventName())):
                msg = _("Skipping timer because it is already modified %s" %
                        (timer.name))
                log.info(msg)
                timer.log(602, "[SeriesPlugin]" + " " + msg)
                return
            begin = event.getBeginTime() or 0
            duration = event.getDuration() or 0
            end = begin + duration

        else:
            if config.plugins.seriesplugin.timer_eit_check.value:
                msg = _("Skipping timer because no event was found")
                log.info(msg, timer.name)
                timer.log(603, "[SeriesPlugin]" + " " + msg)
                return
            else:
                # We don't know the exact margins, we will assume the E2 default margins
                log.debug(
                    "We don't know the exact margins, we will assume the E2 default margins"
                )
                begin = timer.begin + (config.recording.margin_before.value *
                                       60)
                end = timer.end - (config.recording.margin_after.value * 60)

        timer.log(
            600, "[SeriesPlugin]" + " " + _("Try to find infos for %s" %
                                            (timer.name)))

        seriesPlugin = getInstance()

        if timer.service_ref:
            log.debug("getEpisode:", timer.name, timer.begin, timer.end, block)

            timer.sp_in_queue = True

            return seriesPlugin.getEpisode(boundFunction(
                self.timerCallback, timer),
                                           timer.name,
                                           begin,
                                           end,
                                           timer.service_ref,
                                           future=True,
                                           block=block)
        else:
            msg = _("Skipping lookup because no channel is specified")
            log.warning(msg)
            self.timerCallback(timer, msg)
            return None
コード例 #44
0
 def JobEpgCacheSave(self):
     print '[EPGC] Saving EPGCache.'
     from enigma import eEPGCache
     epgcache = eEPGCache.getInstance()
     epgcache.save()
コード例 #45
0
    def __init__(self, session):
        self.session = session
        Screen.__init__(self, session)

        #bouquets = getBouquetList();
        self.waitForEpgWorker = 0
        self.setup_title = _("Advanced matching")
        self.setTitle(self.setup_title)

        from Screens.InfoBar import InfoBar
        self.infoBarInstance = InfoBar.instance
        self.epgcache = eEPGCache.getInstance()

        self.offerToSave = False
        self.callback = None
        #cfg = EPGConfig.loadUserSettings()
        # load all working bouquets
        #filter = cfg["sources"]
        #self.bouquets = []
        self.channels = []
        #for x in bouquets:
        #	if x[0]in filter or filter is None:
        #		self.bouquets.append(x[0])
        # (description, value, index, selected)
        #self.bouquets.append(SelectionEntryComponent(x[0], x[1], 0, False))

        self["statusbar"] = Label()
        self["status"] = Label()
        self["text"] = Label()
        self["text2"] = Label()
        self["list1"] = ColoredList()
        self["list2"] = ColoredList()
        self.desktopSize = getDesktop(0).size()
        #self["videoPicture"] = VideoWindow(decoder = 0, fb_width = 445, fb_height = 263)
        self["videoPicture"] = VideoWindow(decoder=0,
                                           fb_width=self.desktopSize.width(),
                                           fb_height=self.desktopSize.height())

        self.curFocus = 1
        self["actions"] = NumberActionMap(
            [
                "DirectionActions", "EPGSelectActions", "NumberActions",
                "OkCancelActions", "ColorActions", "TimerEditActions"
            ], {
                "cancel": self.cancel,
                "red": self.epgLoadCall,
                "green": self.doSave,
                "blue": self.install,
                "nextService": self.right,
                "prevService": self.left,
                "ok": self.zap,
                "up": self.up,
                "down": self.down,
                "left": self.pageUp,
                "right": self.pageDown,
                "1": self.keyed,
                "2": self.keyed,
                "3": self.keyed,
                "4": self.keyed,
                "5": self.keyed,
                "6": self.keyed
            }, -2)

        self["key_red"] = Label(_("Load epg packages"))
        self["key_refresh"] = Label(_("Refresh matches"))
        self["key_filter"] = Label(_("Filter channels"))
        self["key_green"] = Label(_("Save"))
        self["key_blue"] = Label(_("Install"))
        #self["key_green"] = Label(_("Find matches"))
        #self["key_yellow"] = Label(_("Find matches"))

        self.channelMode = 1  # initiate on all channels
        self.updateTimer = enigma.eTimer()
        self.updateTimer.callback.append(self.updateStatus)

        self.updateStatus()
        self.updateTimer.start(2000)

        # load all unmapped channels
        if not epgWorker.active and len(epgWorker.channels) == 0:
            #self.doFilterCallback(True)
            self.doChannelLoad()
            self.waitForEpgWorker = 1
        elif epgWorker.active:
            self.waitForEpgWorker = 1

        self.onLayoutFinish.append(self.onLoad)
コード例 #46
0
def setEPGCacheTimespan(configElement):
    eEPGCache.getInstance().setCacheTimespan(int(configElement.value))
コード例 #47
0
ファイル: TimerEntry.py プロジェクト: mic7131/enigma2-1
    def keyGo(self, result=None):
        if not self.timerentry_service_ref.isRecordable():
            self.session.openWithCallback(
                self.selectChannelSelector, MessageBox,
                _("You didn't select a channel to record from."),
                MessageBox.TYPE_ERROR)
            return
        self.timer.name = self.timerentry_name.value
        self.timer.description = self.timerentry_description.value
        self.timer.justplay = self.timerentry_justplay.value == "zap"
        self.timer.always_zap = self.timerentry_justplay.value == "zap+record"
        self.timer.zap_wakeup = self.timerentry_zapwakeup.value
        self.timer.rename_repeat = self.timerentry_renamerepeat.value
        self.timer.conflict_detection = self.timerentry_conflictdetection.value
        if self.timerentry_justplay.value == "zap":
            if not self.timerentry_showendtime.value:
                self.timerentry_endtime.value = self.timerentry_starttime.value
                self.timerentry_afterevent.value = "nothing"
        self.timer.resetRepeated()
        self.timer.afterEvent = {
            "nothing": AFTEREVENT.NONE,
            "deepstandby": AFTEREVENT.DEEPSTANDBY,
            "standby": AFTEREVENT.STANDBY,
            "auto": AFTEREVENT.AUTO
        }[self.timerentry_afterevent.value]
        self.timer.descramble = {
            "normal": True,
            "descrambled+ecm": True,
            "scrambled+ecm": False,
        }[self.timerentry_recordingtype.value]
        self.timer.record_ecm = {
            "normal": False,
            "descrambled+ecm": True,
            "scrambled+ecm": True,
        }[self.timerentry_recordingtype.value]
        self.timer.service_ref = self.timerentry_service_ref
        self.timer.tags = self.timerentry_tags

        if self.timer.dirname or self.timerentry_dirname.value != defaultMoviePath(
        ):
            self.timer.dirname = self.timerentry_dirname.value
            config.movielist.last_timer_videodir.value = self.timer.dirname
            config.movielist.last_timer_videodir.save()

        if self.timerentry_type.value == "once":
            self.timer.begin, self.timer.end = self.getBeginEnd()
        if self.timerentry_type.value == "repeated":
            if self.timerentry_repeated.value == "daily":
                for x in (0, 1, 2, 3, 4, 5, 6):
                    self.timer.setRepeated(x)

            if self.timerentry_repeated.value == "weekly":
                self.timer.setRepeated(self.timerentry_weekday.index)

            if self.timerentry_repeated.value == "weekdays":
                for x in (0, 1, 2, 3, 4):
                    self.timer.setRepeated(x)

            if self.timerentry_repeated.value == "user":
                for x in (0, 1, 2, 3, 4, 5, 6):
                    if self.timerentry_day[x].value:
                        self.timer.setRepeated(x)

            self.timer.repeatedbegindate = self.getTimestamp(
                self.timerentry_repeatedbegindate.value,
                self.timerentry_starttime.value)
            if self.timer.repeated:
                self.timer.begin = self.getTimestamp(
                    self.timerentry_repeatedbegindate.value,
                    self.timerentry_starttime.value)
                self.timer.end = self.getTimestamp(
                    self.timerentry_repeatedbegindate.value,
                    self.timerentry_endtime.value)
            else:
                self.timer.begin = self.getTimestamp(
                    time(), self.timerentry_starttime.value)
                self.timer.end = self.getTimestamp(
                    time(), self.timerentry_endtime.value)

            # when a timer end is set before the start, add 1 day
            if self.timer.end < self.timer.begin:
                self.timer.end += 86400

        if self.timer.eit is not None:
            event = eEPGCache.getInstance().lookupEventId(
                self.timer.service_ref.ref, self.timer.eit)
            if event:
                n = event.getNumOfLinkageServices()
                if n > 1:
                    tlist = []
                    ref = self.session.nav.getCurrentlyPlayingServiceOrGroup()
                    parent = self.timer.service_ref.ref
                    selection = 0
                    for x in range(n):
                        i = event.getLinkageService(parent, x)
                        if i.toString() == ref.toString():
                            selection = x
                        tlist.append((i.getName(), i))
                    self.session.openWithCallback(
                        self.subserviceSelected,
                        ChoiceBox,
                        title=_("Please select a subservice to record..."),
                        list=tlist,
                        selection=selection)
                    return
                elif n > 0:
                    parent = self.timer.service_ref.ref
                    self.timer.service_ref = ServiceReference(
                        event.getLinkageService(parent, 0))
        self.saveTimer()
        self.close((True, self.timer))
コード例 #48
0
def setOutdatedEPGTimespan(configElement):
    eEPGCache.getInstance().setOutdatedEPGTimespan(configElement.value)
コード例 #49
0
ファイル: Timer.py プロジェクト: wedebe/enigma2-plugins
	def editTimer(self, param):
		print "[WebComponents.Timer] editTimer"

		#OK first we need to parse all of your Parameters
		#For some of them (like afterEvent or justplay) we can use default values
		#for others (the serviceReference or the Begin/End time of the timer
		#we have to quit if they are not set/have illegal values

		if 'sRef' not in param:
			return (False, _("Missing Parameter: sRef"))
		service_ref = ServiceReference(param['sRef'])

		repeated = int(param.get('repeated') or 0)

		if 'begin' not in param:
			return (False, _("Missing Parameter: begin"))
		begin = int(float(param['begin']))

		if 'end' not in param:
			return (False, _("Missing Parameter: end"))
		end = int(float(param['end']))

		tm = int(time())
		if tm <= begin:
			pass
		elif tm > begin and tm < end and repeated == 0:
			pass
		elif repeated == 0:
			return (False, _("Illegal Parameter value for Parameter begin : '%s'") % begin)

		if 'applyMargin' in param:
			if param['applyMargin'] == "1":
				begin -= config.recording.margin_before.value * 60
				end += config.recording.margin_after.value * 60

		if 'name' not in param:
			return (False, _("Missing Parameter: name"))
		name = param['name']

		if 'description' not in param:
			return (False, _("Missing Parameter: description"))
		description = param['description'].replace("\n", " ")

		eit = param.get("eit", None)
		if eit is None or eit.strip() == "":
			eit = 0
		else:
			try:
				eit = int(eit)
			except ValueError:
				return (False, _("Illegal Parameter value for Parameter eit : '%s'") % eit)

		print "[WebComponents.Sources.Timer]: eit=%d" % eit
		if eit != 0:
			#check if the given event exists, if it doesn't the timer may be already running
			epgcache = eEPGCache.getInstance()
			event = epgcache.lookupEventId(eServiceReference(param['sRef']), eit)
			if event:
				eit = event.getEventId()
				#TODO add some subservice handling
			else:
				print "[WebComponents.Sources.Timer] event not found, will be ignored"

		disabled = False #Default to: Enabled
		if 'disabled' in param:
			if param['disabled'] == "1":
				disabled = True
			else:
				#TODO - maybe we can give the user some useful hint here
				pass

		justplay = False #Default to: Record
		if 'justplay' in param:
			if param['justplay'] == "1":
				justplay = True

		afterEvent = 3 #Default to Afterevent: Auto
		if 'afterevent' in param:
			if (param['afterevent'] == "0") or (param['afterevent'] == "1") or (param['afterevent'] == "2"):
				afterEvent = int(param['afterevent'])

		dirname = preferredTimerPath()
		if 'dirname' in param and param['dirname']:
			dirname = param['dirname']

		tags = []
		if 'tags' in param and param['tags']:
			tags = unescape(param['tags']).split(' ')

		delold = 0
		if 'deleteOldOnSave' in param:
			delold = int(param['deleteOldOnSave'])

		#Try to edit an existing Timer
		if delold:
			if 'channelOld' in param and param['channelOld']:
				channelOld = ServiceReference(param['channelOld'])
			else:
				return (False, _("Missing Parameter: channelOld"))
			# We do need all of the following Parameters, too, for being able of finding the Timer.
			# Therefore so we can neither use default values in this part nor can we
			# continue if a parameter is missing
			if 'beginOld' not in param:
				return (False, _("Missing Parameter: beginOld"))
			beginOld = int(param['beginOld'])

			if 'endOld' not in param:
				return (False, _("Missing Parameter: endOld"))
			endOld = int(param['endOld'])

			#let's try to find the timer
			try:
				for timer in self.recordtimer.timer_list + self.recordtimer.processed_timers:
					if str(timer.service_ref) == str(channelOld):
						if int(timer.begin) == beginOld:
							if int(timer.end) == endOld: #we've found the timer we've been searching for
								#set the new data
								timer.service_ref = service_ref
								timer.begin = begin
								timer.end = end
								timer.name = name
								timer.description = description
								timer.eit = eit
								timer.disabled = disabled
								timer.justplay = justplay
								timer.afterEvent = afterEvent
								timer.dirname = dirname
								timer.tags = tags
								timer.repeated = repeated
								timer.processRepeated()

								#sanity check
								timersanitycheck = TimerSanityCheck(self.session.nav.RecordTimer.timer_list, timer)
								conflicts = None
								if not timersanitycheck.check():
									conflicts = timersanitycheck.getSimulTimerList()
									if conflicts is not None:
										for x in conflicts:
											if x.setAutoincreaseEnd(entry):
												self.session.nav.RecordTimer.timeChanged(x)
										if not timersanitycheck.check():
											conflicts = timersanitycheck.getSimulTimerList()

								if conflicts is None:
									self.recordtimer.timeChanged(timer) #go and save it
									print "[WebComponents.Timer] editTimer: Timer changed!"
									return (True, "Timer '%s' changed" % (timer.name))
								else:
									print "[WebComponents.Timer] editTimer conflicting Timers: %s" % (conflicts)
									msg = ""
									for t in conflicts:
										msg = "%s / %s" % (msg, t.name)

									return (False, _("Conflicting Timer(s) detected! %s") % (msg))

			except Exception as e:
				#obviously some value was not good, return an error
				import traceback
				print traceback.format_exc()
				return (False, _("Changing the timer for '%s' failed!") % name)

			return (False, _("Could not find timer '%s' with given start and end time!") % name)

		#Try adding a new Timer

		try:
			#Create a new instance of recordtimerentry
			timer = RecordTimerEntry(service_ref, begin, end, name, description, eit, disabled, justplay, afterEvent, dirname=dirname, tags=tags)
			timer.repeated = repeated
			#add the new timer
			conflicts = self.recordtimer.record(timer)
			if conflicts is None:
				return (True, _("Timer '%s' added") % (timer.name))
			else:
				print "[WebComponents.Timer] editTimer conflicting Timers: %s" % (conflicts)
				msg = ""
				for timer in conflicts:
					msg = "%s / %s" % (msg, timer.name)

				return (False, _("Conflicting Timer(s) detected! %s") % (msg))

		except Exception, e:
			#something went wrong, most possibly one of the given paramater-values was wrong
			print "[WebComponents.Timer] editTimer exception: %s" % (e)
			return (False, _("Could not add timer '%s'!") % name)
コード例 #50
0
def setEPGCachePath(configElement):
    eEPGCache.getInstance().setCacheFile(configElement.value)
コード例 #51
0
    def doBackup(self):
        configfile.save()
        try:
            if config.plugins.softwaremanager.epgcache.value:
                eEPGCache.getInstance().save()
        except:
            pass
        try:
            if path.exists(self.backuppath) == False:
                makedirs(self.backuppath)
            try:
                self.backupdirs = ' '.join(config.plugins.configurationbackup.
                                           backupdirs_default.value)
            except:
                InitConfig()
                self.backupdirs = ' '.join(config.plugins.configurationbackup.
                                           backupdirs_default.value)
            for f in config.plugins.configurationbackup.backupdirs.value:
                if not f in self.backupdirs:
                    self.backupdirs = self.backupdirs + " " + f
            if not "/tmp/installed-list.txt" in self.backupdirs:
                self.backupdirs = self.backupdirs + " /tmp/installed-list.txt"
            if not "/tmp/changed-configfiles.txt" in self.backupdirs:
                self.backupdirs = self.backupdirs + " /tmp/changed-configfiles.txt"

            cmd1 = "opkg list-installed | egrep -v '^ ' | awk '{print $1 }' | egrep 'enigma2-plugin-|task-base|packagegroup-base|^ca-certificates$|^joe$|^mc$|^nano$|^openvpn|^easy-rsa$|^simple-rsa$|^perl|^streamproxy$|^wget$' > /tmp/installed-list.txt"
            cmd2 = "opkg list-changed-conffiles > /tmp/changed-configfiles.txt"
            cmd3 = "tar -czvf " + self.fullbackupfilename + " " + self.backupdirs
            for f in config.plugins.configurationbackup.backupdirs_exclude.value:
                cmd3 = cmd3 + " --exclude " + f.strip("/")
            cmd3 = cmd3 + " --exclude home/root/.cache"
            cmd = [cmd1, cmd2, cmd3]
            if path.exists(self.fullbackupfilename):
                dt = str(
                    date.fromtimestamp(stat(self.fullbackupfilename).st_ctime))
                self.newfilename = self.backuppath + "/" + dt + '-' + self.backupfile
                if path.exists(self.newfilename):
                    remove(self.newfilename)
                rename(self.fullbackupfilename, self.newfilename)
            if self.finished_cb:
                self.session.openWithCallback(
                    self.finished_cb,
                    Console,
                    title=_("Backup is running..."),
                    cmdlist=cmd,
                    finishedCallback=self.backupFinishedCB,
                    closeOnSuccess=True)
            else:
                self.session.open(Console,
                                  title=_("Backup is running..."),
                                  cmdlist=cmd,
                                  finishedCallback=self.backupFinishedCB,
                                  closeOnSuccess=True)
        except OSError:
            if self.finished_cb:
                self.session.openWithCallback(
                    self.finished_cb,
                    MessageBox,
                    _("Sorry, your backup destination is not writeable.\nPlease select a different one."
                      ),
                    MessageBox.TYPE_INFO,
                    timeout=10)
            else:
                self.session.openWithCallback(
                    self.backupErrorCB,
                    MessageBox,
                    _("Sorry, your backup destination is not writeable.\nPlease select a different one."
                      ),
                    MessageBox.TYPE_INFO,
                    timeout=10)
コード例 #52
0
 def isInTimer(self, eventid, begin, duration, service):
     time_match = 0
     chktime = None
     chktimecmp = None
     chktimecmp_end = None
     end = begin + duration
     refstr = str(service)
     for x in self.timer_list:
         check = x.service_ref.ref.toString() == refstr
         if not check:
             sref = x.service_ref.ref
             parent_sid = sref.getUnsignedData(5)
             parent_tsid = sref.getUnsignedData(6)
             if parent_sid and parent_tsid:  # check for subservice
                 sid = sref.getUnsignedData(1)
                 tsid = sref.getUnsignedData(2)
                 sref.setUnsignedData(1, parent_sid)
                 sref.setUnsignedData(2, parent_tsid)
                 sref.setUnsignedData(5, 0)
                 sref.setUnsignedData(6, 0)
                 check = sref.toCompareString() == refstr
                 num = 0
                 if check:
                     check = False
                     event = eEPGCache.getInstance().lookupEventId(
                         sref, eventid)
                     num = event and event.getNumOfLinkageServices() or 0
                 sref.setUnsignedData(1, sid)
                 sref.setUnsignedData(2, tsid)
                 sref.setUnsignedData(5, parent_sid)
                 sref.setUnsignedData(6, parent_tsid)
                 for cnt in range(num):
                     subservice = event.getLinkageService(sref, cnt)
                     if sref.toCompareString(
                     ) == subservice.toCompareString():
                         check = True
                         break
         if check:
             if x.repeated != 0:
                 if chktime is None:
                     chktime = localtime(begin)
                     chktimecmp = chktime.tm_wday * 1440 + chktime.tm_hour * 60 + chktime.tm_min
                     chktimecmp_end = chktimecmp + (duration / 60)
                 time = localtime(x.begin)
                 for y in (0, 1, 2, 3, 4, 5, 6):
                     if x.repeated & (1 << y) and (x.begin <= begin or
                                                   begin <= x.begin <= end):
                         timecmp = y * 1440 + time.tm_hour * 60 + time.tm_min
                         if timecmp <= chktimecmp < (timecmp + (
                             (x.end - x.begin) / 60)):
                             time_match = ((timecmp + (
                                 (x.end - x.begin) / 60)) - chktimecmp) * 60
                         elif chktimecmp <= timecmp < chktimecmp_end:
                             time_match = (chktimecmp_end - timecmp) * 60
             else:  #if x.eit is None:
                 if begin <= x.begin <= end:
                     diff = end - x.begin
                     if time_match < diff:
                         time_match = diff
                 elif x.begin <= begin <= x.end:
                     diff = x.end - begin
                     if time_match < diff:
                         time_match = diff
             if time_match:
                 break
     return time_match
コード例 #53
0
	def isInTimer(self, eventid, begin, duration, service):
		returnValue = None
		type = 0
		time_match = 0
		isAutoTimer = False
		bt = None
		check_offset_time = not config.recording.margin_before.value and not config.recording.margin_after.value
		end = begin + duration
		refstr = ':'.join(service.split(':')[:11])
		for x in self.timer_list:
			if x.isAutoTimer == 1:
				isAutoTimer = True
			else:
				isAutoTimer = False
			check = ':'.join(x.service_ref.ref.toString().split(':')[:11]) == refstr
			if not check:
				sref = x.service_ref.ref
				parent_sid = sref.getUnsignedData(5)
				parent_tsid = sref.getUnsignedData(6)
				if parent_sid and parent_tsid:
					# check for subservice
					sid = sref.getUnsignedData(1)
					tsid = sref.getUnsignedData(2)
					sref.setUnsignedData(1, parent_sid)
					sref.setUnsignedData(2, parent_tsid)
					sref.setUnsignedData(5, 0)
					sref.setUnsignedData(6, 0)
					check = sref.toCompareString() == refstr
					num = 0
					if check:
						check = False
						event = eEPGCache.getInstance().lookupEventId(sref, eventid)
						num = event and event.getNumOfLinkageServices() or 0
					sref.setUnsignedData(1, sid)
					sref.setUnsignedData(2, tsid)
					sref.setUnsignedData(5, parent_sid)
					sref.setUnsignedData(6, parent_tsid)
					for cnt in range(num):
						subservice = event.getLinkageService(sref, cnt)
						if sref.toCompareString() == subservice.toCompareString():
							check = True
							break
			if check:
				timer_end = x.end
				timer_begin = x.begin
				type_offset = 0
				if not x.repeated and check_offset_time:
					if 0 < end - timer_end <= 59:
						timer_end = end
					elif 0 < timer_begin - begin <= 59:
						timer_begin = begin
				if x.justplay:
					type_offset = 5
					if (timer_end - x.begin) <= 1:
						timer_end += 60
				if x.always_zap:
					type_offset = 10

				timer_repeat = x.repeated
				# if set 'don't stop current event but disable coming events' for repeat timer
				running_only_curevent = x.disabled and x.isRunning() and timer_repeat
				if running_only_curevent:
					timer_repeat = 0
					type_offset += 15

				if timer_repeat != 0:
					type_offset += 15
					if bt is None:
						bt = localtime(begin)
						bday = bt.tm_wday
						begin2 = 1440 + bt.tm_hour * 60 + bt.tm_min
						end2 = begin2 + duration / 60
					xbt = localtime(x.begin)
					xet = localtime(timer_end)
					offset_day = False
					checking_time = x.begin < begin or begin <= x.begin <= end
					if xbt.tm_yday != xet.tm_yday:
						oday = bday - 1
						if oday == -1: oday = 6
						offset_day = x.repeated & (1 << oday)
					xbegin = 1440 + xbt.tm_hour * 60 + xbt.tm_min
					xend = xbegin + ((timer_end - x.begin) / 60)
					if xend < xbegin:
						xend += 1440
					if x.repeated & (1 << bday) and checking_time:
						if begin2 < xbegin <= end2:
							if xend < end2:
								# recording within event
								time_match = (xend - xbegin) * 60
								type = type_offset + 3
							else:
								# recording last part of event
								time_match = (end2 - xbegin) * 60
								type = type_offset + 1
						elif xbegin <= begin2 <= xend:
							if xend < end2:
								# recording first part of event
								time_match = (xend - begin2) * 60
								type = type_offset + 4
							else:
								# recording whole event
								time_match = (end2 - begin2) * 60
								type = type_offset + 2
						elif offset_day:
							xbegin -= 1440
							xend -= 1440
							if begin2 < xbegin <= end2:
								if xend < end2:
									# recording within event
									time_match = (xend - xbegin) * 60
									type = type_offset + 3
								else:
									# recording last part of event
									time_match = (end2 - xbegin) * 60
									type = type_offset + 1
							elif xbegin <= begin2 <= xend:
								if xend < end2:
									# recording first part of event
									time_match = (xend - begin2) * 60
									type = type_offset + 4
								else:
									# recording whole event
									time_match = (end2 - begin2) * 60
									type = type_offset + 2
					elif offset_day and checking_time:
						xbegin -= 1440
						xend -= 1440
						if begin2 < xbegin <= end2:
							if xend < end2:
								# recording within event
								time_match = (xend - xbegin) * 60
								type = type_offset + 3
							else:
								# recording last part of event
								time_match = (end2 - xbegin) * 60
								type = type_offset + 1
						elif xbegin <= begin2 <= xend:
							if xend < end2:
								# recording first part of event
								time_match = (xend - begin2) * 60
								type = type_offset + 4
							else:
								# recording whole event
								time_match = (end2 - begin2) * 60
								type = type_offset + 2
				else:
					if begin < timer_begin <= end:
						if timer_end < end:
							# recording within event
							time_match = timer_end - timer_begin
							type = type_offset + 3
						else:
							# recording last part of event
							time_match = end - timer_begin
							type = type_offset + 1
					elif timer_begin <= begin <= timer_end:
						if timer_end < end:
							# recording first part of event
							time_match = timer_end - begin
							type = type_offset + 4
						else:
							# recording whole event
							time_match = end - begin
							type = type_offset + 2
				if time_match:
					if type in (2,7,12,17,22,27):
						# When full recording do not look further
						returnValue = (time_match, [type], isAutoTimer)
						break
					elif returnValue:
						if type not in returnValue[1]:
							returnValue[1].append(type)
					else:
						returnValue = (time_match, [type])

		return returnValue
コード例 #54
0
	def tryPrepare(self):
		if self.justplay:
			return True
		else:
			if not self.calculateFilename():
				self.do_backoff()
				self.start_prepare = time() + self.backoff
				return False
			rec_ref = self.service_ref and self.service_ref.ref
			if rec_ref and rec_ref.flags & eServiceReference.isGroup:
				rec_ref = getBestPlayableServiceReference(rec_ref, eServiceReference())
				if not rec_ref:
					self.log(1, "'get best playable service for group... record' failed")
					return False
			self.setRecordingPreferredTuner()
			self.record_service = rec_ref and NavigationInstance.instance.recordService(rec_ref)

			if not self.record_service:
				self.log(1, "'record service' failed")
				self.setRecordingPreferredTuner(setdefault=True)
				return False

			name = self.name
			description = self.description
			if self.repeated:
				epgcache = eEPGCache.getInstance()
				queryTime=self.begin+(self.end-self.begin)/2
				evt = epgcache.lookupEventTime(rec_ref, queryTime)
				if evt:
					if self.rename_repeat:
						event_description = evt.getShortDescription()
						if not event_description:
							event_description = evt.getExtendedDescription()
						if event_description and event_description != description:
							description = event_description
						event_name = evt.getEventName()
						if event_name and event_name != name:
							name = event_name
							if not self.calculateFilename(event_name):
								self.do_backoff()
								self.start_prepare = time() + self.backoff
								return False
					event_id = evt.getEventId()
				else:
					event_id = -1
			else:
				event_id = self.eit
				if event_id is None:
					event_id = -1

			prep_res=self.record_service.prepare(self.Filename + self.record_service.getFilenameExtension(), self.begin, self.end, event_id, name.replace("\n", ""), description.replace("\n", ""), ' '.join(self.tags), bool(self.descramble), bool(self.record_ecm))
			if prep_res:
				if prep_res == -255:
					self.log(4, "failed to write meta information")
				else:
					self.log(2, "'prepare' failed: error %d" % prep_res)

				# we must calc nur start time before stopRecordService call because in Screens/Standby.py TryQuitMainloop tries to get
				# the next start time in evEnd event handler...
				self.do_backoff()
				self.start_prepare = time() + self.backoff

				NavigationInstance.instance.stopRecordService(self.record_service)
				self.record_service = None
				self.setRecordingPreferredTuner(setdefault=True)
				return False
			return True
コード例 #55
0
 def JobEpgCacheLoad(self):
     print '[EPGC] Refreshing EPGCache.'
     from enigma import eEPGCache
     epgcache = eEPGCache.getInstance()
     epgcache.load()
コード例 #56
0
ファイル: UsageConfig.py プロジェクト: trunca/novale-viejo
 def EpgHistorySecondsChanged(configElement):
     from enigma import eEPGCache
     eEPGCache.getInstance().setEpgHistorySeconds(
         config.epg.histminutes.getValue() * 60)
コード例 #57
0
ファイル: AutoTimer.py プロジェクト: tomzza/enigma2-plugins
	def parseEPG(self, simulateOnly=False, uniqueId=None, callback=None):

		from plugin import AUTOTIMER_VERSION
		doLog("AutoTimer Version: " + AUTOTIMER_VERSION)

		if NavigationInstance.instance is None:
			doLog("[AutoTimer] Navigation is not available, can't parse EPG")
			return (0, 0, 0, [], [], [])

		new = 0
		modified = 0
		timers = []
		conflicting = []
		similars = []
		skipped = []

		# Init new added timers list
		global addNewTimers
		addNewTimers = []

		if config.plugins.autotimer.searchlog_write.value and not simulateOnly:
			self.prepareSearchLogfile()

		if currentThread().getName() == 'MainThread':
			doBlockingCallFromMainThread = lambda f, *a, **kw: f(*a, **kw)
		else:
			doBlockingCallFromMainThread = blockingCallFromMainThread

		# NOTE: the config option specifies "the next X days" which means today (== 1) + X
		delta = timedelta(days=config.plugins.autotimer.maxdaysinfuture.value + 1)
		evtLimit = mktime((date.today() + delta).timetuple())
		checkEvtLimit = delta.days > 1
		del delta

		# Read AutoTimer configuration
		self.readXml()

		# Get E2 instances
		epgcache = eEPGCache.getInstance()
		serviceHandler = eServiceCenter.getInstance()
		recordHandler = NavigationInstance.instance.RecordTimer

		# Save Timer in a dict to speed things up a little
		# We include processed timers as we might search for duplicate descriptions
		# NOTE: It is also possible to use RecordTimer isInTimer(), but we won't get the timer itself on a match
		timerdict = defaultdict(list)
		doBlockingCallFromMainThread(self.populateTimerdict, epgcache, recordHandler, timerdict, simulateOnly=simulateOnly)

		# Create dict of all movies in all folders used by an autotimer to compare with recordings
		# The moviedict will be filled only if one AutoTimer is configured to avoid duplicate description for any recordings
		moviedict = defaultdict(list)

		# Iterate Timer
		for timer in self.getEnabledTimerList():
			if uniqueId is None or timer.id == uniqueId:
				doLog("[AutoTimer] Start search for %s" % (timer.match.replace('\xc2\x86', '').replace('\xc2\x87', '')))
				tup = doBlockingCallFromMainThread(self.parseTimer, timer, epgcache, serviceHandler, recordHandler, checkEvtLimit, evtLimit, timers, conflicting, similars, skipped, timerdict, moviedict, simulateOnly=simulateOnly)
				if callback:
					callback(timers, conflicting, similars, skipped)
					del timers[:]
					del conflicting[:]
					del similars[:]
					del skipped[:]
				else:
					new += tup[0]
					modified += tup[1]

		if not simulateOnly:
			if sp_showResult is not None:
				blockingCallFromMainThread(sp_showResult)

			if config.plugins.autotimer.remove_double_and_conflicts_timers.value != "no":
				self.reloadTimerList(recordHandler)

		return (len(timers), new, modified, timers, conflicting, similars)
コード例 #58
0
ファイル: Vps.py プロジェクト: wolfje55/enigma2-plugins
    def program_dataAvail(self, str):
        if self.timer is None or self.timer.state == TimerEntry.StateEnded or self.timer.cancelled:
            self.program_abort()
            self.stop_simulation()
            return
        if self.timer.vpsplugin_enabled == False or config.plugins.vps.enabled.value == False:
            if self.activated_auto_increase:
                self.timer.autoincrease = False
            self.program_abort()
            self.stop_simulation()
            return

        lines = str.split("\n")
        for line in lines:
            data = line.split()
            if len(data) == 0:
                continue

            self.timer.log(0, "[VPS] " + line)

            if data[0] == "RUNNING_STATUS":
                if data[1] == "0":  # undefined
                    if data[2] == "FOLLOWING":
                        data[1] = "1"
                    else:
                        data[1] = "4"

                if data[1] == "1":  # not running
                    # Wenn der Eintrag im Following (Section_Number = 1) ist,
                    # dann nicht beenden (Sendung begann noch gar nicht)
                    if data[2] == "FOLLOWING":
                        self.activate_autoincrease()
                    elif self.timer.state == TimerEntry.StateRunning and not self.pausing and not self.set_next_event(
                    ):
                        self.stop_recording()
                        self.dont_restart_program = True
                        self.program_abort()

                elif data[1] == "2":  # starts in a few seconds
                    self.activate_autoincrease()
                    if self.timer.state == TimerEntry.StateWaiting:
                        self.session.nav.RecordTimer.doActivate(self.timer)

                elif data[1] == "3":  # pausing
                    self.pausing = True
                    if self.timer.state == TimerEntry.StateRunning:
                        self.activate_autoincrease()

                elif data[1] == "4":  # running
                    self.pausing = False
                    if self.timer.state == TimerEntry.StateRunning:
                        self.activate_autoincrease()
                    elif self.timer.state == TimerEntry.StateWaiting or self.timer.state == TimerEntry.StatePrepared:
                        # setze Startzeit auf jetzt
                        self.timer.begin = int(time())
                        self.session.nav.RecordTimer.timeChanged(self.timer)

                        self.activate_autoincrease()
                        self.program_abort()
                        self.stop_simulation()
                        vps_timers.checksoon(2000)  # Programm neu starten

                elif data[1] == "5":  # service off-air
                    self.timer.vpsplugin_overwrite = False
                    if self.activated_auto_increase:
                        self.timer.autoincrease = False
                        self.activated_auto_increase = False

            elif data[0] == "EVENT_ENDED":
                if not self.set_next_event():
                    if self.timer.state == TimerEntry.StateRunning:
                        self.stop_recording()

                    # program terminates by itself
                    #self.program_abort()
                    self.stop_simulation()

            elif data[0] == "OTHER_TS_RUNNING_STATUS":
                if self.timer.state == TimerEntry.StateWaiting:
                    self.timer.start_prepare = int(time())
                    self.session.nav.RecordTimer.doActivate(self.timer)

                # program terminates by itself
                #self.program_abort()
                self.stop_simulation()
                vps_timers.checksoon(2000)

            # PDC
            elif data[0] == "PDC_FOUND_EVENT_ID":
                self.found_pdc = True
                self.timer.eit = int(data[1])
                epgcache = eEPGCache.getInstance()
                evt = epgcache.lookupEventId(self.rec_ref, self.timer.eit)
                if evt:
                    self.timer.name = evt.getEventName()
                    self.timer.description = evt.getShortDescription()
                # program terminates by itself
                #self.program_abort()
                vps_timers.checksoon(500)

            elif data[0] == "FOUND_EVENT_ON_SCHEDULE":
                starttime = int(data[1])
                duration = int(data[2])
                # Soll die Sendung laut EPG erst nach dem Ende dieses Timers beginnen?
                if (not self.timer.vpsplugin_overwrite and
                    (self.timer.end + 300) < starttime) or (
                        self.timer.vpsplugin_overwrite and
                        (self.timer.end + self.max_extending_timer - 1800) <
                        starttime):
                    if self.new_timer_copy is None:
                        if self.activated_auto_increase:
                            self.timer.autoincrease = False
                            self.activated_auto_increase = False
                        self.copyTimer(starttime, duration)
                        self.timer.log(
                            0,
                            "[VPS] copied this timer, since the event may start later than this timer ends"
                        )

                elif not self.activated_auto_increase:
                    self.activate_autoincrease()

            elif data[0] == "EVENT_OVER" or data[0] == "CANNOT_FIND_EVENT":
                self.max_extending_timer = 2 * 3600
                if self.activated_auto_increase:
                    self.timer.autoincrease = False
                    self.activated_auto_increase = False

            elif data[0] == "PDC_MULTIPLE_FOUND_EVENT":
                self.check_and_add_event(int(data[1]))

            # Programm meldet, dass die EIT (present/following) des Senders offenbar
            # momentan fehlerhaft ist
            elif data[0] == "EIT_APPARENTLY_UNRELIABLE":
                if self.timer.vpsplugin_overwrite:
                    self.timer.vpsplugin_overwrite = False
                    self.timer.log(
                        0, "[VPS] can't trust EPG currently, go to safe mode")
コード例 #59
0
ファイル: download.py プロジェクト: OpenSPA/dvbapp2
	tmdb_api = "3c3efcf47c3577558812bb9d64019d65"
if config.plugins.xtraEvent.tvdbAPI.value != "":
	tvdb_api = config.plugins.xtraEvent.tvdbAPI.value
else:
	tvdb_api = "a99d487bb3426e5f3a60dea6d3d3c7ef"
if config.plugins.xtraEvent.fanartAPI.value != "":
	fanart_api = config.plugins.xtraEvent.fanartAPI.value
else:
	fanart_api = "6d231536dea4318a88cb2520ce89473b"
if config.plugins.xtraEvent.omdbAPI.value != "":
	omdb_api = config.plugins.xtraEvent.omdbAPI.value
else:
	omdb_apis = ["6a4c9432", "a8834925", "550a7c40", "8ec53e6b"]
	omdb_api = random.choice(omdb_apis)
	
epgcache = eEPGCache.getInstance()
pathLoc = config.plugins.xtraEvent.loc.value + "xtraEvent/"
desktop_size = getDesktop(0).size().width()

class downloads(Screen):
	def __init__(self, session):
		Screen.__init__(self, session)
		self.session = session
		skin = None
		if desktop_size <= 1280:
			if config.plugins.xtraEvent.skinSelect.value == "default":
				skin = "/usr/lib/enigma2/python/Plugins/Extensions/xtraEvent/skins/downloads_720_default.xml"
			elif config.plugins.xtraEvent.skinSelect.value == "skin_2":
				skin = "/usr/lib/enigma2/python/Plugins/Extensions/xtraEvent/skins/downloads_720_2.xml"
			elif config.plugins.xtraEvent.skinSelect.value == "skin_3":
				skin = "/usr/lib/enigma2/python/Plugins/Extensions/xtraEvent/skins/downloads_720_3.xml"
コード例 #60
0
def getSingleEventList(ref):
    epgcache = eEPGCache.getInstance()
    test = ['RIBDTEX', (str(ref), 0, time(), -1)]
    event = epgcache.lookupEvent(test)
    return event