X-Git-Url: https://git.cweiske.de/enigma2.git/blobdiff_plain/a65edb264cc943a2a15b6886d9fa3190a92373c0..baa6968ed152a4e78ba27e3e48364a6b62680db2:/lib/python/Screens/MovieSelection.py diff --git a/lib/python/Screens/MovieSelection.py b/lib/python/Screens/MovieSelection.py index 62c797eb..ab36adda 100644 --- a/lib/python/Screens/MovieSelection.py +++ b/lib/python/Screens/MovieSelection.py @@ -10,6 +10,7 @@ from Plugins.Plugin import PluginDescriptor from Screens.MessageBox import MessageBox from Screens.FixedMenu import FixedMenu +from Screens.ChoiceBox import ChoiceBox from Tools.Directories import * from Tools.BoundFunction import boundFunction @@ -70,6 +71,11 @@ class MovieSelection(Screen): def __init__(self, session, selectedmovie = None): Screen.__init__(self, session) + self.tags = [ ] + self.selected_tags = None + + self.current_ref = eServiceReference("2:0:1:0:0:0:0:0:0:0:" + resolveFilename(SCOPE_HDD)) + self.movemode = False self.bouquet_mark_edit = False @@ -82,21 +88,29 @@ class MovieSelection(Screen): self.list = self["list"] self.selectedmovie = selectedmovie + self["key_red"] = Button(_("All...")) + self["key_green"] = Button("") + self["key_yellow"] = Button("") + self["key_blue"] = Button("") + #self["okbutton"] = Button("ok", [self.channelSelected]) self["freeDiskSpace"] = DiskInfo(resolveFilename(SCOPE_HDD), DiskInfo.FREE, update=False) - self["actions"] = ActionMap(["OkCancelActions", "MovieSelectionActions"], + self["actions"] = ActionMap(["OkCancelActions", "MovieSelectionActions", "ColorActions"], { "cancel": self.abort, "ok": self.movieSelected, "showEventInfo": self.showEventInformation, "contextMenu": self.doContext, + + "red": self.showAll, + "green": self.showTagsFirst, + "yellow": self.showTagsSecond, + "blue": self.showTagsMenu, }) self["actions"].csel = self self.onShown.append(self.go) - - self.lengthTimer = eTimer() - self.lengthTimer.timeout.get().append(self.updateLengthData) + self.inited = False def showEventInformation(self): from Screens.EventView import EventViewSimple @@ -106,27 +120,21 @@ class MovieSelection(Screen): self.session.open(EventViewSimple, evt, ServiceReference(self.getCurrent())) def go(self): + if not self.inited: # ouch. this should redraw our "Please wait..."-text. # this is of course not the right way to do this. - self.delayTimer.start(10, 1) + self.delayTimer.start(10, 1) + self.inited=True def updateHDDData(self): - self["list"].reload(eServiceReference("2:0:1:0:0:0:0:0:0:0:" + resolveFilename(SCOPE_HDD))) - if (self.selectedmovie is not None): + self.reloadList() + if self.selectedmovie is not None: self.moveTo() self["waitingtext"].instance.hide() - + self["freeDiskSpace"].update() - - self.lengthTimer.start(10, 1) - self.lengthPosition = 0 - self.lengthLength = len(self["list"]) - - def updateLengthData(self): - self.list.updateLengthOfIndex(self.lengthPosition) - self.lengthPosition += 1 - if self.lengthPosition < self.lengthLength: - self.lengthTimer.start(10, 1) + + self.updateTags() def moveTo(self): self["list"].moveTo(self.selectedmovie) @@ -135,7 +143,6 @@ class MovieSelection(Screen): return self["list"].getCurrent() def movieSelected(self): - self.lengthTimer.stop() current = self.getCurrent() if current is not None: self.close(current) @@ -147,3 +154,74 @@ class MovieSelection(Screen): def abort(self): self.close(None) + + def getTagDescription(self, tag): + # TODO: access the tag database + return tag + + def updateTags(self): + # get a list of tags available in this list + self.tags = list(self["list"].tags) + + # by default, we do not display any filtering options + self.tag_first = "" + self.tag_second = "" + + # when tags are present, however, the first two are + # directly mapped to the second, third ("green", "yellow") buttons + if len(self.tags) > 0: + self.tag_first = self.getTagDescription(self.tags[0]) + + if len(self.tags) > 1: + self.tag_second = self.getTagDescription(self.tags[1]) + + self["key_green"].text = self.tag_first + self["key_yellow"].text = self.tag_second + + # the rest is presented in a list, available on the + # fourth ("blue") button + if len(self.tags) > 2: + self["key_blue"].text = _("Other...") + else: + self["key_blue"].text = "" + + def reloadList(self): + self["list"].reload(self.current_ref, self.selected_tags) + title = _("Recorded files...") + if self.selected_tags is not None: + title += " - " + ','.join(self.selected_tags) + self.setTitle(title) + + def showAll(self): + self.selected_tags = None + self.reloadList() + + def showTagsN(self, n): + if len(self.tags) < n: + self.showTagWarning() + else: + print "select tag #%d, %s, %s" % (n, self.tags[n - 1], ','.join(self.tags)) + self.selected_tags = set([self.tags[n - 1]]) + self.reloadList() + + def showTagsFirst(self): + self.showTagsN(1) + + def showTagsSecond(self): + self.showTagsN(2) + + def tagChosen(self, tag): + if tag is not None: + self.selected_tags = set([tag[0]]) + self.reloadList() + + def showTagsMenu(self): + if len(self.tags) < 3: + self.showTagWarning() + else: + list = [(tag, self.getTagDescription(tag)) for tag in self.tags ] + self.session.openWithCallback(self.tagChosen, ChoiceBox, title=_("Please select keyword to filter..."), list = list) + + def showTagWarning(self): + # TODO + self.session.open(MessageBox, _("You need to define some keywords first!\nPress the menu-key to define keywords.\nDo you want to define keywords now?"), MessageBox.TYPE_ERROR)