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

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

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

revision 1.27 by jmalonzo, Mon Oct 27 02:15:09 2003 UTC revision 1.28 by jmalonzo, Mon Oct 27 03:53:27 2003 UTC
# Line 11  from error import log Line 11  from error import log
11  def set_busy_cursor():  def set_busy_cursor():
12      rw = gtk.gdk.get_default_root_window()      rw = gtk.gdk.get_default_root_window()
13      rw.set_cursor(gtk.gdk.Cursor(gtk.gdk.WATCH))      rw.set_cursor(gtk.gdk.Cursor(gtk.gdk.WATCH))
14        while gtk.events_pending():
15            gtk.mainiteration(gtk.FALSE)
16              
17    
18  def set_ready_cursor():  def set_ready_cursor():
19      rw = gtk.gdk.get_default_root_window()      rw = gtk.gdk.get_default_root_window()
20      rw.set_cursor(gtk.gdk.Cursor(gtk.gdk.LEFT_PTR))      rw.set_cursor(gtk.gdk.Cursor(gtk.gdk.LEFT_PTR))
21        while gtk.events_pending():
22            gtk.mainiteration(gtk.FALSE)
23    
24  class SubscribeDialog:  class SubscribeDialog:
25      COLUMN_SUBSCRIBE = 0      COLUMN_SUBSCRIBE = 0
# Line 57  class SubscribeDialog: Line 62  class SubscribeDialog:
62          self.reset_fields()          self.reset_fields()
63    
64      def on_start_page_prepare(self, *args):      def on_start_page_prepare(self, *args):
65            self._start_page.emit_stop_by_name("prepare")
66          self._find_assistant.set_buttons_sensitive(gtk.FALSE, gtk.TRUE, gtk.TRUE, gtk.TRUE)          self._find_assistant.set_buttons_sensitive(gtk.FALSE, gtk.TRUE, gtk.TRUE, gtk.TRUE)
67            
68      def on_start_page_next(self, *args):      def on_start_page_next(self, *args):
# Line 68  class SubscribeDialog: Line 74  class SubscribeDialog:
74    
75      def on_location_page_prepare(self, *args):      def on_location_page_prepare(self, *args):
76          self._location_page.emit_stop_by_name("prepare")          self._location_page.emit_stop_by_name("prepare")
77          forward = gtk.FALSE          if not self._url:
78          if self._subscribe_site_entry.get_text().strip():              self._url = ""
79            forward = gtk.TRUE          self._subscribe_site_entry.set_text(self._url)
80          if self._err:          self._find_assistant.set_buttons_sensitive(gtk.TRUE, gtk.FALSE, gtk.TRUE, gtk.TRUE)
81            forward = gtk.FALSE          if self._url and not self._err:
82          self._find_assistant.set_buttons_sensitive(gtk.TRUE, forward, gtk.TRUE, gtk.TRUE)              self._find_assistant.set_buttons_sensitive(gtk.TRUE, gtk.TRUE, gtk.TRUE, gtk.TRUE)
83                            
84      def on_location_page_next(self, widget, data):      def on_location_page_next(self, widget, data):
85          self.location_page_forward(self._subscribe_site_entry.get_text().strip())          gtk.timeout_add(1, self.location_page_forward)
86          return gtk.TRUE          return gtk.TRUE
87    
88      def on_location_page_cancel(self, *args):      def on_location_page_cancel(self, *args):
# Line 84  class SubscribeDialog: Line 90  class SubscribeDialog:
90    
91      def on_multiple_feed_page_cancel(self, *args):      def on_multiple_feed_page_cancel(self, *args):
92          self.hide()          self.hide()
93      
94      def on_multiple_feed_page_prepare(self, *args):      def on_multiple_feed_page_prepare(self, *args):
95          self._multiple_feed_page.emit_stop_by_name("prepare")          self._multiple_feed_page.emit_stop_by_name("prepare")
96          self.display_feed_choices()          self.display_feed_choices()
97            next = gtk.TRUE
98          if len(self._feeds) == 0:          if len(self._feeds) == 0:
99              self._find_assistant.set_buttons_sensitive(gtk.TRUE, gtk.FALSE, gtk.TRUE, gtk.TRUE)            next = gtk.FALSE
100            self._find_assistant.set_buttons_sensitive(gtk.TRUE, next, gtk.TRUE, gtk.TRUE)
101            
102      def on_multiple_feed_page_next(self, *args):      def on_multiple_feed_page_next(self, *args):
103          self._find_assistant.set_page(self._last_page)          self._find_assistant.set_page(self._last_page)
# Line 100  class SubscribeDialog: Line 108  class SubscribeDialog:
108          title = ""          title = ""
109          text = ""          text = ""
110          if self._err:          if self._err:
111              title = self._err[0]              title, text = self._err
             text = self._err[1]  
             self._find_assistant.set_show_finish(gtk.FALSE)  
