7f11b958ff6e12d88e8e609bb7733bac9242329e
[watersofshiloah] / src / windows / conferences.py
1 import logging
2
3 import gobject
4 import gtk
5
6 import hildonize
7 import util.go_utils as go_utils
8 import util.misc as misc_utils
9 import banners
10 import stream_index
11
12 import windows
13
14
15 _moduleLogger = logging.getLogger(__name__)
16
17
18 class ConferencesWindow(windows._base.ListWindow):
19
20         def __init__(self, app, player, store, node):
21                 windows._base.ListWindow.__init__(self, app, player, store, node)
22                 self._window.set_title(self._node.title)
23
24         @classmethod
25         def _get_columns(cls):
26                 yield gobject.TYPE_PYOBJECT, None
27
28                 textrenderer = gtk.CellRendererText()
29                 textrenderer.set_property("scale", 0.75)
30                 column = gtk.TreeViewColumn("Date")
31                 column.set_property("sizing", gtk.TREE_VIEW_COLUMN_FIXED)
32                 column.set_property("fixed-width", 96)
33                 column.pack_start(textrenderer, expand=True)
34                 column.add_attribute(textrenderer, "text", 1)
35                 yield gobject.TYPE_STRING, column
36
37                 textrenderer = gtk.CellRendererText()
38                 hildonize.set_cell_thumb_selectable(textrenderer)
39                 column = gtk.TreeViewColumn("Conference")
40                 column.set_property("sizing", gtk.TREE_VIEW_COLUMN_FIXED)
41                 column.pack_start(textrenderer, expand=True)
42                 column.add_attribute(textrenderer, "text", 2)
43                 yield gobject.TYPE_STRING, column
44
45         def _refresh(self):
46                 windows._base.ListWindow._refresh(self)
47                 self._node.get_children(
48                         self._on_conferences,
49                         self._on_error,
50                 )
51
52         @misc_utils.log_exception(_moduleLogger)
53         def _on_conferences(self, programs):
54                 if self._isDestroyed:
55                         _moduleLogger.info("Download complete but window destroyed")
56                         return
57
58                 self._hide_loading()
59                 for programNode in programs:
60                         program = programNode.get_properties()
61                         row = programNode, program["title"], program["full_title"]
62                         self._model.append(row)
63
64                 self._select_row()
65
66         @misc_utils.log_exception(_moduleLogger)
67         def _on_error(self, exception):
68                 self._hide_loading()
69                 self._errorBanner.push_message(str(exception))
70
71         def _window_from_node(self, node):
72                 sessionsWindow = ConferenceSessionsWindow(self._app, self._player, self._store, node)
73                 sessionsWindow.window.set_modal(True)
74                 sessionsWindow.window.set_transient_for(self._window)
75                 sessionsWindow.window.set_default_size(*self._window.get_size())
76                 sessionsWindow.connect("quit", self._on_quit)
77                 sessionsWindow.connect("home", self._on_home)
78                 sessionsWindow.connect("jump-to", self._on_jump)
79                 sessionsWindow.show()
80                 return sessionsWindow
81
82
83 gobject.type_register(ConferencesWindow)
84
85
86 class ConferenceSessionsWindow(windows._base.ListWindow):
87
88         def __init__(self, app, player, store, node):
89                 windows._base.ListWindow.__init__(self, app, player, store, node)
90                 self._window.set_title(self._node.title)
91
92         @classmethod
93         def _get_columns(cls):
94                 yield gobject.TYPE_PYOBJECT, None
95
96                 textrenderer = gtk.CellRendererText()
97                 hildonize.set_cell_thumb_selectable(textrenderer)
98                 column = gtk.TreeViewColumn("Session")
99                 column.set_property("sizing", gtk.TREE_VIEW_COLUMN_FIXED)
100                 column.pack_start(textrenderer, expand=True)
101                 column.add_attribute(textrenderer, "text", 1)
102                 yield gobject.TYPE_STRING, column
103
104         def _refresh(self):
105                 windows._base.ListWindow._refresh(self)
106                 self._node.get_children(
107                         self._on_conference_sessions,
108                         self._on_error,
109                 )
110
111         @misc_utils.log_exception(_moduleLogger)
112         def _on_conference_sessions(self, programs):
113                 if self._isDestroyed:
114                         _moduleLogger.info("Download complete but window destroyed")
115                         return
116
117                 self._hide_loading()
118                 for programNode in programs:
119                         program = programNode.get_properties()
120                         row = programNode, program["title"]
121                         self._model.append(row)
122
123                 self._select_row()
124
125         @misc_utils.log_exception(_moduleLogger)
126         def _on_error(self, exception):
127                 self._hide_loading()
128                 self._errorBanner.push_message(str(exception))
129
130         def _window_from_node(self, node):
131                 sessionsWindow = ConferenceTalksWindow(self._app, self._player, self._store, node)
132                 sessionsWindow.window.set_modal(True)
133                 sessionsWindow.window.set_transient_for(self._window)
134                 sessionsWindow.window.set_default_size(*self._window.get_size())
135                 sessionsWindow.connect("quit", self._on_quit)
136                 sessionsWindow.connect("home", self._on_home)
137                 sessionsWindow.connect("jump-to", self._on_jump)
138                 sessionsWindow.show()
139                 return sessionsWindow
140
141
142 gobject.type_register(ConferenceSessionsWindow)
143
144
145 class ConferenceTalksWindow(windows._base.ListWindow):
146
147         def __init__(self, app, player, store, node):
148                 windows._base.ListWindow.__init__(self, app, player, store, node)
149                 self._window.set_title(self._node.title)
150
151         @classmethod
152         def _get_columns(cls):
153                 yield gobject.TYPE_PYOBJECT, None
154
155                 textrenderer = gtk.CellRendererText()
156                 column = gtk.TreeViewColumn("Talk")
157                 column.set_property("sizing", gtk.TREE_VIEW_COLUMN_FIXED)
158                 column.pack_start(textrenderer, expand=True)
159                 column.add_attribute(textrenderer, "markup", 1)
160                 yield gobject.TYPE_STRING, column
161
162         def _refresh(self):
163                 windows._base.ListWindow._refresh(self)
164                 self._node.get_children(
165                         self._on_conference_talks,
166                         self._on_error,
167                 )
168
169         @misc_utils.log_exception(_moduleLogger)
170         def _on_conference_talks(self, programs):
171                 if self._isDestroyed:
172                         _moduleLogger.info("Download complete but window destroyed")
173                         return
174
175                 self._hide_loading()
176                 for programNode in programs:
177                         program = programNode.get_properties()
178                         row = programNode, "%s\n<small>%s</small>" % (programNode.title, programNode.subtitle)
179                         self._model.append(row)
180
181                 self._select_row()
182
183         @misc_utils.log_exception(_moduleLogger)
184         def _on_error(self, exception):
185                 self._hide_loading()
186                 self._errorBanner.push_message(str(exception))
187
188         def _window_from_node(self, node):
189                 sessionsWindow = ConferenceTalkWindow(self._app, self._player, self._store, node)
190                 sessionsWindow.window.set_modal(True)
191                 sessionsWindow.window.set_transient_for(self._window)
192                 sessionsWindow.window.set_default_size(*self._window.get_size())
193                 sessionsWindow.connect("quit", self._on_quit)
194                 sessionsWindow.connect("home", self._on_home)
195                 sessionsWindow.connect("jump-to", self._on_jump)
196                 sessionsWindow.show()
197                 return sessionsWindow
198
199
200 gobject.type_register(ConferenceTalksWindow)
201
202
203 class ConferenceTalkWindow(windows._base.PresenterWindow):
204
205         def __init__(self, app, player, store, node):
206                 windows._base.PresenterWindow.__init__(self, app, player, store, node)
207
208         def _get_background(self):
209                 return self._store.STORE_LOOKUP["conference_background"]
210
211
212 gobject.type_register(ConferenceTalkWindow)