add possibility to choose record location on timer creation and choose
[vuplus_dvbapp] / lib / python / Screens / TimerEntry.py
index c6779e7..b490f6d 100644 (file)
@@ -1,16 +1,20 @@
 from Screen import Screen
 import ChannelSelection
 from ServiceReference import ServiceReference
 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.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.SelectionList import SelectionList, SelectionEntryComponent
+from Components.MovieList import MovieList
+from Screens.LocationBox import MovieLocationBox
 from Screens.ChoiceBox import ChoiceBox
 from RecordTimer import AFTEREVENT
 from Screens.ChoiceBox import ChoiceBox
 from RecordTimer import AFTEREVENT
-from enigma import eEPGCache
+from Tools.Directories import resolveFilename, SCOPE_HDD
+from enigma import eEPGCache, eServiceReference
 import time
 import datetime
 
 import time
 import datetime
 
@@ -18,11 +22,11 @@ class TimerEntry(Screen, ConfigListScreen):
        def __init__(self, session, timer):
                Screen.__init__(self, session)
                self.timer = timer
        def __init__(self, session, timer):
                Screen.__init__(self, session)
                self.timer = timer
-               
+
                self.entryStartDate = None
                self.entryEndDate = None
                self.entryService = None
                self.entryStartDate = None
                self.entryEndDate = None
                self.entryService = None
-               
+
                self["oktext"] = Label(_("OK"))
                self["canceltext"] = Label(_("Cancel"))
                self["ok"] = Pixmap()
                self["oktext"] = Label(_("OK"))
                self["canceltext"] = Label(_("Cancel"))
                self["ok"] = Pixmap()
@@ -43,9 +47,9 @@ class TimerEntry(Screen, ConfigListScreen):
 
        def createConfig(self):
                        justplay = self.timer.justplay
 
        def createConfig(self):
                        justplay = self.timer.justplay
-                               
+
                        afterevent = { AFTEREVENT.NONE: "nothing", AFTEREVENT.DEEPSTANDBY: "deepstandby", AFTEREVENT.STANDBY: "standby"}[self.timer.afterEvent]
                        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
                        weekday_table = ["mon", "tue", "wed", "thu", "fri", "sat", "sun"]
 
                        # calculate default values
@@ -80,7 +84,7 @@ class TimerEntry(Screen, ConfigListScreen):
                                repeated = None
                                weekday = (int(time.strftime("%w", time.localtime(self.timer.begin))) - 1) % 7
                                day[weekday] = 1
                                repeated = None
                                weekday = (int(time.strftime("%w", time.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_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)
@@ -95,6 +99,11 @@ 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)
 
                        self.timerentry_enddate = ConfigDateTime(default = self.timer.end, formatstring =  _("%d.%B %Y"), increment = 86400)
                        self.timerentry_endtime = ConfigClock(default = self.timer.end)
 
+                       tmp = config.movielist.videodirs.value
+                       if self.timer.dirname and not self.timer.dirname in tmp:
+                               tmp.append(self.timer.dirname)
+                       self.timerentry_dirname = ConfigSelection(default = self.timer.dirname or resolveFilename(SCOPE_HDD), 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_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 +118,9 @@ class TimerEntry(Screen, ConfigListScreen):
                                servicename = str(self.timer.service_ref.getServiceName())
                        except:
                                pass
                                servicename = str(self.timer.service_ref.getServiceName())
                        except:
                                pass
+                       self.timerentry_service_ref = self.timer.service_ref
                        self.timerentry_service = ConfigSelection([servicename])
                        self.timerentry_service = ConfigSelection([servicename])
-                       
+
                        self.timerentry_startdate.addNotifier(self.checkDate)
                        self.timerentry_enddate.addNotifier(self.checkDate)
 
                        self.timerentry_startdate.addNotifier(self.checkDate)
                        self.timerentry_enddate.addNotifier(self.checkDate)
 
@@ -136,7 +146,7 @@ class TimerEntry(Screen, ConfigListScreen):
                if self.timerentry_type.value == "once":
                        self.frequencyEntry = None
                else: # repeated
                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(self.frequencyEntry)
                        self.repeatedbegindateEntry = getConfigListEntry(_("Starting on"), self.timerentry_repeatedbegindate)
                        self.list.append(self.repeatedbegindateEntry)
@@ -176,6 +186,9 @@ class TimerEntry(Screen, ConfigListScreen):
                                self.list.append(getConfigListEntry(_("EndTime"), self.timerentry_endtime))
 
                if self.timerentry_justplay.value != "zap":
                                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)
                        self.list.append(getConfigListEntry(_("After event"), self.timerentry_afterevent))
 
                self.channelEntry = getConfigListEntry(_("Channel"), self.timerentry_service)
@@ -206,17 +219,30 @@ class TimerEntry(Screen, ConfigListScreen):
                else:
                        ConfigListScreen.keyRight(self)
                        self.newConfig()
                else:
                        ConfigListScreen.keyRight(self)
                        self.newConfig()
-               
+
        def keySelect(self):
        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):
                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):
                        self["config"].invalidate(self.channelEntry)
 
        def getTimestamp(self, date, mytime):
