translation fixes
[vuplus_dvbapp-plugin] / vlcplayer / src / VlcMediaList.py
1 # -*- coding: ISO-8859-1 -*-
2 #===============================================================================
3 # VLC Player Plugin by A. Lätsch 2007
4 #                   modified by Volker Christian 2008
5 #
6 # This is free software; you can redistribute it and/or modify it under
7 # the terms of the GNU General Public License as published by the Free
8 # Software Foundation; either version 2, or (at your option) any later
9 # version.
10 #===============================================================================
11
12
13 from Components.ActionMap import ActionMap
14 from Components.Label import Label
15 from Components.Button import Button
16 from Components.Pixmap import Pixmap
17 from Screens.MessageBox import MessageBox
18 from Screens.Screen import Screen
19
20 from pyexpat import ExpatError
21
22 from VlcFileList import VlcFileList
23 from VlcPlayList import VlcPlayList
24 from VlcPlayer import VlcPlayer
25 from . import _
26
27
28 class VlcMediaListScreen(Screen):
29         skin ="""
30                 <screen size="560,400" position="80,100" name="VlcMediaListScreen" >
31                         <ePixmap name="red"    position="0,355"   zPosition="4" size="140,40" pixmap="skin_default/buttons/red.png" transparent="1" alphatest="on" />
32                         <ePixmap name="green"  position="140,355" zPosition="4" size="140,40" pixmap="skin_default/buttons/green.png" transparent="1" alphatest="on" />
33                         <ePixmap name="yellow" position="280,355" zPosition="4" size="140,40" pixmap="skin_default/buttons/yellow.png" transparent="1" alphatest="on" />
34                         <ePixmap name="blue"   position="420,355" zPosition="4" size="140,40" pixmap="skin_default/buttons/blue.png" transparent="1" alphatest="on" />
35                         <widget name="key_red" position="0,355" zPosition="5" size="140,40" valign="center" halign="center" font="Regular;21" transparent="1" foregroundColor="white" shadowColor="black" shadowOffset="-1,-1" />
36                         <widget name="key_green" position="140,355" zPosition="5" size="140,40" valign="center" halign="center" font="Regular;21" transparent="1" foregroundColor="white" shadowColor="black" shadowOffset="-1,-1" />
37                         <widget name="key_yellow" position="280,355" zPosition="5" size="140,40" valign="center" halign="center" font="Regular;21" transparent="1" foregroundColor="white" shadowColor="black" shadowOffset="-1,-1" />
38                         <widget name="key_blue" position="420,355" zPosition="5" size="140,40" valign="center" halign="center" font="Regular;21" transparent="1" foregroundColor="white" shadowColor="black" shadowOffset="-1,-1" />
39                         <ePixmap size="551,325" alphatest="on" position="5,30" pixmap="skin_default/border_epg.png" />
40                         <widget size="320,25" alphatest="on" position="5,10" zPosition="1" name="filelist_button_sel" pixmap="skin_default/epg_now.png" />
41                         <widget size="320,25" alphatest="on" position="5,10" zPosition="1" name="playlist_button_sel" pixmap="skin_default/epg_next.png" />
42                         <widget valign="center" transparent="1" size="108,22" backgroundColor="#25062748" position="5,10" zPosition="2" name="filelist_text" halign="center" font="Regular;18" />
43                         <widget valign="center" transparent="1" size="108,22" backgroundColor="#25062748" position="111,10" zPosition="2" name="playlist_text" halign="center" font="Regular;18" />
44                         <widget size="540,320" scrollbarMode="showOnDemand" position="11,35" name="filelist" />
45                         <widget size="540,320" scrollbarMode="showOnDemand" position="11,35" name="playlist" />
46                 </screen>"""
47         
48         defaultFilter = "(?i)\.(avi|mpeg|mpg|divx|xvid|mp4|mov|ts|vob|wmv|mkv|iso|m3u|pls|xspf)$"
49
50         def __init__(self, session, server):
51                 Screen.__init__(self, session)
52                 self.session = session
53                 self.server = server
54                 self["filelist"] = VlcFileList(self.getFilesAndDirsCB, server.getBasedir(), self.defaultFilter)
55                 self["playlist"] = VlcPlayList(self.getPlaylistEntriesCB)
56                 self["key_red"] = Button(_("filter off"))
57                 self["key_green"] = Button(_("refresh"))
58                 self["key_yellow"] = Button("")
59                 self["key_blue"] = Button(_("play DVD"))
60                 self["filelist_button_sel"] = Pixmap()
61                 self["playlist_button_sel"] = Pixmap()
62                 self["more_button_sel"] = Pixmap()
63                 self["filelist_text"] = Label(_("Filelist"))
64                 self["playlist_text"] = Label(_("Playlist"))
65                 self["server_name"] = Label(server.getName())
66                 self["current_dir"] = Label()
67                 
68                 self["actions"] = ActionMap(["WizardActions", "MenuActions", "ShortcutActions", "MoviePlayerActions", "EPGSelectActions"],
69                         {
70                          "back":        self.close,
71                          "red":         self.keyFilter,
72                          "green":       self.update,
73                          "yellow":      self.switchLists,
74                          "blue":        self.keyDvd,
75                          "up":          self.up,
76                          "down":        self.down,
77                          "left":        self.left,
78                          "right":       self.right,
79                          "ok":          self.ok,
80                          "prevBouquet": self.switchToFileList,
81                          "nextBouquet": self.switchToPlayList,
82                          }, -1)
83                 self.currentList = None
84                 self.playlistIds = []
85
86                 self.onClose.append(self.__onClose)
87                 self.onFirstExecBegin.append(self.__onFirstExecBegin)
88
89         def __onFirstExecBegin(self):
90                 self.setTitle("vlc://" + (self.server.getName() or self.server.getHost()) + "/" + self.server.getBasedir())
91                 self["current_dir"].setText(self.server.getBasedir())
92                         
93         def __onClose(self):
94                 try:
95                         for id in self.playlistIds:
96                                 self.server.delete(id)
97                 except Exception, e:
98                         pass
99
100         def update(self):
101                 self.updateFilelist()
102                 self.updatePlaylist()
103                 if self.currentList == self["playlist"]:
104                         self.switchToPlayList()
105                 else:
106                         self.switchToFileList()
107
108         def updatePlaylist(self):
109                 self["playlist"].update()
110
111         def updateFilelist(self):
112                 self["filelist"].update()
113
114         def keyFilter(self):
115                 if self["filelist"].regex is None:
116                         self["filelist"].changeRegex(self.defaultFilter)
117                         self["key_red"].setText(_("filter off"))
118                 else:
119                         self["filelist"].changeRegex(None)
120                         self["key_red"].setText(_("filter on"))
121                 try:
122                         self.updateFilelist()
123                 except Exception, e:
124                         self.session.open(
125                                 MessageBox, _("Error updating filelist from server %s:\n%s" % (
126                                                 self.server.getName(), e)
127                                         ), MessageBox.TYPE_ERROR)
128
129         def keyDvd(self):
130                 self.play("dvdsimple://" + self.server.getDvdPath(), "DVD")
131
132         def up(self):
133                 self.currentList.up()
134
135         def down(self):
136                 self.currentList.down()
137
138         def left(self):
139                 self.currentList.pageUp()
140
141         def right(self):
142                 self.currentList.pageDown()
143
144         def play(self, media, name):
145                 dlg = self.session.open(VlcPlayer, self.server, self.currentList)
146                 dlg.playfile(media, name)
147
148         def ok(self):
149                 media, name = self.currentList.activate()
150                 if media is not None:
151                         if media.lower().endswith(".m3u") or media.lower().endswith(".pls") or media.lower().endswith(".xspf"):
152                                 try:
153                                         id = self.server.loadPlaylist(media)
154                                         if id is not None:
155                                                 self.playlistIds.append(id)
156                                                 self.updatePlaylist()
157                                                 self.switchToPlayList()
158                                 except Exception, e:
159                                         self.session.open(
160                                                 MessageBox, _("Error loading playlist %s into server %s:\n%s" % (
161                                                                 media, self.server.getName(), e)
162                                                         ), MessageBox.TYPE_ERROR)
163                         elif media.lower().endswith(".iso"):
164                                 self.play("dvdsimple://" + media, "DVD")
165                         else:
166                                 self.play(media, name)
167                 elif name is not None:
168                         self.setTitle("vlc://" + (self.server.getName() or self.server.getHost()) + "/" + name)
169                         self["current_dir"].setText(name)
170
171         def getFilesAndDirsCB(self, currentDirectory, regex):
172                 try:
173                         return self.server.getFilesAndDirs(currentDirectory, regex)
174                 except ExpatError, e:
175                         self.session.open(
176                                 MessageBox, _("Error loading playlist into server %s:\n%s" % (
177                                                 self.server.getName(), e)
178                                         ), MessageBox.TYPE_ERROR)
179                         raise ExpatError, e
180                 except Exception, e:
181                         self.session.open(
182                                 MessageBox, _("Error loading filelist into server %s:\n%s" % (
183                                                 self.server.getName(), e)
184                                         ), MessageBox.TYPE_ERROR)
185                 return None
186
187         def getPlaylistEntriesCB(self):
188                 try:
189                         return self.server.getPlaylistEntries()
190                 except ExpatError, e:
191                         self.session.open(
192                                 MessageBox, _("Error loading playlist into server %s:\n%s" % (
193                                                 self.server.getName(), e)
194                                         ), MessageBox.TYPE_ERROR)
195                 except Exception, e:
196                         self.session.open(
197                                 MessageBox, _("Error loading playlist into server %s:\n%s" % (
198                                                 self.server.getName(), e)
199                                         ), MessageBox.TYPE_ERROR)
200                 return None
201
202         def switchLists(self):
203                 if self.currentList == self["filelist"]:
204                         self.switchToPlayList()
205                 else:
206                         self.switchToFileList()
207
208         def switchToFileList(self):
209                 self["filelist"].selectionEnabled(1)
210                 self["filelist"].show()
211                 self["filelist_button_sel"].show()
212                 self["playlist"].selectionEnabled(0)
213                 self["playlist"].hide()
214                 self["playlist_button_sel"].hide()
215                 self.currentList = self["filelist"]
216                 self["key_yellow"].setText(_("show playlist"))
217
218         def switchToPlayList(self):
219                 self["filelist"].selectionEnabled(0)
220                 self["filelist"].hide()
221                 self["filelist_button_sel"].hide()
222                 self["playlist"].selectionEnabled(1)
223                 self["playlist"].show()
224                 self["playlist_button_sel"].show()
225                 self.currentList = self["playlist"]
226                 self["key_yellow"].setText(_("show filelist"))