1 |
cvs_id = "$Id$" |
cvs_id = "$Id$" |
2 |
|
|
3 |
import cPickle |
import cPickle, os, traceback |
|
import os |
|
|
import traceback |
|
4 |
from urlparse import urlparse |
from urlparse import urlparse |
5 |
|
from error import log |
6 |
|
|
7 |
import straw |
import straw |
8 |
from error import log |
import pygtk; pygtk.require('2.0') |
9 |
|
import gconf |
10 |
|
|
11 |
|
GCONF_STRAW_ROOT = "/apps/straw" |
12 |
|
GCONF_STRAW_POLL_FREQ = GCONF_STRAW_ROOT + "/general/poll_frequency" |
13 |
|
GCONF_STRAW_ITEMS_STORED = GCONF_STRAW_ROOT + "/general/number_of_items_stored" |
14 |
|
GCONF_STRAW_ITEM_ORDER = GCONF_STRAW_ROOT + "/general/item_order_newest" |
15 |
|
GCONF_STRAW_OFFLINE = GCONF_STRAW_ROOT + "/general/offline" |
16 |
|
GCONF_STRAW_LAST_POLL = GCONF_STRAW_ROOT + "/general/last_poll" |
17 |
|
GCONF_STRAW_WINDOW_H = GCONF_STRAW_ROOT + "/ui/window_height" |
18 |
|
GCONF_STRAW_WINDOW_W = GCONF_STRAW_ROOT + "/ui/window_width" |
19 |
|
GCONF_STRAW_MAIN_PANE_POSITION = GCONF_STRAW_ROOT + "/ui/main_pane_position" |
20 |
|
GCONF_STRAW_SUB_PANE_POSITION = GCONF_STRAW_ROOT + "/ui/sub_pane_position" |
21 |
|
|
22 |
def ensure_directory(strawdir): |
def ensure_directory(strawdir): |
23 |
if os.path.exists(strawdir): |
if os.path.exists(strawdir): |
27 |
os.mkdir(strawdir) |
os.mkdir(strawdir) |
28 |
return 1 |
return 1 |
29 |
|
|
|
# using gconf seemed a bit too painful for this, seems it's suitable |
|
|
# for fixed configuration options but not really much else |
|
30 |
class ConfigSaver: |
class ConfigSaver: |
31 |
def __init__(self): |
def __init__(self): |
32 |
straw.config.signal_connect( |
self.client = StrawGConf(GCONF_STRAW_ROOT) |
|
straw.LocalConfigOptionSignal, self.notify_change) |
|
33 |
self._config_file = os.path.join(straw.config._straw_dir, "config") |
self._config_file = os.path.join(straw.config._straw_dir, "config") |
34 |
|
straw.config.signal_connect(straw.LocalConfigOptionSignal,self.notify_change) |
35 |
self.load_config() |
self.load_config() |
36 |
return |
return |
37 |
|
|
49 |
nf.undump(feed) |
nf.undump(feed) |
50 |
fl.append(nf) |
fl.append(nf) |
51 |
straw.config.feeds = fl |
straw.config.feeds = fl |
52 |
straw.config.poll_frequency = cf.get('poll_frequency', 1200) |
straw.config.feed_id_seq = cf.get('feed_id_seq',0) |
|
straw.config.number_of_items_stored = cf.get( |
|
|
'number_of_items_stored', 30) |
|
|
straw.config.item_order = cf.get('item_order', 1) |
|
|
straw.config.feed_id_seq = cf.get('feed_id_seq', 0) |
|
|
straw.config.main_window_size = cf.get('main_window_size', (700, 550)) |
|
|
straw.config.main_pane_position = cf.get('main_pane_position', 200) |
|
|
straw.config.sub_pane_position = cf.get('sub_pane_position', 120) |
|
|
straw.config.offline = cf.get('offline', 0) |
|
|
# config.poll_spread |
|
53 |
f.close() |
f.close() |
54 |
|
|
55 |
|
straw.config.poll_frequency = self.client.get_int(GCONF_STRAW_POLL_FREQ) |
56 |
|
straw.config.number_of_items_stored = self.client.get_int(GCONF_STRAW_ITEMS_STORED) |
57 |
|
straw.config.item_order = self.client.get_bool(GCONF_STRAW_ITEM_ORDER) |
58 |
|
straw.config.main_window_size = (self.client.get_int(GCONF_STRAW_WINDOW_W),self.client.get_int(GCONF_STRAW_WINDOW_H)) |
59 |
|
straw.config.main_pane_position = self.client.get_int(GCONF_STRAW_MAIN_PANE_POSITION) |
60 |
|
straw.config.sub_pane_position = self.client.get_int(GCONF_STRAW_SUB_PANE_POSITION) |
61 |
|
straw.config.offline = self.client.get_bool(GCONF_STRAW_OFFLINE) |
62 |
|
straw.config.last_poll = self.client.get_int(GCONF_STRAW_LAST_POLL) |
63 |
|
# config.poll_spread |
64 |
return |
return |
65 |
|
|
66 |
def save_config(self): |
def save_config(self): |
69 |
for f in straw.config.feeds: |
for f in straw.config.feeds: |
70 |
l.append(f.dump()) |
l.append(f.dump()) |
71 |
cf['feeds'] = l |
cf['feeds'] = l |
|
cf['poll_frequency'] = straw.config.poll_frequency |
|
|
cf['number_of_items_stored'] = straw.config.number_of_items_stored |
|
|
cf['item_order'] = straw.config.item_order |
|
72 |
cf['feed_id_seq'] = straw.config.feed_id_seq |
cf['feed_id_seq'] = straw.config.feed_id_seq |
|
cf['main_window_size'] = straw.config.main_window_size |
|
|
cf['main_pane_position'] = straw.config.main_pane_position |
|
|
cf['sub_pane_position'] = straw.config.sub_pane_position |
|
|
cf['offline'] = straw.config.offline |
|
73 |
pickle_file = open(self._config_file, 'w') |
pickle_file = open(self._config_file, 'w') |
74 |
cPickle.dump(cf, pickle_file, 1) |
cPickle.dump(cf, pickle_file, 1) |
75 |
pickle_file.close() |
pickle_file.close() |
125 |
GCONF_HTTP_PROXY_PASSWORD = GCONF_HTTP_PROXY_ROOT + "/authentication_password" |
GCONF_HTTP_PROXY_PASSWORD = GCONF_HTTP_PROXY_ROOT + "/authentication_password" |
126 |
|
|
127 |
def __init__(self): |
def __init__(self): |
|
try: |
|
|
import gconf |
|
|
except ImportError: |
|
|
log(_("No gconf module installed, not reading proxy configuration from there")) |
|
|
self._config_working = 0 |
|
|
return |
|
128 |
client = gconf.client_get_default() |
client = gconf.client_get_default() |
129 |
self._config_working = client.dir_exists(self.GCONF_PROXY_ROOT) and client.dir_exists(self.GCONF_HTTP_PROXY_ROOT) |
self._config_working = client.dir_exists(self.GCONF_PROXY_ROOT) and client.dir_exists(self.GCONF_HTTP_PROXY_ROOT) |
130 |
if not self._config_working: |
if not self._config_working: |
235 |
|
|
236 |
class Config(object, straw.SignalEmitter): |
class Config(object, straw.SignalEmitter): |
237 |
def __init__(self): |
def __init__(self): |
238 |
|
self.client = StrawGConf(GCONF_STRAW_ROOT) |
239 |
straw.SignalEmitter.__init__(self) |
straw.SignalEmitter.__init__(self) |
240 |
self.initialize_slots(straw.FeedsChangedSignal, |
self.initialize_slots(straw.FeedsChangedSignal, |
|
straw.PollFrequencyChangedSignal, |
|
|
straw.NumberOfItemsStoredChangedSignal, |
|
241 |
straw.ItemOrderChangedSignal, |
straw.ItemOrderChangedSignal, |
242 |
straw.OfflineModeChangedSignal) |
straw.OfflineModeChangedSignal, |
243 |
self._poll_frequency = 1200 |
straw.NumberOfItemsStoredChangedSignal) |
244 |
self._poll_spread = 0 |
#self._poll_spread = 0 |
245 |
self._feed_id_seq = 0 |
self._feed_id_seq = 0 |
246 |
|
self._straw_dir = os.path.join(os.getenv("HOME"), ".straw") |
247 |
self._feeds = straw.FeedList() |
self._feeds = straw.FeedList() |
248 |
self._feeds.signal_connect(straw.FeedsChangedSignal, |
self._feeds.signal_connect(straw.FeedsChangedSignal, |
249 |
self.feeds_changed) |
self.feeds_changed) |
|
self._number_of_items_stored = 30 |
|
|
self._item_order = 1 |
|
|
self._straw_dir = os.path.join(os.getenv("HOME"), ".straw") |
|
|
self._main_window_size = (700, 550) |
|
|
self._main_pane_position = 200 |
|
|
self._sub_pane_position = 120 |
|
|
self._offline = 0 |
|
250 |
pcchoices = (GconfProxyConfig, EnvironmentProxyConfig, NullProxyConfig) |
pcchoices = (GconfProxyConfig, EnvironmentProxyConfig, NullProxyConfig) |
251 |
for p in pcchoices: |
for p in pcchoices: |
252 |
self._proxy_config = p() |
self._proxy_config = p() |
263 |
# and the rest of the stuff |
# and the rest of the stuff |
264 |
def feeds_changed(self, signal): |
def feeds_changed(self, signal): |
265 |
self.emit_signal(straw.FeedsChangedSignal(self)) |
self.emit_signal(straw.FeedsChangedSignal(self)) |
266 |
|
|
267 |
def set_feeds(self, feeds): |
def set_feeds(self, feeds): |
268 |
self._feeds = straw.FeedList(feeds) |
self._feeds = straw.FeedList(feeds) |
269 |
self._feeds.signal_connect(straw.FeedsChangedSignal, |
self._feeds.signal_connect(straw.FeedsChangedSignal, |
277 |
feeds = property(get_feeds, set_feeds, None, "Feeds") |
feeds = property(get_feeds, set_feeds, None, "Feeds") |
278 |
|
|
279 |
def set_poll_frequency(self, poll_frequency): |
def set_poll_frequency(self, poll_frequency): |
280 |
self._poll_frequency = poll_frequency |
self.client.set_int(GCONF_STRAW_POLL_FREQ, poll_frequency) |
|
self.emit_signal(straw.PollFrequencyChangedSignal(self)) |
|
281 |
return |
return |
282 |
|
|
283 |
def get_poll_frequency(self): |
def get_poll_frequency(self): |
284 |
return self._poll_frequency |
return self.client.get_int(GCONF_STRAW_POLL_FREQ) |
285 |
|
|
286 |
poll_frequency = property(get_poll_frequency, set_poll_frequency, None, |
poll_frequency = property(get_poll_frequency, set_poll_frequency, None, |
287 |
"Polling frequency") |
"Polling frequency") |
288 |
|
|
289 |
|
def set_last_poll(self, last_poll): |
290 |
|
self.client.set_int(GCONF_STRAW_LAST_POLL, last_poll) |
291 |
|
return |
292 |
|
|
293 |
|
def get_last_poll(self): |
294 |
|
return self.client.get_int(GCONF_STRAW_LAST_POLL) |
295 |
|
|
296 |
|
last_poll = property(get_last_poll, set_last_poll, None, "Last polled") |
297 |
|
|
298 |
def get_number_of_items_stored(self): |
def get_number_of_items_stored(self): |
299 |
return self._number_of_items_stored |
return self.client.get_int(GCONF_STRAW_ITEMS_STORED) |
300 |
|
|
301 |
def set_number_of_items_stored(self, num): |
def set_number_of_items_stored(self, num): |
302 |
self._number_of_items_stored = num |
self.client.set_int(GCONF_STRAW_ITEMS_STORED, num) |
303 |
self.emit_signal(straw.NumberOfItemsStoredChangedSignal(self)) |
self.emit_signal(straw.NumberOfItemsStoredChangedSignal(self)) |
304 |
|
return |
305 |
|
|
306 |
number_of_items_stored = property(get_number_of_items_stored, |
number_of_items_stored = property(get_number_of_items_stored, |
307 |
set_number_of_items_stored, None, |
set_number_of_items_stored, None, |
308 |
"Number of items to store per feed") |
"Number of items to store per feed") |
309 |
|
|
|
def get_item_order(self): |
|
|
return self._item_order |
|
|
|
|
310 |
def set_item_order(self, order): |
def set_item_order(self, order): |
311 |
self._item_order = order |
self.client.set_bool(GCONF_STRAW_ITEM_ORDER, order) |
312 |
self.emit_signal(straw.ItemOrderChangedSignal(self)) |
self.emit_signal(straw.ItemOrderChangedSignal(self)) |
313 |
|
return |
314 |
|
|
315 |
|
def get_item_order(self): |
316 |
|
return self.client.get_bool(GCONF_STRAW_ITEM_ORDER) |
317 |
|
|
318 |
item_order = property(get_item_order, set_item_order, "Ordering of items") |
item_order = property(get_item_order, set_item_order, "Ordering of items") |
319 |
|
|
328 |
feed_id_seq = property(get_feed_id_seq, set_feed_id_seq, None, "") |
feed_id_seq = property(get_feed_id_seq, set_feed_id_seq, None, "") |
329 |
|
|
330 |
def set_main_window_size(self, size): |
def set_main_window_size(self, size): |
331 |
if size != self._main_window_size: |
self.client.set_int(GCONF_STRAW_WINDOW_W,size[0]) |
332 |
self._main_window_size = size |
self.client.set_int(GCONF_STRAW_WINDOW_H,size[1]) |
333 |
self.emit_signal(straw.MainWindowSizeChangedSignal(self)) |
self.emit_signal(straw.MainWindowSizeChangedSignal(self)) |
334 |
|
|
335 |
def get_main_window_size(self): |
def get_main_window_size(self): |
336 |
return self._main_window_size |
slist = (self.client.get_int(GCONF_STRAW_WINDOW_W),self.client.get_int(GCONF_STRAW_WINDOW_H)) |
337 |
|
return slist |
338 |
|
|
339 |
main_window_size = property(get_main_window_size, set_main_window_size, "") |
main_window_size = property(get_main_window_size, set_main_window_size, "") |
340 |
|
|
|
def get_offline(self): |
|
|
return self._offline |
|
|
|
|
341 |
def set_offline(self, mode): |
def set_offline(self, mode): |
342 |
if self._offline != mode: |
_offline = straw.config.offline |
343 |
self._offline = mode |
if _offline != mode: |
344 |
|
self.client.set_bool(GCONF_STRAW_OFFLINE, mode) |
345 |
self.emit_signal(straw.OfflineModeChangedSignal(self)) |
self.emit_signal(straw.OfflineModeChangedSignal(self)) |
346 |
|
|
347 |
|
def get_offline(self): |
348 |
|
return self.client.get_bool(GCONF_STRAW_OFFLINE) |
349 |
|
|
350 |
offline = property(get_offline, set_offline, None, "") |
offline = property(get_offline, set_offline, None, "") |
351 |
|
|
352 |
def set_main_pane_position(self, position): |
def set_main_pane_position(self, position): |
353 |
if position != self._main_pane_position: |
#if position != self._main_pane_position: |
354 |
self._main_pane_position = position |
self.client.set_int(GCONF_STRAW_MAIN_PANE_POSITION, position) |
355 |
self.emit_signal(straw.MainPanePositionChangedSignal(self)) |
self.emit_signal(straw.MainPanePositionChangedSignal(self)) |
356 |
|
|
357 |
def get_main_pane_position(self): |
def get_main_pane_position(self): |
358 |
return self._main_pane_position |
return self.client.get_int(GCONF_STRAW_MAIN_PANE_POSITION) |
359 |
|
|
360 |
main_pane_position = property(get_main_pane_position, set_main_pane_position, None, "") |
main_pane_position = property(get_main_pane_position, set_main_pane_position, None, "") |
361 |
|
|
362 |
def set_sub_pane_position(self, position): |
def set_sub_pane_position(self, position): |
363 |
if position != self._sub_pane_position: |
#if position != self._sub_pane_position: |
364 |
self._sub_pane_position = position |
self.client.set_int(GCONF_STRAW_SUB_PANE_POSITION, position) |
365 |
self.emit_signal(straw.SubPanePositionChangedSignal(self)) |
self.emit_signal(straw.SubPanePositionChangedSignal(self)) |
366 |
|
|
367 |
def get_sub_pane_position(self): |
def get_sub_pane_position(self): |
368 |
return self._sub_pane_position |
return self.client.get_int(GCONF_STRAW_SUB_PANE_POSITION) |
369 |
|
|
370 |
sub_pane_position = property(get_sub_pane_position, set_sub_pane_position, None, "") |
sub_pane_position = property(get_sub_pane_position, set_sub_pane_position, None, "") |
371 |
|
|
372 |
|
class StrawGConf: |
373 |
|
def __init__(self, gconf_root_dir): |
374 |
|
self.client = gconf.client_get_default() |
375 |
|
self.client.add_dir(gconf_root_dir, gconf.CLIENT_PRELOAD_NONE) |
376 |
|
return |
377 |
|
|
378 |
|
def set_int(self, key, data): |
379 |
|
self.client.set_int(key, data) |
380 |
|
return |
381 |
|
|
382 |
|
def get_int(self, key): |
383 |
|
val = self.client.get_int(key) |
384 |
|
return val |
385 |
|
|
386 |
|
def set_bool(self, key, data): |
387 |
|
self.client.set_bool(key, data) |
388 |
|
return |
389 |
|
|
390 |
|
def get_bool(self, key): |
391 |
|
val = self.client.get_bool(key) |
392 |
|
return val |