implement UTF-8 text/plain subtitles. change subtitle switching using second input...
[enigma2.git] / lib / python / Screens / Subtitles.py
1 from Screen import Screen
2 from Components.ServiceEventTracker import ServiceEventTracker
3 from Components.ActionMap import ActionMap
4 from Components.ConfigList import ConfigListScreen
5 from Components.config import config, getConfigListEntry, ConfigNothing
6 from enigma import iPlayableService
7
8 from Tools.ISO639 import LanguageCodes
9
10 class Subtitles(Screen, ConfigListScreen):
11         def __init__(self, session):
12                 Screen.__init__(self, session)
13         
14                 self["actions"] = ActionMap(["SetupActions"],
15                 {
16                         "ok": self.ok,
17                         "cancel": self.cancel,
18                 }, -2)
19
20                 self.list = []
21                 ConfigListScreen.__init__(self, self.list)
22                 self.infobar = self.session.infobar
23                 self.fillList()
24
25                 self.__event_tracker = ServiceEventTracker(screen=self, eventmap=
26                         {
27                                 iPlayableService.evUpdatedInfo: self.__updatedInfo
28                         })
29                 self.cached_subtitle_checked = False
30                 self.__selected_subtitle = None
31
32         def fillList(self):
33                 del self.list[:]
34                 print "self.list", self.list
35                 if self.subtitlesEnabled():
36                         self.list.append(getConfigListEntry(_("Disable Subtitles"), ConfigNothing(), None))
37                         sel = self.infobar.selected_subtitle
38                 else:
39                         sel = None
40                 for x in self.getSubtitleList():
41                         if sel and sel[:4] == x[:4]: #ignore Language code in compare
42                                 text = _("Running")
43                         else:
44                                 text = _("Enable")
45                         if x[0] == 0:
46                                 if LanguageCodes.has_key(x[4]):
47                                         self.list.append(getConfigListEntry(text+" DVB "+LanguageCodes[x[4]][0], ConfigNothing(), x))
48                                 else:
49                                         self.list.append(getConfigListEntry(text+" DVB "+x[4], ConfigNothing(), x))
50                         elif x[0] == 1:
51                                 if x[4] == 'und': #undefined
52                                         self.list.append(getConfigListEntry(text+" TTX "+_("Page")+" %x%02x"%(x[3],x[2]), ConfigNothing(), x))
53                                 else:
54                                         if LanguageCodes.has_key(x[4]):
55                                                 self.list.append(getConfigListEntry(text+" TTX "+_("Page")+" %x%02x"%(x[3],x[2])+" "+LanguageCodes[x[4]][0], ConfigNothing(), x))
56                                         else:
57                                                 self.list.append(getConfigListEntry(text+" TTX "+_("Page")+" %x%02x"%(x[3],x[2])+" "+x[4], ConfigNothing(), x))
58                         elif x[0] == 2:
59                                 types = [" UTF-8 text "," SSA / AAS "," .SRT file "]
60                                 if x[4] == 'und': #undefined
61                                         self.list.append(getConfigListEntry(text+types[x[2]]+_("Subtitles")+" %d" % x[1], ConfigNothing(), x))
62                                 else:
63                                         if LanguageCodes.has_key(x[4]):
64                                                 self.list.append(getConfigListEntry(text+types[x[2]]+_("Subtitles") + ' ' + LanguageCodes[x[4]][0], ConfigNothing(), x))
65                                         else:
66                                                 self.list.append(getConfigListEntry(text+types[x[2]]+_("Subtitles")+" %d " % x[1] +x[4], ConfigNothing(), x))
67 #               return _("Disable subtitles")
68                 self["config"].list = self.list
69                 self["config"].l.setList(self.list)
70
71         def __updatedInfo(self):
72                 self.fillList()
73
74         def getSubtitleList(self):
75                 s = self.infobar and self.infobar.getCurrentServiceSubtitle()
76                 l = s and s.getSubtitleList() or [ ]
77                 return l
78
79         def subtitlesEnabled(self):
80                 return self.infobar.subtitles_enabled
81
82         def enableSubtitle(self, subtitles):
83                 if self.infobar.selected_subtitle != subtitles:
84                         self.infobar.subtitles_enabled = False
85                         self.infobar.selected_subtitle = subtitles
86                         self.infobar.subtitles_enabled = True
87
88         def disableSubtitles(self):
89                 self.infobar.subtitles_enabled = False
90
91         def keyLeft(self):
92                 ConfigListScreen.keyLeft(self)
93
94         def keyRight(self):
95                 ConfigListScreen.keyRight(self)
96
97         def ok(self):
98                 if len(self.list):
99                         cur = self["config"].getCurrent()
100                         self.enableSubtitle(cur[2])
101                 self.close(1)
102
103         def cancel(self):
104                 self.close()