if event == iRecordableService.evEnd:
print "RecordTimer.staticGotRecordEvent(iRecordableService.evEnd)"
recordings = NavigationInstance.instance.getRecordings()
- if not len(recordings): # no more recordings exist
+ if not recordings: # no more recordings exist
rec_time = NavigationInstance.instance.RecordTimer.getNextRecordingTime()
if rec_time > 0 and (rec_time - time.time()) < 360:
print "another recording starts in", rec_time - time.time(), "seconds... do not shutdown yet"
self.dirname = dirname
self.dirnameHadToFallback = False
self.autoincrease = False
+ self.autoincreasetime = 3600 * 24 # 1 day
self.tags = tags or []
self.log_entries = []
if self.name:
filename += " - " + self.name
- if self.dirname and not Directories.pathExists(self.dirname):
+ if self.dirname and not Directories.fileExists(self.dirname, 'w'):
self.dirnameHadToFallback = True
self.Filename = Directories.getRecordingFilename(filename, None)
else:
try:
f = open(self.Filename + ".ts.meta", "w")
f.write(rec_ref.toString() + "\n")
- f.write(self.name + "\n")
- f.write(self.description + "\n")
+ f.write(self.name.replace("\n", "") + "\n")
+ f.write(self.description.replace("\n", "") + "\n")
f.write(str(self.begin) + "\n")
f.write(' '.join(self.tags))
f.close()
return True
elif next_state == self.StateEnded:
+ old_end = self.end
+ if self.setAutoincreaseEnd():
+ self.log(12, "autoincrase recording %d minute(s)" % int((self.end - old_end)/60))
+ self.state -= 1
+ return True
self.log(12, "stop recording")
if not self.justplay:
NavigationInstance.instance.stopRecordService(self.record_service)
Notifications.AddNotificationWithCallback(self.sendTryQuitMainloopNotification, MessageBox, _("A finished record timer wants to shut down\nyour Dreambox. Shutdown now?"), timeout = 20)
return True
+ def setAutoincreaseEnd(self, entry = None):
+ if not self.autoincrease:
+ return False
+ if entry is None:
+ new_end = int(time.time()) + self.autoincreasetime
+ else:
+ new_end = entry.begin -30
+
+ dummyentry = RecordTimerEntry(self.service_ref, self.begin, new_end, self.name, self.description, self.eit, disabled=True, justplay = self.justplay, afterEvent = self.afterEvent, dirname = self.dirname, tags = self.tags)
+ dummyentry.disabled = self.disabled
+ timersanitycheck = TimerSanityCheck(NavigationInstance.instance.RecordTimer.timer_list, dummyentry)
+ if not timersanitycheck.check():
+ simulTimerList = timersanitycheck.getSimulTimerList()
+ new_end = simulTimerList[1].begin
+ del simulTimerList
+ new_end -= 30 # 30 Sekunden Prepare-Zeit lassen
+ del dummyentry
+ if new_end <= time.time():
+ return False
+ self.end = new_end
+ return True
+
+
def sendStandbyNotification(self, answer):
if answer:
Notifications.AddNotification(Screens.Standby.Standby)
elif event == iRecordableService.evStart:
text = _("A record has been started:\n%s") % self.name
if self.dirnameHadToFallback:
- text = '\n'.join([text, _("Please note that the previously selected media could not be accessed and therefore the default directory is being used instead.")])
+ text = '\n'.join((text, _("Please note that the previously selected media could not be accessed and therefore the default directory is being used instead.")))
# maybe this should be configurable?
Notifications.AddPopup(text = text, type = MessageBox.TYPE_INFO, timeout = 3)
print "ignore timer conflict"
elif timersanitycheck.doubleCheck():
print "ignore double timer"
+ return None
entry.timeChanged()
print "[Timer] Record " + str(entry)
entry.Timer = self
if dosave:
self.saveTimer()
return None
-
+
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.toCompareString() == str(service)
+ check = x.service_ref.ref.toString() == refstr
if not check:
sref = x.service_ref.ref
parent_sid = sref.getUnsignedData(5)
sref.setUnsignedData(2, parent_tsid)
sref.setUnsignedData(5, 0)
sref.setUnsignedData(6, 0)
- check = x.service_ref.ref.toCompareString() == str(service)
+ check = sref.toCompareString() == refstr
num = 0
if check:
check = False
check = True
break
if check:
- #if x.eit is not None and x.repeated == 0:
- # if x.eit == eventid:
- # return duration
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 range(7):
+ for y in (0, 1, 2, 3, 4, 5, 6):
if x.repeated & (2 ** y):
timecmp = y * 1440 + time.tm_hour * 60 + time.tm_min
if timecmp <= chktimecmp < (timecmp + ((x.end - x.begin) / 60)):
diff = x.end - begin
if time_match < diff:
time_match = diff
+ if time_match:
+ break
return time_match
def removeEntry(self, entry):
# abort timer.
# this sets the end time to current time, so timer will be stopped.
+ entry.autoincrease = False
entry.abort()
if entry.state != entry.StateEnded:
print "state: ", entry.state
print "in processed: ", entry in self.processed_timers
print "in running: ", entry in self.timer_list
+ # autoincrease instanttimer if possible
+ if not entry.dontSave:
+ for x in self.timer_list:
+ if x.setAutoincreaseEnd():
+ self.timeChanged(x)
# now the timer should be in the processed_timers list. remove it from there.
self.processed_timers.remove(entry)
self.saveTimer()