112          else:          else:
113              title = _("Feed Found")              title = _("Feed Found")
             self._find_assistant.set_show_finish(gtk.TRUE)  
114              if (len(self._feeds) == 1):              if (len(self._feeds) == 1):
115                  for f in self._feeds:                  for f in self._feeds:
116                      feed, ps = self._feeds[f]                      feed, ps = self._feeds[f]
# Line 113  class SubscribeDialog: Line 118  class SubscribeDialog:
118                  text = _("Press the Apply button if you want to subscribe to the feed below.\n\n")                  text = _("Press the Apply button if you want to subscribe to the feed below.\n\n")
119                  text += _("Title: %s \n") % feed.title                  text += _("Title: %s \n") % feed.title
120    
121                  if (len(feed.channel_description)):                  if feed.channel_description != "":
122                      text += _("Description: %s \n") % feed.channel_description                      text += _("Description: %s \n") % feed.channel_description
123              else:              else:
124                  text = _("Press the Apply button if you want to subscribe to the following feeds:\n\n")                  text = _("Press the Apply button if you want to subscribe to the following feeds:\n\n")
# Line 123  class SubscribeDialog: Line 128  class SubscribeDialog:
128    
129          self._last_page.set_title(title)          self._last_page.set_title(title)
130          self._last_page.set_text(text)          self._last_page.set_text(text)
131            self._find_assistant.set_show_finish(gtk.TRUE)
132            self._find_assistant.set_buttons_sensitive(gtk.TRUE, gtk.TRUE, gtk.TRUE, gtk.TRUE)
133    
134      def on_last_page_back(self, widget, data):      def on_last_page_back(self, widget, data):
135          self._find_assistant.set_show_finish(gtk.FALSE)          self._find_assistant.set_show_finish(gtk.FALSE)
# Line 133  class SubscribeDialog: Line 140  class SubscribeDialog:
140          return gtk.TRUE          return gtk.TRUE
141    
142      def on_last_page_finish(self, *args):      def on_last_page_finish(self, *args):
143            self._find_assistant.set_show_finish(gtk.FALSE)
144          for feed, ps in self._feeds.itervalues():          for feed, ps in self._feeds.itervalues():
145              straw.config.feeds.append(feed)              straw.config.feeds.append(feed)
146              feed.router.route_all(None, ps)              feed.router.route_all(None, ps)
# Line 140  class SubscribeDialog: Line 148  class SubscribeDialog:
148          self.hide()          self.hide()
149    
150      def on_last_page_cancel(self, *args):      def on_last_page_cancel(self, *args):
151            self._find_assistant.set_show_finish(gtk.FALSE)
152          self.hide()          self.hide()
153    
154      def on_subscribe_site_entry_changed(self, *args):      def on_subscribe_site_entry_changed(self, *args):
# Line 148  class SubscribeDialog: Line 157  class SubscribeDialog:
157      def entry_changed(self):      def entry_changed(self):
158          text = self._subscribe_site_entry.get_text().strip()          text = self._subscribe_site_entry.get_text().strip()
159          if text == "":          if text == "":
160              self._find_assistant.set_buttons_sensitive(gtk.TRUE, gtk.FALSE, gtk.TRUE, gtk.FALSE)              self._find_assistant.set_buttons_sensitive(gtk.TRUE, gtk.FALSE, gtk.TRUE, gtk.TRUE)
161          else:          else:
162              self._find_assistant.set_buttons_sensitive(gtk.TRUE, gtk.TRUE, gtk.TRUE, gtk.FALSE)              self._find_assistant.set_buttons_sensitive(gtk.TRUE, gtk.TRUE, gtk.TRUE, gtk.TRUE)
163    
164      def on_subscribe_site_entry_key_press_event(self, widget, event):      def on_subscribe_site_entry_key_press_event(self, widget, event):
165          if event.keyval == gtk.keysyms.Return:          if event.keyval == gtk.keysyms.Return:
166              url = self._subscribe_site_entry.get_text().strip()              gtk.timeout_add(1, self.location_page_forward)
             if url != "":  
               self.location_page_forward(url)  
   
