1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 import os
19 import gettext
20 import time
21
22 import gtk
23
24 from flumotion.common import errors
25 from flumotion.common import format as formatting
26
27 from flumotion.component.base.admin_gtk import BaseAdminGtk
28 from flumotion.component.base.baseadminnode import BaseAdminGtkNode
29
30 from flumotion.common.tz import LOCAL, UTC
31
32 _ = gettext.gettext
33
34 __version__ = "$Rev$"
35
36 (
37 COLUMN_TSTAMP,
38 COLUMN_FILENAME,
39 COLUMN_CREATED,
40 COLUMN_SIZE,
41 COLUMN_LOCATION,
42 ) = range(5)
43
44 from kiwi.ui import objectlist
45
46
48
50 """
51 @param when: a naive datetime representing UTC
52 @type when: L{datetime.datetime}
53 @type which: str
54 @type what: str
55 """
56 self.when = when
57
58 when = when.replace(tzinfo=UTC).astimezone(LOCAL)
59
60 self.whenLocal = formatting.formatTimeStamp(when.timetuple())
61 self.which = which
62 self.what = what
63
64
66
68 objectlist.ObjectList.__init__(self, [
69 objectlist.Column("whenLocal", title=_("When")),
70 objectlist.Column("which", title=_("Which")),
71 objectlist.Column("what", title=_("What")),
72 ])
73 self._parent = parent
74 self.setUIState(uiState)
75
77 self._uiState = uiState
78 self.clear()
79 for pointTuple in uiState.get('next-points'):
80 self.appendTuple(pointTuple)
81
85
87 for point in self:
88 if (point.when, point.which, point.what) == pointTuple:
89 self.remove(point)
90
91
93 gladeFile = os.path.join('flumotion', 'component', 'consumers',
94 'disker', 'disker.glade')
95
96 currentFilenameLabel = None
97 currentFilenamePendingText = None
98 stopbutton = None
99 hasIcal = False
100
114
118
120 self.warning("Failure %s changing filename: %s" % (
121 failure.type, failure.getErrorMessage()))
122 return None
123
127
129 self.warning("Failure %s stopping recording: %s" % (
130 failure.type, failure.getErrorMessage()))
131 return None
132
138
158
160 if key == 'next-points':
161 self._pointList.appendTuple(value)
162
164 if key == 'next-points':
165 self._pointList.removeTuple(value)
166
183
190
201
203 self.warning("Failure %s scheduling recordings: %s" % (
204 failure.type, failure.getErrorMessage()))
205 return None
206
207
209 gladeFile = os.path.join('flumotion', 'component', 'consumers',
210 'disker', 'status.glade')
211
212 _iters = {}
213
226
227 self.widget = self.wtree.get_widget('status-widget')
228 self.diskFreeLabel = self.wtree.get_widget('label-free')
229 self.rotateTypeLabel = self.wtree.get_widget('label-rotation')
230 self.currentFilenameLabel = self.wtree.get_widget('label-current')
231 self._buildFilelist()
232 d = self.callRemote("getUIState")
233 d.addCallback(cb_getUIState)
234
236
237 def getGtkColumn(title, text, visible=True, clickable=True):
238 col = gtk.TreeViewColumn(title,
239 gtk.CellRendererText(),
240 text=text)
241 col.set_property('visible', visible)
242 col.set_property('clickable', clickable)
243 col.set_sort_column_id(text)
244 return col
245
246 self.store = gtk.ListStore(str, str, str, str, str)
247
248 self.store.set_sort_column_id(0, gtk.SORT_DESCENDING)
249 self.tree = self.wtree.get_widget('treeview-filelist')
250 self.tree.append_column(getGtkColumn('tstamp',
251 COLUMN_TSTAMP,
252 visible=False,
253 clickable=False))
254 self.tree.append_column(getGtkColumn('Filename',
255 COLUMN_FILENAME))
256 self.tree.append_column(getGtkColumn('Time created',
257 COLUMN_CREATED))
258 self.tree.append_column(getGtkColumn('Size in bytes',
259 COLUMN_SIZE))
260 self.tree.append_column(getGtkColumn('Location',
261 COLUMN_LOCATION))
262 self.tree.set_rules_hint(True)
263 self.tree.set_model(self.store)
264
266 created = formatting.formatTimeStamp(time.localtime(item[0]))
267 self._iters[item[0]] = self.store.append([str(item[0]),
268 os.path.basename(
269 str(item[1])),
270 created,
271 str(item[2]),
272 str(item[1])])
273
275 if self.diskFreeLabel:
276 df = state.get('disk-free')
277 if df != None:
278 self.diskFreeLabel.set_text(
279 "Available Disk Space: %s" % df)
280
285
291
293 if key == 'filelist':
294 self._append(value)
295
297 if key == 'filelist':
298 i = self._iters[value[0]]
299 if i:
300 self.store.remove(iter)
301 self._iters.pop(value[0])
302
303
314
315 GUIClass = DiskerAdminGtk
316