10 |
|
|
11 |
class PollManager: |
class PollManager: |
12 |
def __init__(self): |
def __init__(self): |
13 |
|
self._lastpoll = -1 |
14 |
|
self._poll_frequency = straw.config.poll_frequency |
15 |
|
straw.config.signal_connect(straw.PollFrequencyChangedSignal, |
16 |
|
self.poll_freq_changed) |
17 |
self.pollers = [] |
self.pollers = [] |
18 |
gtk.timeout_add(10000, self.maybe_poll) |
gtk.timeout_add(10000, self.maybe_poll) |
19 |
|
|
20 |
|
def poll_freq_changed(self, signal): |
21 |
|
self._poll_frequency = signal.sender.poll_frequency |
22 |
|
|
23 |
def maybe_poll(self): |
def maybe_poll(self): |
24 |
time_diff = int(time.time()) - straw.config.last_poll |
now = time.time() |
25 |
try: |
if (self._poll_frequency > 0) and (now - self._lastpoll > self._poll_frequency): |
26 |
assert straw.config.poll_frequency > 0, "Polling Frequency is set to 0" |
self._lastpoll = now |
27 |
if not straw.config.offline and time_diff > straw.config.poll_frequency: |
# avoid polling when offline |
28 |
|
if not straw.config.offline: |
29 |
self.poll() |
self.poll() |
|
except AssertionError: |
|
|
pass |
|
30 |
gtk.timeout_add(10000, self.maybe_poll) |
gtk.timeout_add(10000, self.maybe_poll) |
31 |
|
|
32 |
def poll(self, feed = None): |
def poll(self, feed = None): |
|
# FIXME: notify when offline key has changed |
|
33 |
if straw.config.offline: |
if straw.config.offline: |
34 |
straw.main.show_offline_dialog() |
straw.main.show_offline_dialog() |
35 |
return |
return None |
36 |
straw.main.display_status_message(_("Starting polling")) |
straw.main.display_status_message(_("Starting polling")) |
37 |
if feed: |
if feed: |
38 |
feeds = [feed] |
feeds = [feed] |
39 |
else: |
else: |
40 |
feeds = straw.config.feeds |
feeds = straw.config.feeds |
|
straw.config.last_poll = int(time.time()) |
|
41 |
for f in feeds: |
for f in feeds: |
42 |
if f not in self.pollers: |
if f not in self.pollers: |
43 |
straw.main.display_status_message( |
straw.main.display_status_message( |
61 |
url, user, pw = self._feed.get_access_info() |
url, user, pw = self._feed.get_access_info() |
62 |
parsed = None |
parsed = None |
63 |
if url is None or url == "": |
if url is None or url == "": |
64 |
return 0 |
return None |
65 |
|
|
66 |
headers = {} |
headers = {} |
67 |
if self._feed.previous_etag is not None: |
if self._feed.previous_etag is not None: |
91 |
if status[1] == 304: |
if status[1] == 304: |
92 |
self._feed.router.route_no_data() |
self._feed.router.route_no_data() |
93 |
return 1 |
return 1 |
94 |
if status[1] == 410 or status[1] == 404: |
if status[1] == 410: |
95 |
self._feed.router.set_error(_("Straw was unable to find the feed.")) |
self._feed.router.set_error(_("Cannot found feed.") % status[1]) |
96 |
return 0 |
return None |
97 |
elif status[1] != 200 and status[1] > 299: |
elif status[1] != 200: |
98 |
self._feed.router.set_error(_("Polling feed resulted in abnormal status '%s' (code %d)") % (status[2], status[1])) |
self._feed.router.set_error(_("Polling feed resulted in abnormal status '%s' (code %d)") % (status[2], status[1])) |
99 |
return 0 |
return None |
100 |
parsed = "" |
parsed = None |
101 |
try: |
try: |
102 |
parsed = self._parser.parse(data, self._feed) |
parsed = self._parser.parse(data, self._feed) |
103 |
except straw.RSSParseException, e: |
except straw.RSSParseException, e: |
106 |
except Exception, e: |
except Exception, e: |
107 |
self._feed.error = _( |
self._feed.error = _( |
108 |
"Unknown exception when parsing RSS: %s") % str(e) |
"Unknown exception when parsing RSS: %s") % str(e) |
109 |
return 0 |
return None |
110 |
self._feed.router.route_all(header, parsed) |
self._feed.router.route_all(header, parsed) |
111 |
return 1 |
return 1 |
112 |
|
|