servicemp3.cpp: more simple/flexible streaming detection
[enigma2.git] / lib / python / Plugins / Extensions / MediaPlayer / settings.py
old mode 100644 (file)
new mode 100755 (executable)
index 594b453..7f42677
@@ -1,94 +1,75 @@
 from Screens.Screen import Screen
 from Screens.HelpMenu import HelpableScreen
-from Components.Label import Label
 from Components.FileList import FileList
+from Components.Sources.StaticText import StaticText
 from Components.MediaPlayer import PlayList
-from Components.config import config, getConfigListEntry, ConfigSubsection, configfile, ConfigText, ConfigYesNo
+from Components.config import config, getConfigListEntry, ConfigSubsection, configfile, ConfigText, ConfigYesNo, ConfigDirectory
 from Components.ConfigList import ConfigListScreen
 from Components.ActionMap import ActionMap
 
-class ConfigDirectory(ConfigText):
-       def __init__(self, default="", visible_width=60):
-               ConfigText.__init__(self, default, fixed_size = True, visible_width = visible_width)
-       def handleKey(self, key):
-               pass
-       def getValue(self):
-               if self.text == "":
-                       return None
-               else:
-                       return ConfigText.getValue(self)
-       def setValue(self, val):
-               if val == None:
-                       val = ""
-               ConfigText.setValue(self, val)
-       def getMulti(self, selected):
-               if self.text == "":
-                       return ("mtext"[1-selected:], _("List of Storage Devices"), range(0))
-               else:
-                       return ConfigText.getMulti(self, selected)
-               
 config.mediaplayer = ConfigSubsection()
 config.mediaplayer.repeat = ConfigYesNo(default=False)
 config.mediaplayer.savePlaylistOnExit = ConfigYesNo(default=True)
 config.mediaplayer.saveDirOnExit = ConfigYesNo(default=False)
 config.mediaplayer.defaultDir = ConfigDirectory()
+config.mediaplayer.useAlternateUserAgent = ConfigYesNo(default=False)
+config.mediaplayer.alternateUserAgent = ConfigText(default="")
 
 class DirectoryBrowser(Screen, HelpableScreen):
-       skin = """
-               <screen name="DirectoryBrowser" position="80,150" size="400,376" title="Directory browser" >
-                       <ePixmap pixmap="skin_default/buttons/red.png" position="10,0" size="140,40" alphatest="on" />
-                       <ePixmap pixmap="skin_default/buttons/green.png" position="250,0" size="140,40" alphatest="on" />               <widget source="key_red" render="Label" position="10,0" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#9f1313" transparent="1" />
-                       <widget source="key_green" render="Label" position="250,0" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#1f771f" transparent="1" />
-                       <widget name="filelist" position="0,44" size="400,332" scrollbarMode="showOnDemand" />
-               </screen>"""
+
        def __init__(self, session, currDir):
-               from Components.Sources.StaticText import StaticText
                Screen.__init__(self, session)
+               # for the skin: first try MediaPlayerDirectoryBrowser, then FileBrowser, this allows individual skinning
+               self.skinName = ["MediaPlayerDirectoryBrowser", "FileBrowser" ]
+
                HelpableScreen.__init__(self)
-               
+
                self["key_red"] = StaticText(_("Cancel"))
-               self["key_green"] = StaticText(_("Apply"))
+               self["key_green"] = StaticText(_("Use"))
 
                self.filelist = FileList(currDir, matchingPattern="")
                self["filelist"] = self.filelist
 
                self["FilelistActions"] = ActionMap(["SetupActions", "ColorActions"],
                        {
-                               "green": self.apply,
+                               "green": self.use,
                                "red": self.exit,
                                "ok": self.ok,
                                "cancel": self.exit
                        })
+               self.onLayoutFinish.append(self.layoutFinished)
+
+       def layoutFinished(self):
+               self.setTitle(_("Directory browser"))
 
        def ok(self):
                if self.filelist.canDescent():
                        self.filelist.descent()
 
-       def apply(self):
-               if self.filelist.canDescent() and len(self["filelist"].getFilename()) > len(self["filelist"].getCurrentDirectory()):
-                       self.filelist.descent()
-               self.close(self["filelist"].getCurrentDirectory())
+       def use(self):
+               if self["filelist"].getCurrentDirectory() is not None:
+                       if self.filelist.canDescent() and self["filelist"].getFilename() and len(self["filelist"].getFilename()) > len(self["filelist"].getCurrentDirectory()):
+                               self.filelist.descent()
+                               self.close(self["filelist"].getCurrentDirectory())
+               else:
+                               self.close(self["filelist"].getFilename())
 
        def exit(self):
                self.close(False)
 
 class MediaPlayerSettings(Screen,ConfigListScreen):
-       skin = """
-               <screen name="MediaPlayerSettings" position="160,150" size="400,200" title="Edit settings">
-                       <ePixmap pixmap="skin_default/buttons/red.png" position="10,0" size="140,40" alphatest="on" />
-                       <ePixmap pixmap="skin_default/buttons/green.png" position="250,0" size="140,40" alphatest="on" />
-                       <widget source="key_red" render="Label" position="10,0" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#9f1313" transparent="1" />
-                       <widget source="key_green" render="Label" position="250,0" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#1f771f" transparent="1" />
-                       <widget name="config" position="10,44" size="380,146" />
-               </screen>"""
 
        def __init__(self, session, parent):
-               from Components.Sources.StaticText import StaticText
                Screen.__init__(self, session)
+               # for the skin: first try MediaPlayerSettings, then Setup, this allows individual skinning
+               self.skinName = ["MediaPlayerSettings", "Setup" ]
+               self.setup_title = _("Edit settings")
+               self.onChangedEntry = [ ]
+
                self["key_red"] = StaticText(_("Cancel"))
                self["key_green"] = StaticText(_("Save"))
 
-               ConfigListScreen.__init__(self, [])
+               ConfigListScreen.__init__(self, [], session = session, on_change = self.changedEntry)
                self.parent = parent
                self.initConfigList()
                config.mediaplayer.saveDirOnExit.addNotifier(self.initConfigList)
@@ -101,6 +82,9 @@ class MediaPlayerSettings(Screen,ConfigListScreen):
                    "ok": self.ok,
                }, -2)
 
+       def layoutFinished(self):
+               self.setTitle(self.setup_title)
+
        def initConfigList(self, element=None):
                print "[initConfigList]", element
                try:
@@ -134,3 +118,17 @@ class MediaPlayerSettings(Screen,ConfigListScreen):
        def cancel(self):
                self.close()
 
+       # for summary:
+       def changedEntry(self):
+               for x in self.onChangedEntry:
+                       x()
+
+       def getCurrentEntry(self):
+               return self["config"].getCurrent()[0]
+
+       def getCurrentValue(self):
+               return str(self["config"].getCurrent()[1].getText())
+
+       def createSummary(self):
+               from Screens.Setup import SetupSummary
+               return SetupSummary