1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import os
23 import gettext
24 import time
25
26 import gtk
27
28 from flumotion.common import errors, format
29
30 from flumotion.component.base.admin_gtk import BaseAdminGtk
31 from flumotion.component.base.baseadminnode import BaseAdminGtkNode
32
33 from flumotion.common.eventcalendar import LOCAL, UTC
34
35 _ = gettext.gettext
36
37 __version__ = "$Rev: 8205 $"
38
39 (
40 COLUMN_TSTAMP,
41 COLUMN_FILENAME,
42 COLUMN_CREATED,
43 COLUMN_SIZE,
44 COLUMN_LOCATION,
45 ) = range(5)
46
47 from kiwi.ui import objectlist
48
49
51
53 """
54 @param when: a naive datetime representing UTC
55 @type when: L{datetime.datetime}
56 @type which: str
57 @type what: str
58 """
59 self.when = when
60
61 when = when.replace(tzinfo=UTC).astimezone(LOCAL)
62
63 self.whenLocal = format.formatTimeStamp(when.timetuple())
64 self.which = which
65 self.what = what
66
67
69
71 objectlist.ObjectList.__init__(self, [
72 objectlist.Column("whenLocal", title=_("When")),
73 objectlist.Column("which", title=_("Which")),
74 objectlist.Column("what", title=_("What")),
75 ])
76 self._parent = parent
77 self.setUIState(uiState)
78
80 self._uiState = uiState
81 self.clear()
82 for pointTuple in uiState.get('next-points'):
83 self.appendTuple(pointTuple)
84
88
90 for point in self:
91 if (point.when, point.which, point.what) == pointTuple:
92 self.remove(point)
93
94
96 gladeFile = os.path.join('flumotion', 'component', 'consumers',
97 'disker', 'disker.glade')
98
99 currentFilenameLabel = None
100 currentFilenamePendingText = None
101 stopbutton = None
102 hasIcal = False
103
117
121
123 self.warning("Failure %s changing filename: %s" % (
124 failure.type, failure.getErrorMessage()))
125 return None
126
130
132 self.warning("Failure %s stopping recording: %s" % (
133 failure.type, failure.getErrorMessage()))
134 return None
135
141
161
163 if key == 'next-points':
164 self._pointList.appendTuple(value)
165
167 if key == 'next-points':
168 self._pointList.removeTuple(value)
169
186
193
204
206 self.warning("Failure %s scheduling recordings: %s" % (
207 failure.type, failure.getErrorMessage()))
208 return None
209
210
212 gladeFile = os.path.join('flumotion', 'component', 'consumers',
213 'disker', 'status.glade')
214
215 _iters = {}
216
229
230 self.widget = self.wtree.get_widget('status-widget')
231 self.diskFreeLabel = self.wtree.get_widget('label-free')
232 self.rotateTypeLabel = self.wtree.get_widget('label-rotation')
233 self.currentFilenameLabel = self.wtree.get_widget('label-current')
234 self._buildFilelist()
235 d = self.callRemote("getUIState")
236 d.addCallback(cb_getUIState)
237
239
240 def getGtkColumn(title, text, visible=True, clickable=True):
241 col = gtk.TreeViewColumn(title,
242 gtk.CellRendererText(),
243 text=text)
244 col.set_property('visible', visible)
245 col.set_property('clickable', clickable)
246 col.set_sort_column_id(text)
247 return col
248
249 self.store = gtk.ListStore(str, str, str, str, str)
250
251 self.store.set_sort_column_id(0, gtk.SORT_DESCENDING)
252 self.tree = self.wtree.get_widget('treeview-filelist')
253 self.tree.append_column(getGtkColumn('tstamp',
254 COLUMN_TSTAMP,
255 visible=False,
256 clickable=False))
257 self.tree.append_column(getGtkColumn('Filename',
258 COLUMN_FILENAME))
259 self.tree.append_column(getGtkColumn('Time created',
260 COLUMN_CREATED))
261 self.tree.append_column(getGtkColumn('Size in bytes',
262 COLUMN_SIZE))
263 self.tree.append_column(getGtkColumn('Location',
264 COLUMN_LOCATION))
265 self.tree.set_rules_hint(True)
266 self.tree.set_model(self.store)
267
269 created = format.formatTimeStamp(time.localtime(item[0]))
270 self._iters[item[0]] = self.store.append([str(item[0]),
271 os.path.basename(
272 str(item[1])),
273 created,
274 str(item[2]),
275 str(item[1])])
276
278 if self.diskFreeLabel:
279 df = state.get('disk-free')
280 if df != None:
281 self.diskFreeLabel.set_text(
282 "Available Disk Space: %s" % df)
283
288
294
296 if key == 'filelist':
297 self._append(value)
298
300 if key == 'filelist':
301 iter = self._iters[value[0]]
302 if iter:
303 self.store.remove(iter)
304 self._iters.pop(value[0])
305
306
317
318 GUIClass = DiskerAdminGtk
319