167              return gtk.TRUE              return gtk.TRUE
168    
169      def location_page_forward(self, url):      def location_page_forward(self):
170          num_found = len(self._found_feeds)          url = self._subscribe_site_entry.get_text().strip()
171          if not self._url == url:          if self._url != url or (len(self._found_feeds) < 1 and not self._err):
172              self._feeds.clear()              self._find_assistant.set_buttons_sensitive(gtk.FALSE, gtk.FALSE, gtk.FALSE, gtk.FALSE)
173              set_busy_cursor()              set_busy_cursor()
174              num_found = self.find_site(url)              self._feeds.clear()
175              set_ready_cursor()              self._found_feeds = self.find_site(url)
176              self._url = url              self._url = url
177                set_ready_cursor()
178    
179            num_found = len(self._found_feeds)
180                            
181          if num_found > 1:          if num_found > 1:
182              self._find_assistant.set_page(self._multiple_feed_page)              self._find_assistant.set_page(self._multiple_feed_page)
# Line 183  class SubscribeDialog: Line 192  class SubscribeDialog:
192          self.hide()          self.hide()
193          return gtk.TRUE          return gtk.TRUE
194    
195      def show(self, url):      def show(self, url=""):
196          self._find_assistant.set_page(self._start_page)          self._url = url
         self._find_assistant.set_buttons_sensitive(gtk.FALSE, gtk.TRUE, gtk.TRUE, gtk.TRUE)  
197          self._start_page.show()          self._start_page.show()
198          self._last_page.show()          self._last_page.show()
199          self._window.show()          self._window.show()
         if url:  
             self.location_page_forward(url.strip())  
             self._subscribe_site_entry.set_text(url.strip())  
200    
201      def hide(self):      def hide(self):
202            self._find_assistant.set_page(self._start_page)
203          self.reset_fields()          self.reset_fields()
204          self._window.hide()          self._window.hide()
205          self._start_page.hide()          self._start_page.hide()
# Line 204  class SubscribeDialog: Line 210  class SubscribeDialog:
210          self._feeds.clear()          self._feeds.clear()
211          self._err = None          self._err = None
212          self._found_feeds = []          self._found_feeds = []
         self._subscribe_site_entry.set_text("")  
   
213    
214      def create_columns(self, treeview):      def create_columns(self, treeview):
215          renderer = gtk.CellRendererToggle()          renderer = gtk.CellRendererToggle()
# Line 226  class SubscribeDialog: Line 230  class SubscribeDialog:
230          iter = model.get_iter((int(path),))          iter = model.get_iter((int(path),))
231          feed = model.get_value(iter, self.COLUMN_FEED)          feed = model.get_value(iter, self.COLUMN_FEED)
232          ps = model.get_value(iter, self.COLUMN_PARSEDSUMMARY)          ps = model.get_value(iter, self.COLUMN_PARSEDSUMMARY)
233          feed.sticky = not feed.sticky          sticky = not model.get_value(iter, self.COLUMN_STATUS_FLAG)
234            model.set(iter, self.COLUMN_STATUS_FLAG, sticky)
235    
236          if feed.sticky:          next = gtk.TRUE
237              self.add_feed(feed, ps)          if feed.id in self._feeds:
             self._find_assistant.set_buttons_sensitive(gtk.TRUE, gtk.TRUE, gtk.TRUE, gtk.TRUE)  
         else:  
