X-Git-Url: https://git.cweiske.de/enigma2.git/blobdiff_plain/67b53c1cb06988394c35a6e965c99b72b67fe1be..faaf29fd8322fb3fc29d700befdf063bd4b08d90:/lib/python/Screens/TimerEntry.py diff --git a/lib/python/Screens/TimerEntry.py b/lib/python/Screens/TimerEntry.py index cc43a9af..31a65a30 100644 --- a/lib/python/Screens/TimerEntry.py +++ b/lib/python/Screens/TimerEntry.py @@ -1,28 +1,30 @@ from Screen import Screen import ChannelSelection from ServiceReference import ServiceReference -from Components.config import ConfigSelection, ConfigText, ConfigSubList, ConfigDateTime, ConfigClock, ConfigYesNo, getConfigListEntry +from Components.config import config, ConfigSelection, ConfigText, ConfigSubList, ConfigDateTime, ConfigClock, ConfigYesNo, getConfigListEntry from Components.ActionMap import NumberActionMap from Components.ConfigList import ConfigListScreen from Components.MenuList import MenuList from Components.Button import Button from Components.Label import Label from Components.Pixmap import Pixmap +from Screens.LocationBox import MovieLocationBox from Screens.ChoiceBox import ChoiceBox from RecordTimer import AFTEREVENT +from Tools.Directories import resolveFilename, SCOPE_HDD from enigma import eEPGCache -import time -import datetime +from time import localtime, mktime, time, strftime +from datetime import datetime class TimerEntry(Screen, ConfigListScreen): def __init__(self, session, timer): Screen.__init__(self, session) self.timer = timer - + self.entryStartDate = None self.entryEndDate = None self.entryService = None - + self["oktext"] = Label(_("OK")) self["canceltext"] = Label(_("Cancel")) self["ok"] = Pixmap() @@ -43,9 +45,9 @@ class TimerEntry(Screen, ConfigListScreen): def createConfig(self): justplay = self.timer.justplay - + afterevent = { AFTEREVENT.NONE: "nothing", AFTEREVENT.DEEPSTANDBY: "deepstandby", AFTEREVENT.STANDBY: "standby"}[self.timer.afterEvent] - + weekday_table = ["mon", "tue", "wed", "thu", "fri", "sat", "sun"] # calculate default values @@ -78,14 +80,14 @@ class TimerEntry(Screen, ConfigListScreen): else: # once type = "once" repeated = None - weekday = (int(time.strftime("%w", time.localtime(self.timer.begin))) - 1) % 7 + weekday = (int(strftime("%w", localtime(self.timer.begin))) - 1) % 7 day[weekday] = 1 - + self.timerentry_justplay = ConfigSelection(choices = [("zap", _("zap")), ("record", _("record"))], default = {0: "record", 1: "zap"}[justplay]) self.timerentry_afterevent = ConfigSelection(choices = [("nothing", _("do nothing")), ("standby", _("go to standby")), ("deepstandby", _("go to deep standby"))], default = afterevent) self.timerentry_type = ConfigSelection(choices = [("once",_("once")), ("repeated", _("repeated"))], default = type) - self.timerentry_name = ConfigText(default = self.timer.name, fixed_size = False) - self.timerentry_description = ConfigText(default = self.timer.description, fixed_size = False) + self.timerentry_name = ConfigText(default = self.timer.name, visible_width = 50, fixed_size = False) + self.timerentry_description = ConfigText(default = self.timer.description, visible_width = 50, fixed_size = False) self.timerentry_repeated = ConfigSelection(default = repeated, choices = [("daily", _("daily")), ("weekly", _("weekly")), ("weekdays", _("Mon-Fri")), ("user", _("user defined"))]) @@ -95,6 +97,12 @@ class TimerEntry(Screen, ConfigListScreen): self.timerentry_enddate = ConfigDateTime(default = self.timer.end, formatstring = _("%d.%B %Y"), increment = 86400) self.timerentry_endtime = ConfigClock(default = self.timer.end) + default = self.timer.dirname or resolveFilename(SCOPE_HDD) + tmp = config.movielist.videodirs.value + if default not in tmp: + tmp.append(default) + self.timerentry_dirname = ConfigSelection(default = default, choices = tmp) + self.timerentry_repeatedbegindate = ConfigDateTime(default = self.timer.repeatedbegindate, formatstring = _("%d.%B %Y"), increment = 86400) self.timerentry_weekday = ConfigSelection(default = weekday_table[weekday], choices = [("mon",_("Monday")), ("tue", _("Tuesday")), ("wed",_("Wednesday")), ("thu", _("Thursday")), ("fri", _("Friday")), ("sat", _("Saturday")), ("sun", _("Sunday"))]) @@ -109,8 +117,9 @@ class TimerEntry(Screen, ConfigListScreen): servicename = str(self.timer.service_ref.getServiceName()) except: pass + self.timerentry_service_ref = self.timer.service_ref self.timerentry_service = ConfigSelection([servicename]) - + self.timerentry_startdate.addNotifier(self.checkDate) self.timerentry_enddate.addNotifier(self.checkDate) @@ -136,7 +145,7 @@ class TimerEntry(Screen, ConfigListScreen): if self.timerentry_type.value == "once": self.frequencyEntry = None else: # repeated - self.frequencyEntry = getConfigListEntry(_("Frequency"), self.timerentry_repeated) + self.frequencyEntry = getConfigListEntry(_("Repeats"), self.timerentry_repeated) self.list.append(self.frequencyEntry) self.repeatedbegindateEntry = getConfigListEntry(_("Starting on"), self.timerentry_repeatedbegindate) self.list.append(self.repeatedbegindateEntry) @@ -176,6 +185,9 @@ class TimerEntry(Screen, ConfigListScreen): self.list.append(getConfigListEntry(_("EndTime"), self.timerentry_endtime)) if self.timerentry_justplay.value != "zap": + if config.usage.setup_level.index >= 2: # expert+ + self.dirname = getConfigListEntry(_("Location"), self.timerentry_dirname) + self.list.append(self.dirname) self.list.append(getConfigListEntry(_("After event"), self.timerentry_afterevent)) self.channelEntry = getConfigListEntry(_("Channel"), self.timerentry_service) @@ -206,34 +218,52 @@ class TimerEntry(Screen, ConfigListScreen): else: ConfigListScreen.keyRight(self) self.newConfig() - + def keySelect(self): - if self["config"].getCurrent() == self.channelEntry: - self.session.openWithCallback(self.finishedChannelSelection, ChannelSelection.SimpleChannelSelection, _("Select channel to record from")) + cur = self["config"].getCurrent() + if cur == self.channelEntry: + self.session.openWithCallback( + self.finishedChannelSelection, + ChannelSelection.SimpleChannelSelection, + _("Select channel to record from") + ) + elif config.usage.setup_level.index >= 2 and cur == self.dirname: + self.session.openWithCallback( + self.pathSelected, + MovieLocationBox, + _("Choose target folder"), + self.timerentry_dirname.value, + minFree = 100 # We require at least 100MB free space + ) else: self.keyGo() def finishedChannelSelection(self, *args): if len(args): - self.timer.service_ref = ServiceReference(args[0]) - self.timerentry_service.setCurrentText(self.timer.service_ref.getServiceName()) + self.timerentry_service_ref = ServiceReference(args[0]) + self.timerentry_service.setCurrentText(self.timerentry_service_ref.getServiceName()) self["config"].invalidate(self.channelEntry) def getTimestamp(self, date, mytime): - d = time.localtime(date) - dt = datetime.datetime(d.tm_year, d.tm_mon, d.tm_mday, mytime[0], mytime[1]) - return int(time.mktime(dt.timetuple())) + d = localtime(date) + dt = datetime(d.tm_year, d.tm_mon, d.tm_mday, mytime[0], mytime[1]) + return int(mktime(dt.timetuple())) + + def buildRepeatedBegin(self, rep_time, start_time): + d = localtime(rep_time) + dt = datetime(d.tm_year, d.tm_mon, d.tm_mday, start_time[0], start_time[1]) + return int(mktime(dt.timetuple())) def getBeginEnd(self): enddate = self.timerentry_enddate.value endtime = self.timerentry_endtime.value - + startdate = self.timerentry_startdate.value starttime = self.timerentry_starttime.value - + begin = self.getTimestamp(startdate, starttime) end = self.getTimestamp(enddate, endtime) - + # because of the dateChecks, startdate can't be < enddate. # however, the endtime can be less than the starttime. # in this case, add 1 day. @@ -247,30 +277,35 @@ class TimerEntry(Screen, ConfigListScreen): self.timer.justplay = self.timerentry_justplay.value == "zap" self.timer.resetRepeated() self.timer.afterEvent = {"nothing": AFTEREVENT.NONE, "deepstandby": AFTEREVENT.DEEPSTANDBY, "standby": AFTEREVENT.STANDBY}[self.timerentry_afterevent.value] - + self.timer.service_ref = self.timerentry_service_ref + + 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": - self.timer.repeatedbegindate = self.timerentry_repeatedbegindate.value if self.timerentry_repeated.value == "daily": for x in range(0,7): 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 range(0,5): self.timer.setRepeated(x) - + if self.timerentry_repeated.value == "user": for x in range(0,7): if self.timerentry_day[x].value: self.timer.setRepeated(x) - self.timer.begin = self.getTimestamp(time.time(), self.timerentry_starttime.value) - self.timer.end = self.getTimestamp(time.time(), self.timerentry_endtime.value) - + self.timer.repeatedbegindate = self.buildRepeatedBegin(self.timerentry_repeatedbegindate.value, self.timerentry_starttime.value) + 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 @@ -291,32 +326,44 @@ class TimerEntry(Screen, ConfigListScreen): tlist.append((i.getName(), i)) self.session.openWithCallback(self.subserviceSelected, ChoiceBox, title=_("Please select a subservice to record..."), list = tlist, selection = selection) return + + self.saveTimer() self.close((True, self.timer)) def subserviceSelected(self, service): if not service is None: self.timer.service_ref = ServiceReference(service[1]) + self.saveTimer() self.close((True, self.timer)) + def saveTimer(self): + self.session.nav.RecordTimer.saveTimer() + def keyCancel(self): self.close((False,)) - + + def pathSelected(self, res): + if res is not None: + if config.movielist.videodirs.value != self.timerentry_dirname.choices: + self.timerentry_dirname.setChoices(config.movielist.videodirs.value, default=res) + self.timerentry_dirname.value = res + class TimerLog(Screen): def __init__(self, session, timer): Screen.__init__(self, session) self.timer = timer; self.log_entries = self.timer.log_entries[:] - + self.fillLogList() - + self["loglist"] = MenuList(self.list) self["logentry"] = Label() - + self["key_red"] = Button(_("Delete entry")) self["key_green"] = Button() self["key_yellow"] = Button("") self["key_blue"] = Button(_("Clear log")) - + self.onShown.append(self.updateText) self["actions"] = NumberActionMap(["OkCancelActions", "DirectionActions", "ColorActions"], @@ -332,7 +379,10 @@ class TimerLog(Screen): }, -1) def deleteEntry(self): - self.log_entries.remove(self["loglist"].getCurrent()[1]) + cur = self["loglist"].getCurrent() + if cur is None: + return + self.log_entries.remove(cur[1]) self.fillLogList() self["loglist"].l.setList(self.list) self.updateText() @@ -340,25 +390,25 @@ class TimerLog(Screen): def fillLogList(self): self.list = [ ] for x in self.log_entries: - self.list.append((str(time.strftime("%Y-%m-%d %H-%M", time.localtime(x[0])) + " - " + x[2]), x)) - - def clearLog(self): + self.list.append((str(strftime("%Y-%m-%d %H-%M", localtime(x[0])) + " - " + x[2]), x)) + + def clearLog(self): self.log_entries = [] self.fillLogList() self["loglist"].l.setList(self.list) self.updateText() - + def keyClose(self): if self.timer.log_entries != self.log_entries: self.timer.log_entries = self.log_entries self.close((True, self.timer)) else: self.close((False,)) - + def up(self): self["loglist"].instance.moveSelection(self["loglist"].instance.moveUp) self.updateText() - + def down(self): self["loglist"].instance.moveSelection(self["loglist"].instance.moveDown) self.updateText() @@ -366,7 +416,7 @@ class TimerLog(Screen): def left(self): self["loglist"].instance.moveSelection(self["loglist"].instance.pageUp) self.updateText() - + def right(self): self["loglist"].instance.moveSelection(self["loglist"].instance.pageDown) self.updateText()