7f42677de3df56894c4119892ba9e9d2b6e485e9
[vuplus_dvbapp] / lib / python / Plugins / Extensions / MediaPlayer / settings.py
1 from Screens.Screen import Screen
2 from Screens.HelpMenu import HelpableScreen
3 from Components.FileList import FileList
4 from Components.Sources.StaticText import StaticText
5 from Components.MediaPlayer import PlayList
6 from Components.config import config, getConfigListEntry, ConfigSubsection, configfile, ConfigText, ConfigYesNo, ConfigDirectory
7 from Components.ConfigList import ConfigListScreen
8 from Components.ActionMap import ActionMap
9
10 config.mediaplayer = ConfigSubsection()
11 config.mediaplayer.repeat = ConfigYesNo(default=False)
12 config.mediaplayer.savePlaylistOnExit = ConfigYesNo(default=True)
13 config.mediaplayer.saveDirOnExit = ConfigYesNo(default=False)
14 config.mediaplayer.defaultDir = ConfigDirectory()
15 config.mediaplayer.useAlternateUserAgent = ConfigYesNo(default=False)
16 config.mediaplayer.alternateUserAgent = ConfigText(default="")
17
18 class DirectoryBrowser(Screen, HelpableScreen):
19
20         def __init__(self, session, currDir):
21                 Screen.__init__(self, session)
22                 # for the skin: first try MediaPlayerDirectoryBrowser, then FileBrowser, this allows individual skinning
23                 self.skinName = ["MediaPlayerDirectoryBrowser", "FileBrowser" ]
24
25                 HelpableScreen.__init__(self)
26
27                 self["key_red"] = StaticText(_("Cancel"))
28                 self["key_green"] = StaticText(_("Use"))
29
30                 self.filelist = FileList(currDir, matchingPattern="")
31                 self["filelist"] = self.filelist
32
33                 self["FilelistActions"] = ActionMap(["SetupActions", "ColorActions"],
34                         {
35                                 "green": self.use,
36                                 "red": self.exit,
37                                 "ok": self.ok,
38                                 "cancel": self.exit
39                         })
40                 self.onLayoutFinish.append(self.layoutFinished)
41
42         def layoutFinished(self):
43                 self.setTitle(_("Directory browser"))
44
45         def ok(self):
46                 if self.filelist.canDescent():
47                         self.filelist.descent()
48
49         def use(self):
50                 if self["filelist"].getCurrentDirectory() is not None:
51                         if self.filelist.canDescent() and self["filelist"].getFilename() and len(self["filelist"].getFilename()) > len(self["filelist"].getCurrentDirectory()):
52                                 self.filelist.descent()
53                                 self.close(self["filelist"].getCurrentDirectory())
54                 else:
55                                 self.close(self["filelist"].getFilename())
56
57         def exit(self):
58                 self.close(False)
59
60 class MediaPlayerSettings(Screen,ConfigListScreen):
61
62         def __init__(self, session, parent):
63                 Screen.__init__(self, session)
64                 # for the skin: first try MediaPlayerSettings, then Setup, this allows individual skinning
65                 self.skinName = ["MediaPlayerSettings", "Setup" ]
66                 self.setup_title = _("Edit settings")
67                 self.onChangedEntry = [ ]
68
69                 self["key_red"] = StaticText(_("Cancel"))
70                 self["key_green"] = StaticText(_("Save"))
71
72                 ConfigListScreen.__init__(self, [], session = session, on_change = self.changedEntry)
73                 self.parent = parent
74                 self.initConfigList()
75                 config.mediaplayer.saveDirOnExit.addNotifier(self.initConfigList)
76
77                 self["setupActions"] = ActionMap(["SetupActions", "ColorActions"],
78                 {
79                     "green": self.save,
80                     "red": self.cancel,
81                     "cancel": self.cancel,
82                     "ok": self.ok,
83                 }, -2)
84
85         def layoutFinished(self):
86                 self.setTitle(self.setup_title)
87
88         def initConfigList(self, element=None):
89                 print "[initConfigList]", element
90                 try:
91                         self.list = []
92                         self.list.append(getConfigListEntry(_("repeat playlist"), config.mediaplayer.repeat))
93                         self.list.append(getConfigListEntry(_("save playlist on exit"), config.mediaplayer.savePlaylistOnExit))
94                         self.list.append(getConfigListEntry(_("save last directory on exit"), config.mediaplayer.saveDirOnExit))
95                         if not config.mediaplayer.saveDirOnExit.getValue():
96                                 self.list.append(getConfigListEntry(_("start directory"), config.mediaplayer.defaultDir))
97                         self["config"].setList(self.list)
98                 except KeyError:
99                         print "keyError"
100
101         def changedConfigList(self):
102                 self.initConfigList()
103
104         def ok(self):
105                 if self["config"].getCurrent()[1] == config.mediaplayer.defaultDir:
106                         self.session.openWithCallback(self.DirectoryBrowserClosed, DirectoryBrowser, self.parent.filelist.getCurrentDirectory())
107
108         def DirectoryBrowserClosed(self, path):
109                 print "PathBrowserClosed:" + str(path)
110                 if path != False:
111                         config.mediaplayer.defaultDir.setValue(path)
112
113         def save(self):
114                 for x in self["config"].list:
115                         x[1].save()
116                 self.close()
117
118         def cancel(self):
119                 self.close()
120
121         # for summary:
122         def changedEntry(self):
123                 for x in self.onChangedEntry:
124                         x()
125
126         def getCurrentEntry(self):
127                 return self["config"].getCurrent()[0]
128
129         def getCurrentValue(self):
130                 return str(self["config"].getCurrent()[1].getText())
131
132         def createSummary(self):
133                 from Screens.Setup import SetupSummary
134                 return SetupSummary