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