238              self.remove_feed(feed.id)              self.remove_feed(feed.id)
239              if (len(self._feeds) < 1):              if len(self._feeds) < 1:
240                  # let's prevent the user from going on without selecting a feed                  next = gtk.FALSE
241                  self._find_assistant.set_buttons_sensitive(gtk.TRUE, gtk.FALSE, gtk.TRUE, gtk.TRUE)          else:
242                self.add_feed(feed, ps)
243    
244          model.set(iter, self.COLUMN_STATUS_FLAG, feed.sticky)          self._find_assistant.set_buttons_sensitive(gtk.TRUE, next, gtk.TRUE, gtk.TRUE)
245          return gtk.TRUE          return gtk.TRUE
246    
247    
# Line 259  class SubscribeDialog: Line 263  class SubscribeDialog:
263              model.set(iter, self.COLUMN_TITLE, feed.title,              model.set(iter, self.COLUMN_TITLE, feed.title,
264                        self.COLUMN_DESCRIPTION, feed.channel_description,                        self.COLUMN_DESCRIPTION, feed.channel_description,
265                        self.COLUMN_FEED, feed, self.COLUMN_PARSEDSUMMARY, ps,                        self.COLUMN_FEED, feed, self.COLUMN_PARSEDSUMMARY, ps,
266                        self.COLUMN_STATUS_FLAG, feed.sticky,                        self.COLUMN_STATUS_FLAG, feed.id in self._feeds,
267                        self.COLUMN_URL, feed.access_info[0])                        self.COLUMN_URL, feed.access_info[0])
268    
269      def find_site(self, site):      def find_site(self, site):
         self._found_feeds = []  
270          self._err = None          self._err = None
271            found = []
272    
273          try:          try:
274              feeds = straw.rssfinder.getFeeds(site)              found = straw.rssfinder.getFeeds(site)
275          except IOError, e:          except IOError, e:
276              self._err = (_("Feed Not Found"),              self._err = (_("Feed Not Found"),
277                           (_("No feed was found in %s. Please make sure you typed the correct location.") % site))                           (_("No feed was found in %s. Please make sure you typed the correct location.") % site))
# Line 278  class SubscribeDialog: Line 282  class SubscribeDialog:
282              self._err = (_("Fatal Error"),              self._err = (_("Fatal Error"),
283                           _("A fatal error occurred while processing this operation. Please report it to the maintainer. Error: %s") % e)                           _("A fatal error occurred while processing this operation. Please report it to the maintainer. Error: %s") % e)
284    
285          if not self._err:          if self._err: return []
             len_feeds = len(feeds)  
286    
287              if len_feeds < 1:          if len(found) < 1:
288                  self._err = (_("Feed Not Found"),              self._err = (_("Feed Not Found"),
289                              (_("No feed was found in %s. Please make sure you typed the correct location.") % site))                          (_("No feed was found in %s. Please make sure you typed the correct location.") % site))
290                  return 0              return []
291    
292              try:          try:
293                  for url, data in feeds:              feeds = []
294                      feed = straw.create_new_feed("temporary feed", url)              for url, data in found:
295                      ps = self.parse_feed(data, feed)                  feed = straw.create_new_feed("temporary feed", url)
296                      feed.title = straw.utils.convert_entities(ps.title)                  ps = self.parse_feed(data, feed)
297                      feed.channel_description = straw.utils.convert_entities(ps.description)                  feed.title = straw.utils.convert_entities(ps.title)
298                      feed.sticky = 0                  feed.channel_description = straw.utils.convert_entities(ps.description)
299                      self._found_feeds.append((feed, ps))                  feeds.append((feed, ps))
300                  return len_feeds              return feeds
301    
302              except Exception, e:          except Exception, e:
303                  self._found_feeds = []              log("parse_feed: caught exception ", e)
304                  log("parse_feed: caught exception ", e)              traceback.print_exc()
305                  traceback.print_exc()              self._err = (_("Fatal Error"),
306                  self._err = (_("Fatal Error"),                           _("A fatal error occurred while processing this operation. Please report it to the maintainer. Error: %s") % e)
307                               _("A fatal error occurred while processing this operation. Please report it to the maintainer. Error: %s") % e)              return []
         return 0  
308    

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

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