From ea811e0343de13054ece4ca3ad2e8ae1ec05a55c Mon Sep 17 00:00:00 2001 From: Thomas Perl Date: Sun, 3 Aug 2008 21:09:03 +0200 Subject: [PATCH] Experimental support for gtkhtml2 for episode dialog (bug 162) Support the gtkhtml2 module in the episode description dialog to display HTML markup for the episode description and allow links and HTML lists, etc.. in the dialog. --- src/gpodder/gui.py | 33 ++++++++++++++++++++++++++++++--- src/gpodder/libpodcasts.py | 10 +++++----- src/gpodder/sync.py | 2 +- 3 files changed, 36 insertions(+), 9 deletions(-) diff --git a/src/gpodder/gui.py b/src/gpodder/gui.py index 9025246a..69ae758e 100644 --- a/src/gpodder/gui.py +++ b/src/gpodder/gui.py @@ -2953,9 +2953,36 @@ class gPodderEpisode(GladeWidget): # Hide the advanced prefs expander self.expander1.hide_all() - b = gtk.TextBuffer() - b.set_text( strip( self.episode.description)) - self.episode_description.set_buffer( b) + try: + import gtkhtml2 + document = gtkhtml2.Document() + document.connect('link-clicked', lambda d, url: util.open_website(url)) + def request_url(document, url, stream): + stream.write(urllib2.urlopen(url).read()) + stream.close() + document.connect('request-url', request_url) + document.clear() + document.open_stream('text/html') + document.write_stream('

%s

from %s, released %s

' % (saxutils.escape(self.episode.title), self.episode.link, saxutils.escape(self.episode.channel.title), self.episode.cute_pubdate())) + document.write_stream(self.episode.description) + document.write_stream('

%s

' % self.episode.link) + document.close_stream() + self.gPodderEpisode.resize(500, 500) + + self.episode_title.hide_all() + self.channel_title.hide_all() + self.btn_website.hide_all() + self.expander1.hide_all() + + view = gtkhtml2.View() + view.set_document(document) + self.scrolledwindow4.remove(self.scrolledwindow4.get_child()) + self.scrolledwindow4.add(view) + view.show() + except ImportError, ie: + b = gtk.TextBuffer() + b.set_text(strip(util.remove_html_tags(self.episode.description))) + self.episode_description.set_buffer( b) self.gPodderEpisode.set_title( self.episode.title) self.LabelDownloadLink.set_text( self.episode.url) diff --git a/src/gpodder/libpodcasts.py b/src/gpodder/libpodcasts.py index 6fd2fdc5..3861a47b 100644 --- a/src/gpodder/libpodcasts.py +++ b/src/gpodder/libpodcasts.py @@ -143,7 +143,7 @@ class podcastChannel(object): if hasattr( c.feed, 'link'): self.link = c.feed.link if hasattr( c.feed, 'subtitle'): - self.description = util.remove_html_tags(c.feed.subtitle) + self.description = c.feed.subtitle if hasattr(c.feed, 'updated_parsed') and c.feed.updated_parsed is not None: self.pubDate = rfc822.mktime_tz(c.feed.updated_parsed+(0,)) @@ -214,7 +214,7 @@ class podcastChannel(object): self.url = url self.title = title self.link = link - self.description = util.remove_html_tags( description) + self.description = description self.image = None self.pubDate = 0 self.parse_error = None @@ -407,7 +407,7 @@ class podcastChannel(object): filelength = None new_iter = new_model.append((item.url, item.title, filelength, - True, None, item.cute_pubdate(), description, item.description, + True, None, item.cute_pubdate(), description, util.remove_html_tags(item.description), item.local_filename(), item.extension())) self.iter_set_downloading_columns( new_model, new_iter, episode=item) @@ -472,7 +472,7 @@ class podcastItem(object): episode.title = entry.get( 'title', util.get_first_line( util.remove_html_tags( entry.get( 'summary', '')))) episode.link = entry.get( 'link', '') - episode.description = util.remove_html_tags( entry.get( 'summary', entry.get( 'link', entry.get( 'title', '')))) + episode.description = entry.get( 'summary', entry.get( 'link', entry.get( 'title', ''))) episode.guid = entry.get( 'id', '') if entry.get( 'updated_parsed', None): episode.pubDate = rfc822.mktime_tz(entry.updated_parsed+(0,)) @@ -601,7 +601,7 @@ class podcastItem(object): age_prop = property(fget=get_age_string) def one_line_description( self): - lines = self.description.strip().splitlines() + lines = util.remove_html_tags(self.description).strip().splitlines() if not lines or lines[0] == '': return _('No description available') else: diff --git a/src/gpodder/sync.py b/src/gpodder/sync.py index 19e1fc36..7d7f536e 100644 --- a/src/gpodder/sync.py +++ b/src/gpodder/sync.py @@ -373,7 +373,7 @@ class iPodDevice(Device): track.title = str(episode.title) track.album = str(episode.channel.title) track.artist = str(episode.channel.title) - track.description = str(episode.description) + track.description = str(util.remove_html_tags(episode.description)) track.podcasturl = str(episode.url) track.podcastrss = str(episode.channel.url) -- 2.11.4.GIT