X-Git-Url: http://code.vuplus.com/gitweb/?p=vuplus_dvbapp;a=blobdiff_plain;f=RecordTimer.py;h=443f050a885ed968050a5a57f52ca2572f38c644;hp=32fb9231e37de3a2f5d0f50dd0a47531f74f1ea0;hb=439941c4d23e8384ea334d599b42b338beb7ebd5;hpb=46c144d3f294b74996cc9276528a9862e4d70efe diff --git a/RecordTimer.py b/RecordTimer.py index 32fb923..443f050 100755 --- a/RecordTimer.py +++ b/RecordTimer.py @@ -4,6 +4,7 @@ from enigma import eEPGCache, getBestPlayableServiceReference, \ from Components.config import config from Components.UsageConfig import defaultMoviePath from Components.TimerSanityCheck import TimerSanityCheck +from Components.SystemInfo import SystemInfo from Screens.MessageBox import MessageBox import Screens.Standby @@ -18,6 +19,8 @@ from ServiceReference import ServiceReference from time import localtime, strftime, ctime, time from bisect import insort +import os + # ok, for descriptions etc we have: # service reference (to get the service name) # name (title) @@ -47,6 +50,25 @@ class AFTEREVENT: DEEPSTANDBY = 2 AUTO = 3 +def findSafeRecordPath(dirname): + if not dirname: + return None + + from Components import Harddisk + dirname = os.path.realpath(dirname) + mountpoint = Harddisk.findMountPoint(dirname) + if mountpoint in ('/', '/media'): + print '[RecordTimer] media is not mounted:', dirname + return None + if not os.path.isdir(dirname): + try: + os.makedirs(dirname) + except Exception, ex: + print '[RecordTimer] Failed to create dir "%s":' % dirname, ex + return None + + return dirname + # please do not translate log messages class RecordTimerEntry(timer.TimerEntry, object): ######### the following static methods and members are only in use when the box is in (soft) standby @@ -114,7 +136,10 @@ class RecordTimerEntry(timer.TimerEntry, object): self.timer = None self.__record_service = None self.start_prepare = 0 - self.justplay = justplay + if SystemInfo["PVRSupport"]: + self.justplay = justplay + else: + self.justplay = True self.afterEvent = afterEvent self.dirname = dirname self.dirnameHadToFallback = False @@ -164,21 +189,31 @@ class RecordTimerEntry(timer.TimerEntry, object): if config.recording.ascii_filenames.value: filename = ASCIItranslit.legacyEncode(filename) - if not self.dirname or not Directories.fileExists(self.dirname, 'w'): - if self.dirname: - self.dirnameHadToFallback = True - dirname = defaultMoviePath() + if not self.dirname: + dirname = findSafeRecordPath(defaultMoviePath()) else: - dirname = self.dirname + dirname = findSafeRecordPath(self.dirname) + if dirname is None: + dirname = findSafeRecordPath(defaultMoviePath()) + self.dirnameHadToFallback = True + + if not dirname: + return None + self.Filename = Directories.getRecordingFilename(filename, dirname) self.log(0, "Filename calculated as: '%s'" % self.Filename) #begin_date + " - " + service_name + description) + return self.Filename def tryPrepare(self): if self.justplay: return True else: - self.calculateFilename() + 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()) @@ -410,6 +445,18 @@ class RecordTimerEntry(timer.TimerEntry, object): record_service = property(lambda self: self.__record_service, setRecordService) + def isUsbRecordingPath(self): + dirname = None + + if self.dirname: + dirname = findSafeRecordPath(self.dirname) + + if dirname is None: + dirname = findSafeRecordPath(defaultMoviePath()) + + from Components import Harddisk + return Harddisk.isUsbStorage(dirname) + def createTimer(xml): begin = int(xml.get("begin")) end = int(xml.get("end")) @@ -417,7 +464,10 @@ def createTimer(xml): description = xml.get("description").encode("utf-8") repeated = xml.get("repeated").encode("utf-8") disabled = long(xml.get("disabled") or "0") - justplay = long(xml.get("justplay") or "0") + if SystemInfo["PVRSupport"]: + justplay = long(xml.get("justplay") or "0") + else: + justplay = long("1") afterevent = str(xml.get("afterevent") or "nothing") afterevent = { "nothing": AFTEREVENT.NONE, @@ -466,6 +516,18 @@ class RecordTimer(timer.Timer): print "unable to load timers from file!" def doActivate(self, w): + if w.state == RecordTimerEntry.StateWaiting: + from Components.SystemInfo import SystemInfo + if SystemInfo.get("DisableUsbRecord", True) and w.isUsbRecordingPath(): + service_name = w.service_ref.getServiceName() + self.timer_list.remove(w) + if w.dontSave is False: + w.resetState() + w.disable() + self.addTimerEntry(w) + Notifications.AddNotification(MessageBox, _("Can not recording on a USB storage.\nService name : %s"% service_name), MessageBox.TYPE_ERROR) + return + # when activating a timer which has already passed, # simply abort the timer. don't run trough all the stages. if w.shouldSkip(): @@ -603,7 +665,10 @@ class RecordTimer(timer.Timer): if timer.tags is not None: list.append(' tags="' + str(stringToXML(' '.join(timer.tags))) + '"') list.append(' disabled="' + str(int(timer.disabled)) + '"') - list.append(' justplay="' + str(int(timer.justplay)) + '"') + if SystemInfo["PVRSupport"]: + list.append(' justplay="' + str(int(timer.justplay)) + '"') + else: + list.append(' justplay="1"') list.append('>\n') if config.recording.debug.value: