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

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

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

revision 1.68.2.1 by juri, Sat Aug 16 22:31:58 2003 UTC revision 1.68.2.2 by jmalonzo, Sun Aug 31 03:30:59 2003 UTC
# Line 91  class ItemView: Line 91  class ItemView:
91              stream.close()              stream.close()
92          except Exception, ex:          except Exception, ex:
93              stream.close()              stream.close()
             raise  
94    
95      def on_source_subscribe_button_clicked(self, button, *data):      def on_source_subscribe_button_clicked(self, button, *data):
96          f = straw.Feed(self._item.source['text'],          f = straw.Feed(self._item.source['text'],
# Line 150  class ItemView: Line 149  class ItemView:
149          if item.title is not None:          if item.title is not None:
150              ret.append('<div class="stitle">%s</div>' % item.title)              ret.append('<div class="stitle">%s</div>' % item.title)
151          if item.pub_date is not None:          if item.pub_date is not None:
152                format = '%a, %d %b %H:%M:%S'
153              ret.append('<div class="sdate">%s</div>' %              ret.append('<div class="sdate">%s</div>' %
154              str(item.pub_date.localtime().strftime('%a, %d %b %H:%M:%S')))                         unicode(item.pub_date.localtime().strftime(format),'latin-1').encode('utf-8'))
155          ret.append('<div class="content">')          ret.append('<div class="content">')
156          if item.description is not None:          if item.description is not None:
157              ret.append('%s ' % item.description)              ret.append('%s ' % item.description)
# Line 182  class ItemView: Line 182  class ItemView:
182                                          item.publication_starting_page))                                          item.publication_starting_page))
183              ret.append('</p><p>')              ret.append('</p><p>')
184          if item.link is not None:          if item.link is not None:
185              ret.append('<a href="%s">Full Story &gt;&gt;</a><br />' % item.link)              ret.append('<a href="%s">%s &gt;&gt;</a><br />' %
186                           (item.link,_("Full Story")))
187          if item.guid is not None and is_url(item.guid):          if item.guid is not None and is_url(item.guid):
188              ret.append('<a href="%s">%s &gt;&gt;</a>' %              ret.append('<a href="%s">%s &gt;&gt;</a>' %
189                         (item.guid, _("Permanent link")))                         (item.guid, _("Permanent link")))
# Line 248  def read_text(fragment, chars): Line 249  def read_text(fragment, chars):
249                  res_len += 1                  res_len += 1
250      return "".join(res)      return "".join(res)
251    
252    entity = re.compile(r'\&.\w*?\;')
253  def convert_entities(text):  def convert_entities(text):
254      nt = []      def conv(ents):
255      in_entity = 0          entities = htmlentitydefs.entitydefs
256      entity = ""          ents = ents.group(0)
257      for c in text:          ent_code = entities.get(ents[1:-1], None)
258          if in_entity:          if ent_code is not None:
259              entity += c              return unicode(ent_code, 'iso8859-1')
260              if c == ';':          else:
261                  in_entity = 0;              if ents[1] == '#':
262                  entities = htmlentitydefs.entitydefs                  code = ents[2:-1]
263                  e = entities.get(entity[1:-1], None)                  base = 10
264                  if e is not None:                  if code[0] == 'x':
265                      nt.append(unicode(e, 'iso8859-1'))                      code = code[1:]
266                  else:                      base = 16
267                      try:                  return unichr(int(code, base))
                         assert len(entity) > 1, "entity less than 1"  
                         if entity[1] == '#':  
                             code = entity[2:-1]  
                             base = 10  
                             if code[0] == 'x':  
                                 code = code[1:]  
                                 base = 16  
                             nt.append(unichr(int(code, base)))  
                         else:  
                             nt.append(' ')  
                     except AssertionError:  
                         raise  
                     except ValueError:  
                         raise  
                 entity = ""  
         else:  
             if c == '&':  
                 in_entity = 1  
                 entity = "&"  
268              else:              else:
269                  nt.append(c)                  return
270      return "".join(nt)  
271        in_entity = entity.search(text)
272        if in_entity is None:
273            return text
274        else:
275            # convert all entities found in text then return the converted text
276            ctext = in_entity.re.sub(conv, text)
277            return ctext
278    
279    html_tags = re.compile(r'\<.*?\>')
280    def is_html(text):
281        is_tag = html_tags.search(text)
282        if is_tag: return 1
283        else: return 0
284    
285  class ItemList:  class ItemList:
286      COLUMN_TITLE = 0      COLUMN_TITLE = 0
# Line 336  class ItemList: Line 332  class ItemList:
332          count = 0          count = 0
333          for item in feed.items:          for item in feed.items:
334              title = ""              title = ""
             # None is not == to an empty string, so we'll check for an empty  
             # string as well.  
335              if item.title is not None and item.title != "":              if item.title is not None and item.title != "":
336                  title = convert_entities(item.title)                  title = convert_entities(item.title)
337              elif item.description is not None and item.description != "":              elif item.description is not None and item.description != "":
# Line 520  class FeedInfoDisplay: Line 514  class FeedInfoDisplay:
514              self._title_display.hide()              self._title_display.hide()
515    
516          description = feed.channel_description          description = feed.channel_description
517          self._description_display.set_text(description)          size = len(description)
518          if len(description):          if size:
519                if is_html(description):
520                    description = read_text(description, size)
521                self._description_display.set_text(description)
522              self._description_display.show()              self._description_display.show()
523          else:          else:
524              self._description_display.hide()              self._description_display.hide()
# Line 645  class MainWindow: Line 642  class MainWindow:
642          return straw.main.quit()          return straw.main.quit()
643    
644      def on_straw_main_delete_event(self, *args):      def on_straw_main_delete_event(self, *args):
645          # FALSE emits destroy_event          return straw.main.quit()
         return gtk.FALSE  
646    
647      def on_straw_main_configure_event(self, widget, event, *args):      def on_straw_main_configure_event(self, widget, event, *args):
648          def check_size((width, height, widget)):          def check_size((width, height, widget)):
# Line 687  class MainWindow: Line 683  class MainWindow:
683          straw.main.show_subscribe_dialog()          straw.main.show_subscribe_dialog()
684    
685      def on_menu_about_activate(self, menuitem, *args):      def on_menu_about_activate(self, menuitem, *args):
686            whatis = "Straw is a desktop news aggregator for GNOME"
687          gnome.ui.About(          gnome.ui.About(
688              straw.APPNAME, straw.VERSION, "Copyright (c) 2002 Juri Pakaste", "",              straw.APPNAME, straw.VERSION, "Copyright (c) 2002-2003 Juri Pakaste", whatis,
689              ["Juri Pakaste <juri@iki.fi>",              ["Juri Pakaste <juri@iki.fi>",
690               "Jan Alonzo <jmalonzo@spaceants.org>"               "Jan Alonzo <jmalonzo@spaceants.org>",
691               "rssparser.py and rssfinder.py by Mark Pilgrim",               "rssparser.py and rssfinder.py by Mark Pilgrim",
692               "Icons by Jakub 'jimmac' Steiner and Juri Pakaste"],               "Icons by Jakub 'jimmac' Steiner and Juri Pakaste"],
693              [],              [],
# Line 698  class MainWindow: Line 695  class MainWindow:
695              "Martin Steldinger <tribble@hanfplantage.de>\n"              "Martin Steldinger <tribble@hanfplantage.de>\n"
696              "David Rousseau <boiteaflood@wanadoo.fr>\n"              "David Rousseau <boiteaflood@wanadoo.fr>\n"
697              "Sergei Vavinov <svv@cmc.msu.ru>\n"              "Sergei Vavinov <svv@cmc.msu.ru>\n"
698              "Terje Røsten <terjeros@phys.ntnu.no>",              u"Terje R\xf8sten <terjeros@phys.ntnu.no>",
699              gtk.gdk.pixbuf_new_from_file(straw.main._libdir +              gtk.gdk.pixbuf_new_from_file(straw.main._libdir +
700                                           "/straw.png")).show()                                           "/straw.png")).show()
701    
# Line 945  class MainWindow: Line 942  class MainWindow:
942              if ur:              if ur:
943                  uritems += ur                  uritems += ur
944                  urfeeds += 1                  urfeeds += 1
945          map = {'uritems': uritems, 'urfeeds': urfeeds}          if urfeeds > 1: feedstr = "feeds"
946            else: feedstr = "feed"
947            map = {'uritems': uritems, 'urfeeds': urfeeds, 'feedstr': feedstr}
948          self._window.set_title(('%s - ' % straw.APPNAME) +          self._window.set_title(('%s - ' % straw.APPNAME) +
949                                 _('%(uritems)d unread in %(urfeeds)d feeds') %                                 _('%(uritems)d unread in %(urfeeds)d %(feedstr)s') %
950                                 map )                                 map )
951    
952      def all_items_read(self, signal, feed_index):      def all_items_read(self, signal, feed_index):

Legend:
Removed from v.1.68.2.1  
changed lines
  Added in v.1.68.2.2

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