/[straw]/straw/src/lib/PollManager.py
ViewVC logotype

Diff of /straw/src/lib/PollManager.py

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.26 by jmalonzo, Tue Sep 23 23:51:01 2003 UTC revision 1.27 by jmalonzo, Mon Oct 20 07:37:35 2003 UTC
# Line 3  cvs_id = "$Id$" Line 3  cvs_id = "$Id$"
3  import straw  import straw
4  import time  import time
5  import gtk  import gtk
 from error import log, logtb  
 from urllib import quote as urlquote  
 import traceback  
6  import socket  import socket
7    
8  class PollManager:  class PollManager:
# Line 14  class PollManager: Line 11  class PollManager:
11          gtk.timeout_add(10000, self.maybe_poll)          gtk.timeout_add(10000, self.maybe_poll)
12    
13      def maybe_poll(self):      def maybe_poll(self):
14            self.poll_network()
15    
16          time_diff = int(time.time()) - straw.config.last_poll          time_diff = int(time.time()) - straw.config.last_poll
17          try:  
18              assert straw.config.poll_frequency > 0, "Polling Frequency is set to 0"          if not straw.config.offline and time_diff > straw.config.poll_frequency:
19              if not straw.config.offline and time_diff > straw.config.poll_frequency:              self.poll()
20                  self.poll()  
21          except AssertionError:          gtk.timeout_add(straw.NetworkConstants.POLL_INTERVAL, self.maybe_poll)
             pass  
         gtk.timeout_add(10000, self.maybe_poll)  
22    
23      def poll(self, feed = None):      def poll(self, feed = None):
         # FIXME: notify when offline key has changed  
24          if straw.config.offline:          if straw.config.offline:
             e_title = "Unable to Poll Feeds"  
             e_body = "You are currently offline. You have to be online to be able to poll feeds."  
25              if feed is not None:              if feed is not None:
26                    e_title = _("Unable to Poll %s") % feed.title
27                    e_body = _("You are currently offline. You have to be online to be able to poll this feed.")
28                  straw.hig_alert.reportOfflineStatus(e_title, e_body, feed)                  straw.hig_alert.reportOfflineStatus(e_title, e_body, feed)
                 return  
29              else:              else:
30                    e_title = "Unable to Poll Feeds"
31                    e_body = "You are currently offline. You have to be online to be able to poll feeds."
32                  straw.hig_alert.reportOfflineStatus(e_title, e_body)                  straw.hig_alert.reportOfflineStatus(e_title, e_body)
                 return  
33    
34          straw.main.display_status_message(_("Starting polling"))              return 0
35    
36          if feed:          if feed:
37              feeds = [feed]              feeds = [feed]
38          else:          else:
39              feeds = straw.config.feeds              feeds = straw.config.feeds
40              straw.config.last_poll = int(time.time())              straw.config.last_poll = int(time.time())
41    
42            straw.main.display_status_message(_("Polling Feeds..."))
43    
44          for f in feeds:          for f in feeds:
45              if f not in self.pollers:              self.pollers.append(f)
46                  straw.main.display_status_message(              p = Poller(f, self)
47                      _("Polling %s...") % f.title)              p.poll()
48                  self.pollers.append(f)  
49                  p = Poller(f, self)      def poll_network(self):
50                  p.poll()          try:
51                straw.URLFetch.connection_manager.poll(straw.NetworkConstants.POLL_TIMEOUT)
52            except socket.error:
53                straw.config.offline = not straw.config.offline
54                straw.hig_alert.reportOfflineStatus("Offline", "Poll Error")
55    
56      def poller_finished(self, feed):      def poller_finished(self, feed):
57          self.pollers.remove(feed)          self.pollers.remove(feed)
58    
59  class Poller:  class Poller:
     _parser = straw.SummaryParser()  
60      _parsermp = straw.SummaryParserMP()      _parsermp = straw.SummaryParserMP()
61    
62      def __init__(self, feed, pm):      def __init__(self, feed, pm):
# Line 67  class Poller: Line 70  class Poller:
70              return 0              return 0
71    
72          headers = {}          headers = {}
73          if self._feed.previous_etag is not None:          if self._feed.previous_etag is not None or self._feed.previous_etag != "":
74              headers['If-None-Match'] = self._feed.previous_etag              headers['If-None-Match'] = self._feed.previous_etag
75          try:          try:
76              pc = straw.URLFetch.connection_manager.request(              pc = straw.URLFetch.connection_manager.request(
# Line 91  class Poller: Line 94  class Poller:
94      def update_feed(self, status, header, data):      def update_feed(self, status, header, data):
95          straw.main.display_status_message(          straw.main.display_status_message(
96              _("Parsing data for feed %s...") % self._feed.title)              _("Parsing data for feed %s...") % self._feed.title)
97    
98          if status[1] == 304:          if status[1] == 304:
99              self._feed.router.route_no_data()              self._feed.router.route_no_data()
100              return 1              return 1
# Line 100  class Poller: Line 104  class Poller:
104          elif status[1] != 200 and status[1] > 299:          elif status[1] != 200 and status[1] > 299:
105              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]))
106              return 0              return 0
107    
108          parsed = ""          parsed = ""
109    
110          try:          try:
             parsed = self._parser.parse(data, self._feed)  
         except straw.RSSParseException, e:  
111              parsed = self._parsermp.parse(data, self._feed)              parsed = self._parsermp.parse(data, self._feed)
             parsed.invalid_rss = 1  
112          except Exception, e:          except Exception, e:
113              self._feed.error = _(              self._feed.error = _("Unknown exception when parsing RSS: %s") % str(e)
                 "Unknown exception when parsing RSS: %s") % str(e)  
114              return 0              return 0
115    
116          self._feed.router.route_all(header, parsed)          self._feed.router.route_all(header, parsed)
117          return 1          return 1
118    
# Line 128  class Poller: Line 131  class Poller:
131          (oldloc, u, p) = self._feed.access_info          (oldloc, u, p) = self._feed.access_info
132          self._feed.access_info = (location, u, p)          self._feed.access_info = (location, u, p)
133    
 class RSSParseException(Exception):  
     pass  

Legend:
Removed from v.1.26  
changed lines
  Added in v.1.27

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26