? build ? straw+severalpatches.diff ? data/straw.css ? tools/__init__.pyc ? tools/msgfmt.pyc ? tools/straw_distutils.pyc Index: setup.py =================================================================== RCS file: /cvs/gnome/straw/setup.py,v retrieving revision 1.4 diff -u -r1.4 setup.py --- setup.py 22 Apr 2004 18:41:16 -0000 1.4 +++ setup.py 23 May 2004 14:51:48 -0000 @@ -98,7 +98,7 @@ images = glob.glob('images/*.png') files = [ ('share/pixmaps', ['images/straw.png']), - ('share/straw', images + ['data/default_subscriptions.opml', 'glade/straw.glade'])] + ('share/straw', images + ['data/default_subscriptions.opml', 'data/straw.css', 'glade/straw.glade'])] return files long_desc = '''\ Index: src/lib/Main.py =================================================================== RCS file: /cvs/gnome/straw/src/lib/Main.py,v retrieving revision 1.3 diff -u -r1.3 Main.py --- src/lib/Main.py 22 Apr 2004 18:41:16 -0000 1.3 +++ src/lib/Main.py 23 May 2004 14:51:49 -0000 @@ -19,6 +19,7 @@ from gtk import glade import getopt from error import log +import utils class Main: @@ -28,7 +29,7 @@ straw.main = self try: - localedir = find_locale_dir() + localedir = utils.find_locale_dir() gettext.bindtextdomain(lname, localedir) gettext.textdomain(lname) gettext.install(lname, localedir, unicode=1) @@ -40,8 +41,8 @@ self._setlocale() - self._libdir = find_lib_dir() - self._xmlfile = find_glade_file(self._libdir) + self._libdir = utils.find_lib_dir() + self._xmlfile = utils.find_glade_file(self._libdir) straw.ImageCache.initialize() self._image_loader = ImageLoader(self._libdir) @@ -446,24 +447,14 @@ return feeds = straw.FeedList.get_instance() current_feeds = {} - error = 0 for feed in feeds: current_feeds[feed.access_info[0]] = 1 - for b in opml: - if current_feeds.has_key(b.xmlurl): + if current_feeds.has_key(b.url): + # we already have this feed. continue - if b.type == "rss": - feeds.append( category, - straw.create_new_feed(b.title, b.xmlurl)) - else: - error = 1 - - if error: - straw.hig_alert.reportError( - _("Warning: Not All Feeds Have Been Added"), - (_("Some feeds in the file %s were not added because they are not RSS feeds.") % filename)) - + feeds.append(category, + straw.create_new_feed(b.text, b.url)) return @@ -474,34 +465,4 @@ def show(self, widget, image): fn = os.path.join(self.libdir, image + ".png") widget.set_from_file(fn) - -def find_lib_dir(): - if os.environ.has_key("STRAW_DATA"): - return os.environ["STRAW_DATA"] - h, t = os.path.split(os.path.split(os.path.abspath(sys.argv[0]))[0]) - if t == 'bin': - fp = os.path.join(h, 'share', 'straw') - if os.path.isdir(fp): - return fp - fp = os.path.join(h, 'lib', 'straw') - if os.path.isdir(fp): - return fp - raise "FileNotFoundError", "couldn't find Straw data directory" - -def find_locale_dir(): - h, t = os.path.split(os.path.split(os.path.abspath(sys.argv[0]))[0]) - if t == 'bin': - fp = os.path.join(h, 'share', 'locale') - if os.path.isdir(fp): - return fp - raise "FileNotFoundError", "couldn't find locale data directory" - -def find_glade_file(libdir): - xmlfile = None - if os.environ.has_key("STRAW_GLADE"): - return os.environ["STRAW_GLADE"] - fp = os.path.join(libdir, 'straw.glade') - if os.path.isfile(fp): - return fp - raise "FileNotFoundError", "couldn't find straw.glade" Index: src/lib/MainWindow.py =================================================================== RCS file: /cvs/gnome/straw/src/lib/MainWindow.py,v retrieving revision 1.5 diff -u -r1.5 MainWindow.py --- src/lib/MainWindow.py 24 Apr 2004 12:01:23 -0000 1.5 +++ src/lib/MainWindow.py 23 May 2004 14:51:54 -0000 @@ -11,10 +11,12 @@ from gtk import glade from xml.sax import saxutils import time - +import os import straw from error import log, logparam, logtb - +import utils +import urlparse +import re class DummyDocStream(StringIO.StringIO): def write_stream(self, s): @@ -23,7 +25,7 @@ class ItemView: def __init__(self, item_view_container): self._item = None - self._date_format = '%A, %d %B %Y %H:%M' + self._date_format = '%c' self._encoding = straw.utils.get_locale_encoding() self._mmgr = straw.MessageManager.get_instance() @@ -74,8 +76,14 @@ try: feed = straw.main.get_visible_feed() url = straw.utils.complete_url(url, feed.location) - image = straw.ImageCache.cache[url] - stream.write(image.get_data()) + if urlparse.urlparse(url)[0] == 'file': + # local URL, don't use the cache. + f = file(urlparse.urlparse(url)[2]) + stream.write(f.read()) + f.close() + else: + image = straw.ImageCache.cache[url] + stream.write(image.get_data()) except Exception, ex: log("Error reading image in %s: %s" % (url, ex)) @@ -99,16 +107,13 @@ self._document.clear() self._document.open_stream("text/html") html = ( - """ - - - title""" + + """ + + title + + + """ + self.htmlify_item(item) + "") html = html.encode('utf-8') @@ -132,21 +137,47 @@ return def htmlify_empty_feed(self, feed): - return ("title

" + - _("No data yet, need to poll first.") + + return (""" + + title + + +

""" + + _("No data yet, need to poll first.") + "

") def htmlify_item(self, item): ret = [] + ret.append('
') if item.title is not None: - ret.append('
%s
' % item.title) + if (item.link is not None): + ret.append('%s
' % + (item.link,item.title)) + else: + ret.append('%s
' % item.title) if item.pub_date is not None: timestr = straw.utils.format_date(item.pub_date, self._date_format, self._encoding) - ret.append('
%s
' % timestr) - ret.append('
') + ret.append(str(timestr)) + ret.append('
') if item.description is not None: - ret.append('%s ' % item.description) + descr = self.filter_description(item.description) + ret.append('
%s
' % + descr) + # Dublin Core information + dcret = [] + if item.creator is not None: + dcret.append('%s%s' % (_("Posted by"), item.creator)) + if (item.link is not None): + dcret.append('%s%s' % + (_("Complete story"), item.link, item.link)) + if (item.guid is not None) and item.guidislink: + dcret.append('%s%s' % (_("Permalink"), item.guid, item.guid)) + if dcret != []: + ret.append('
%s
') if item.fm_license != '' and item.fm_license is not None: ret.append('

%s: %s

' % (_("Software license"), item.fm_license)) if item.fm_changes != '' and item.fm_changes is not None: @@ -171,14 +202,6 @@ item.publication_starting_page)) ret.append('

') ret.append('') - if item.creator is not None: - ret.append('

%s: %s

' % (_("Posted by"), item.creator)) - if (item.link is not None): - ret.append('%s >>
' % - (item.link,_("Complete story"))) - if (item.guid is not None) and item.guidislink: - ret.append('%s >>
' % - (item.guid,_("Permalink"))) return "".join(ret) @@ -204,6 +227,15 @@ self._href_widget.hide() self._item_source_vbox.hide() + def filter_description(self, descr): + matchtags = re.compile("<[^>]*>") + if re.search(matchtags, descr) != None: + # there are tags. return. + return descr + else: + # replace \n with
+ return re.sub('\n', '
', descr) + class ItemList: COLUMN_TITLE = 0 COLUMN_STICKY = 1 @@ -1472,4 +1504,3 @@ def enable_feed_selection(self): self._feed_list_view.enable_feed_selection() - Index: src/lib/OPMLImport.py =================================================================== RCS file: /cvs/gnome/straw/src/lib/OPMLImport.py,v retrieving revision 1.2 diff -u -r1.2 OPMLImport.py --- src/lib/OPMLImport.py 16 Apr 2004 20:26:07 -0000 1.2 +++ src/lib/OPMLImport.py 23 May 2004 14:51:55 -0000 @@ -3,15 +3,7 @@ import OPML class BlogListEntry(object): - __slots__ = ('text', 'type', 'url', 'xmlurl', 'description', 'language', - 'title', 'version') - - def __init__(self): - self.xmlurl = None - self.description = None - self.language = None - self.title = None - self.version = None + __slots__ = ('text', 'url') def _find_entries(outline): entries = [] @@ -24,22 +16,31 @@ url = outline.get('url', '') if url != '': e = BlogListEntry() - e.type = type e.text = text e.url = url - elif type == 'rss': - url = outline.get('htmlUrl', '') + else: xmlurl = outline.get('xmlUrl', '') - if url != '' and xmlurl != '': - e = BlogListEntry() - e.type = type - e.text = text - e.url = url - e.xmlurl = xmlurl - e.description = outline.get('description', '') - e.language = outline.get('language', '') - e.title = outline.get('title', '') - e.version = outline.get('version', '') + e = BlogListEntry() + e.text = text + if text == '': + title = outline.get('title', '') + if title == '': + e = None + e.text = title + if e != None: + if xmlurl != '': + # there's something in xmlurl. There's a good chance that's + # our feed's URL + e.url = xmlurl + else: + htmlurl = outline.get('htmlUrl', '') + if htmlurl != '': + # there's something in htmlurl, and xmlurl is empty. This + # might be our feed's URL. + e.url = htmlurl + else: + # nothing else to try. + e = None if e is not None: entries[0:0] = [e] return entries @@ -58,8 +59,9 @@ entries = find_entries(o.outlines) ret = [] edict = {} + # avoid duplicates. for e in entries: - ek = (e.text, e.type, e.url) + ek = (e.text, e.url) edict[ek] = edict.get(ek, 0) + 1 if edict[ek] < 2: ret.append(e) Index: src/lib/utils.py =================================================================== RCS file: /cvs/gnome/straw/src/lib/utils.py,v retrieving revision 1.2 diff -u -r1.2 utils.py --- src/lib/utils.py 16 Apr 2004 20:26:07 -0000 1.2 +++ src/lib/utils.py 23 May 2004 14:51:55 -0000 @@ -1,4 +1,5 @@ import re, string, htmlentitydefs, urllib, urlparse, locale, time, calendar +import os, sys import error url_re = re.compile('^\w+://') @@ -113,7 +114,7 @@ language, encoding = locale.getlocale(locale.LC_MESSAGES) except (ValueError, Exception), ex: error.log("%s" % ex) - + if language is not None: return locale.normalize(language) else: @@ -121,15 +122,7 @@ return 'en_US' def get_locale_encoding(): - try: - language, encoding = locale.getlocale(locale.LC_MESSAGES) - except (ValueError, Exception), ex: - error.log("%s" % ex) - - if encoding is not None and encoding != '': - return locale.normalize(encoding) - else: - return 'ISO8859-1' + return locale.getpreferredencoding() weekday = ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"] months = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"] @@ -142,7 +135,7 @@ #date.tm_hour, date.tm_min) return unicode(timestr, encoding) - + MAX_DISPLAY_CHAR = 60 def convert_title(title, description = ''): if title is None or title == '': @@ -160,4 +153,34 @@ title = read_text(title, MAX_DISPLAY_CHAR) return title + +def find_lib_dir(): + if os.environ.has_key("STRAW_DATA"): + return os.environ["STRAW_DATA"] + h, t = os.path.split(os.path.split(os.path.abspath(sys.argv[0]))[0]) + if t == 'bin': + fp = os.path.join(h, 'share', 'straw') + if os.path.isdir(fp): + return fp + fp = os.path.join(h, 'lib', 'straw') + if os.path.isdir(fp): + return fp + raise "FileNotFoundError", "couldn't find Straw data directory" + +def find_locale_dir(): + h, t = os.path.split(os.path.split(os.path.abspath(sys.argv[0]))[0]) + if t == 'bin': + fp = os.path.join(h, 'share', 'locale') + if os.path.isdir(fp): + return fp + raise "FileNotFoundError", "couldn't find locale data directory" + +def find_glade_file(libdir): + xmlfile = None + if os.environ.has_key("STRAW_GLADE"): + return os.environ["STRAW_GLADE"] + fp = os.path.join(libdir, 'straw.glade') + if os.path.isfile(fp): + return fp + raise "FileNotFoundError", "couldn't find straw.glade"