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 Components.SystemInfo import SystemInfo
+from Components.UsageConfig import defaultMoviePath
+from Screens.MovieSelection import getPreferredTagEditor
+from Screens.LocationBox import MovieLocationBox
from Screens.ChoiceBox import ChoiceBox
+from Screens.MessageBox import MessageBox
from RecordTimer import AFTEREVENT
-from enigma import eEPGCache
-import time
-import datetime
+from enigma import eEPGCache, eServiceReference
+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.entryDate = None
self.entryService = None
-
+
self["oktext"] = Label(_("OK"))
self["canceltext"] = Label(_("Cancel"))
self["ok"] = Pixmap()
self.createConfig()
- self["actions"] = NumberActionMap(["SetupActions"],
+ self["actions"] = NumberActionMap(["SetupActions", "GlobalActions", "PiPSetupActions"],
{
"ok": self.keySelect,
"save": self.keyGo,
"cancel": self.keyCancel,
+ "volumeUp": self.incrementStart,
+ "volumeDown": self.decrementStart,
+ "size+": self.incrementEnd,
+ "size-": self.decrementEnd
}, -2)
self.list = []
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"]
+
+ afterevent = {
+ AFTEREVENT.NONE: "nothing",
+ AFTEREVENT.DEEPSTANDBY: "deepstandby",
+ AFTEREVENT.STANDBY: "standby",
+ AFTEREVENT.AUTO: "auto"
+ }[self.timer.afterEvent]
+
+ weekday_table = ("mon", "tue", "wed", "thu", "fri", "sat", "sun")
# calculate default values
day = []
weekday = 0
- for x in range(0,7):
+ for x in (0, 1, 2, 3, 4, 5, 6):
day.append(0)
if self.timer.repeated: # repeated
type = "repeated"
flags = self.timer.repeated
repeated = "user"
count = 0
- for x in range(0, 7):
+ for x in (0, 1, 2, 3, 4, 5, 6):
if flags == 1: # weekly
print "Set to weekday " + str(x)
weekday = x
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)
+ if SystemInfo["DeepstandbySupport"]:
+ shutdownString = _("go to deep standby")
+ else:
+ shutdownString = _("shut down")
+ self.timerentry_afterevent = ConfigSelection(choices = [("nothing", _("do nothing")), ("standby", _("go to standby")), ("deepstandby", shutdownString), ("auto", _("auto"))], default = afterevent)
self.timerentry_type = ConfigSelection(choices = [("once",_("once")), ("repeated", _("repeated"))], default = type)
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_tags = self.timer.tags[:]
+ self.timerentry_tagsset = ConfigSelection(choices = [not self.timerentry_tags and "None" or " ".join(self.timerentry_tags)])
self.timerentry_repeated = ConfigSelection(default = repeated, choices = [("daily", _("daily")), ("weekly", _("weekly")), ("weekdays", _("Mon-Fri")), ("user", _("user defined"))])
-
- self.timerentry_startdate = ConfigDateTime(default = self.timer.begin, formatstring = _("%d.%B %Y"), increment = 86400)
+
+ self.timerentry_date = ConfigDateTime(default = self.timer.begin, formatstring = _("%d.%B %Y"), increment = 86400)
self.timerentry_starttime = ConfigClock(default = self.timer.begin)
-
- self.timerentry_enddate = ConfigDateTime(default = self.timer.end, formatstring = _("%d.%B %Y"), increment = 86400)
self.timerentry_endtime = ConfigClock(default = self.timer.end)
+ self.timerentry_showendtime = ConfigSelection(default = ((self.timer.end - self.timer.begin) > 4), choices = [(True, _("yes")), (False, _("no"))])
+
+ default = self.timer.dirname or defaultMoviePath()
+ 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"))])
self.timerentry_day = ConfigSubList()
- for x in range(0,7):
+ for x in (0, 1, 2, 3, 4, 5, 6):
self.timerentry_day.append(ConfigYesNo(default = day[x]))
# FIXME some service-chooser needed here
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)
-
- def checkDate(self, configElement):
- if configElement is self.timerentry_startdate:
- if self.timerentry_enddate.value < self.timerentry_startdate.value:
- self.timerentry_enddate.value = self.timerentry_startdate.value
- self["config"].invalidate(self.entryEndDate)
- if configElement is self.timerentry_enddate:
- if (self.timerentry_enddate.value < self.timerentry_startdate.value):
- self.timerentry_startdate.value = self.timerentry_enddate.value
- self["config"].invalidate(self.entryStartDate)
def createSetup(self, widget):
self.list = []
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)
self.list.append(getConfigListEntry(_("Saturday"), self.timerentry_day[5]))
self.list.append(getConfigListEntry(_("Sunday"), self.timerentry_day[6]))
- #self.list.append(getConfigListEntry("StartDate", self.timerentry_startdate))
-# self.list.append(getConfigListEntry("Weekday", self.timerentry_weekday))
-
- self.entryStartDate = getConfigListEntry(_("Start"), self.timerentry_startdate)
+ self.entryDate = getConfigListEntry(_("Date"), self.timerentry_date)
if self.timerentry_type.value == "once":
- self.list.append(self.entryStartDate)
- self.list.append(getConfigListEntry(" ", self.timerentry_starttime))
- else:
- self.list.append(getConfigListEntry(_("StartTime"), self.timerentry_starttime))
+ self.list.append(self.entryDate)
+
+ self.entryStartTime = getConfigListEntry(_("StartTime"), self.timerentry_starttime)
+ self.list.append(self.entryStartTime)
+
+ self.entryShowEndTime = getConfigListEntry(_("Set End Time"), self.timerentry_showendtime)
+ if self.timerentry_justplay.value == "zap":
+ self.list.append(self.entryShowEndTime)
+ self.entryEndTime = getConfigListEntry(_("EndTime"), self.timerentry_endtime)
+ if self.timerentry_justplay.value != "zap" or self.timerentry_showendtime.value:
+ self.list.append(self.entryEndTime)
- self.entryEndDate = getConfigListEntry(_("End"), self.timerentry_enddate)
- if self.timerentry_type.value == "once":
- if self.timerentry_justplay.value != "zap":
- self.list.append(self.entryEndDate)
- self.list.append(getConfigListEntry(" ", self.timerentry_endtime))
- else:
- if self.timerentry_justplay.value != "zap":
- self.list.append(getConfigListEntry(_("EndTime"), self.timerentry_endtime))
+ self.channelEntry = getConfigListEntry(_("Channel"), self.timerentry_service)
+ self.list.append(self.channelEntry)
+ self.dirname = getConfigListEntry(_("Location"), self.timerentry_dirname)
+ self.tagsSet = getConfigListEntry(_("Tags"), self.timerentry_tagsset)
if self.timerentry_justplay.value != "zap":
+ if config.usage.setup_level.index >= 2: # expert+
+ self.list.append(self.dirname)
+ if getPreferredTagEditor():
+ self.list.append(self.tagsSet)
self.list.append(getConfigListEntry(_("After event"), self.timerentry_afterevent))
- self.channelEntry = getConfigListEntry(_("Channel"), self.timerentry_service)
- self.list.append(self.channelEntry)
-
self[widget].list = self.list
self[widget].l.setList(self.list)
def newConfig(self):
print "newConfig", self["config"].getCurrent()
- if self["config"].getCurrent() == self.timerTypeEntry:
- self.createSetup("config")
- if self["config"].getCurrent() == self.timerJustplayEntry:
- self.createSetup("config")
- if self["config"].getCurrent() == self.frequencyEntry:
+ if self["config"].getCurrent() in (self.timerTypeEntry, self.timerJustplayEntry, self.frequencyEntry, self.entryShowEndTime):
self.createSetup("config")
def keyLeft(self):
- if self["config"].getCurrent() is self.channelEntry:
+ if self["config"].getCurrent() in (self.channelEntry, self.tagsSet):
self.keySelect()
else:
ConfigListScreen.keyLeft(self)
self.newConfig()
def keyRight(self):
- if self["config"].getCurrent() is self.channelEntry:
+ if self["config"].getCurrent() in (self.channelEntry, self.tagsSet):
self.keySelect()
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
+ )
+ elif getPreferredTagEditor() and cur == self.tagsSet:
+ self.session.openWithCallback(
+ self.tagEditFinished,
+ getPreferredTagEditor(),
+ self.timerentry_tags
+ )
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())
+ if args:
+ 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()))
-
- def buildRepeatedBegin(self, rep_time, start_time):
- d = time.localtime(rep_time)
- dt = datetime.datetime(d.tm_year, d.tm_mon, d.tm_mday, start_time[0], start_time[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 getBeginEnd(self):
- enddate = self.timerentry_enddate.value
+ date = self.timerentry_date.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.
+
+ begin = self.getTimestamp(date, starttime)
+ end = self.getTimestamp(date, endtime)
+
+ # if the endtime is less than the starttime, add 1 day.
if end < begin:
end += 86400
return begin, end
- def keyGo(self):
+ def selectChannelSelector(self, *args):
+ self.session.openWithCallback(
+ self.finishedChannelSelectionCorrection,
+ ChannelSelection.SimpleChannelSelection,
+ _("Select channel to record from")
+ )
+
+ def finishedChannelSelectionCorrection(self, *args):
+ if args:
+ self.finishedChannelSelection(*args)
+ self.keyGo()
+
+ 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"
+ if self.timerentry_justplay.value == "zap":
+ if not self.timerentry_showendtime.value:
+ self.timerentry_endtime.value = self.timerentry_starttime.value
self.timer.resetRepeated()
- self.timer.afterEvent = {"nothing": AFTEREVENT.NONE, "deepstandby": AFTEREVENT.DEEPSTANDBY, "standby": AFTEREVENT.STANDBY}[self.timerentry_afterevent.value]
-
+ self.timer.afterEvent = {
+ "nothing": AFTEREVENT.NONE,
+ "deepstandby": AFTEREVENT.DEEPSTANDBY,
+ "standby": AFTEREVENT.STANDBY,
+ "auto": AFTEREVENT.AUTO
+ }[self.timerentry_afterevent.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 range(0,7):
+ 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 range(0,5):
+ for x in (0, 1, 2, 3, 4):
self.timer.setRepeated(x)
-
+
if self.timerentry_repeated.value == "user":
- for x in range(0,7):
+ for x in (0, 1, 2, 3, 4, 5, 6):
if self.timerentry_day[x].value:
self.timer.setRepeated(x)
- self.timer.repeatedbegindate = self.buildRepeatedBegin(self.timerentry_repeatedbegindate.value, self.timerentry_starttime.value)
- 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.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.time(), self.timerentry_starttime.value)
+ self.timer.end = self.getTimestamp(time.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 is not None:
+ if event:
n = event.getNumOfLinkageServices()
- if n > 0:
+ if n > 1:
tlist = []
ref = self.session.nav.getCurrentlyPlayingServiceReference()
parent = self.timer.service_ref.ref
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))
+ def incrementStart(self):
+ self.timerentry_starttime.increment()
+ self["config"].invalidate(self.entryStartTime)
+
+ def decrementStart(self):
+ self.timerentry_starttime.decrement()
+ self["config"].invalidate(self.entryStartTime)
+
+ def incrementEnd(self):
+ if self.entryEndTime is not None:
+ self.timerentry_endtime.increment()
+ self["config"].invalidate(self.entryEndTime)
+
+ def decrementEnd(self):
+ if self.entryEndTime is not None:
+ self.timerentry_endtime.decrement()
+ self["config"].invalidate(self.entryEndTime)
+
def subserviceSelected(self, service):
if not service is None:
self.timer.service_ref = ServiceReference(service[1])
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
+
+ def tagEditFinished(self, ret):
+ if ret is not None:
+ self.timerentry_tags = ret
+ self.timerentry_tagsset.setChoices([not ret and "None" or " ".join(ret)])
+ self["config"].invalidate(self.tagsSet)
+
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"],
self.updateText()
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 = [(str(strftime("%Y-%m-%d %H-%M", localtime(x[0])) + " - " + x[2]), x) for x in self.log_entries]
+
+ 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()
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()
def updateText(self):
- if len(self.list) > 0:
+ if self.list:
self["logentry"].setText(str(self["loglist"].getCurrent()[1][2]))
else:
self["logentry"].setText("")