@@ -232,13 +258,13 @@ class TimerEntry(Screen, ConfigListScreen):
        def getBeginEnd(self):
                enddate = self.timerentry_enddate.value
                endtime = self.timerentry_endtime.value
        def getBeginEnd(self):
                enddate = self.timerentry_enddate.value
                endtime = self.timerentry_endtime.value
-               
+
                startdate = self.timerentry_startdate.value
                starttime = self.timerentry_starttime.value
                startdate = self.timerentry_startdate.value
                starttime = self.timerentry_starttime.value
-               
+
                begin = self.getTimestamp(startdate, starttime)
                end = self.getTimestamp(enddate, endtime)
                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.
                # because of the dateChecks, startdate can't be < enddate.
                # however, the endtime can be less than the starttime.
                # in this case, add 1 day.
@@ -252,7 +278,12 @@ 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.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":
                if self.timerentry_type.value == "once":
                        self.timer.begin, self.timer.end = self.getBeginEnd()
                if self.timerentry_type.value == "repeated":
@@ -262,11 +293,11 @@ class TimerEntry(Screen, ConfigListScreen):
 
                        if self.timerentry_repeated.value == "weekly":
                                self.timer.setRepeated(self.timerentry_weekday.index)
 
                        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 == "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:
                        if self.timerentry_repeated.value == "user":
                                for x in range(0,7):
                                        if self.timerentry_day[x].value:
@@ -275,7 +306,7 @@ class TimerEntry(Screen, ConfigListScreen):
                        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.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)
-                       
+
                        # when a timer end is set before the start, add 1 day
                        if self.timer.end < self.timer.begin:
                                self.timer.end += 86400
                        # when a timer end is set before the start, add 1 day
                        if self.timer.end < self.timer.begin:
                                self.timer.end += 86400
@@ -311,23 +342,29 @@ class TimerEntry(Screen, ConfigListScreen):
 
        def keyCancel(self):
                self.close((False,))
 
        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[:]
 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.fillLogList()
-               
+
                self["loglist"] = MenuList(self.list)
                self["logentry"] = Label()
                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["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.onShown.append(self.updateText)
 
                self["actions"] = NumberActionMap(["OkCancelActions", "DirectionActions", "ColorActions"],
@@ -355,24 +392,24 @@ class TimerLog(Screen):
                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))
                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):             
+
+       def clearLog(self):
                self.log_entries = []
                self.fillLogList()
                self["loglist"].l.setList(self.list)
                self.updateText()
                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 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 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 down(self):
                self["loglist"].instance.moveSelection(self["loglist"].instance.moveDown)
                self.updateText()
@@ -380,7 +417,7 @@ class TimerLog(Screen):
        def left(self):
                self["loglist"].instance.moveSelection(self["loglist"].instance.pageUp)
                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 right(self):
                self["loglist"].instance.moveSelection(self["loglist"].instance.pageDown)
                self.updateText()