1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 import gettext
19 import os
20
21 from zope.interface import implements
22 import gtk
23
24 from flumotion.admin.assistant.interfaces import IConsumerPlugin
25 from flumotion.admin.assistant.models import Consumer
26 from flumotion.admin.gtk.basesteps import ConsumerStep
27 from flumotion.ui.fileselector import FileSelectorDialog
28
29 __version__ = "$Rev$"
30 _ = gettext.gettext
31
32 (SIZE_KB,
33 SIZE_MB,
34 SIZE_GB,
35 SIZE_TB) = tuple([1 << (10L*i) for i in range(1, 5)])
36
37 TIME_MINUTE = 60
38 TIME_HOUR = 60*60
39 TIME_DAY = 60*60*24
40 TIME_WEEK = 60*60*24*7
41
42
44 """I am a model representing the configuration file for a
45 Disk consumer.
46
47 @ivar has_time: if rotation should be done based on time
48 @ivar has_size: if rotation should be done based on size
49 @ivar time_unit: the selected size unit,
50 size will be multiplied by this value when saved
51 @ivar size_unit: the selected time unit,
52 time will be multiplied by this value when saved
53 """
54 componentType = 'disk-consumer'
55 prefix = 'disk'
56
68
70 if self.has_time:
71 return 'time'
72 elif self.has_size:
73 return 'size'
74 else:
75 return 'none'
76
77
78
88
89
91 gladeFile = os.path.join(os.path.dirname(os.path.abspath(__file__)),
92 'wizard.glade')
93 icon = 'kcmdevices.png'
94
98
99
100
103
104
105
107 self.directory.data_type = str
108 self.has_size.data_type = bool
109 self.has_time.data_type = bool
110 self.size.data_type = int
111 self.size_unit.data_type = long
112 self.start_recording.data_type = bool
113 self.time.data_type = int
114 self.time_unit.data_type = int
115
116 self.size_unit.prefill([
117 (_('kB'), SIZE_KB),
118 (_('MB'), SIZE_MB),
119 (_('GB'), SIZE_GB),
120 (_('TB'), SIZE_TB),
121 ])
122 self.time_unit.prefill([
123 (_('minute(s)'), TIME_MINUTE),
124 (_('hour(s)'), TIME_HOUR),
125 (_('day(s)'), TIME_DAY),
126 (_('week(s)'), TIME_WEEK)])
127 self.time_unit.select(TIME_HOUR)
128
129 self.add_proxy(self.model,
130 ['has_size',
131 'has_time',
132 'rotate',
133 'size_unit',
134 'time_unit',
135 'time',
136 'size'])
137
138 self._proxy = self.add_proxy(self.model.properties,
139 ['directory',
140 'start_recording'])
141
145
146
147
149 rotate = self.rotate.get_active()
150 self.has_size.set_sensitive(rotate)
151 self.has_time.set_sensitive(rotate)
152
153 hasSize = rotate and self.has_size.get_active()
154 self.size.set_sensitive(hasSize)
155 self.size_unit.set_sensitive(hasSize)
156 self.model.has_size = hasSize
157
158 hasTime = rotate and self.has_time.get_active()
159 self.time.set_sensitive(hasTime)
160 self.time_unit.set_sensitive(hasTime)
161 self.model.has_time = hasTime
162
170
171 def deleteEvent(fs, event):
172 pass
173 fs = FileSelectorDialog(self.wizard.window,
174 self.wizard.getAdminModel())
175 fs.connect('response', response)
176 fs.connect('delete-event', deleteEvent)
177 fs.selector.setWorkerName(self.model.worker)
178 fs.setDirectory(self.model.properties.directory)
179 fs.show_all()
180
181
182
185
188
191
194
195
197 name = 'Disk (audio & video)'
198 title = _('Disk (Audio and Video)')
199 sidebarName = _('Disk Audio/Video')
200
201
202
205
206
208 name = 'Disk (audio only)'
209 title = _('Disk (Audio Only)')
210 sidebarName = _('Disk Audio')
211
212
213
216
217
219 name = 'Disk (video only)'
220 title = _('Disk (Video Only)')
221 sidebarName = _('Disk Video')
222
223
224
227
228
242