RSS feeds are now rendered as gemlogs

This commit is contained in:
Lionel Dricot 2022-02-14 11:05:39 +01:00
parent 7781d7123c
commit 26009c7f75
1 changed files with 20 additions and 26 deletions

View File

@ -246,7 +246,7 @@ class AbstractRenderer():
return "Abstract title" return "Abstract title"
#This function will give gemtext to the gemtext renderer #This function will give gemtext to the gemtext renderer
def prepare(self,body): def prepare(self,body,mode=None):
return body return body
def get_body(self,readable=True,width=None): def get_body(self,readable=True,width=None):
@ -257,7 +257,7 @@ class AbstractRenderer():
mode = "readable" mode = "readable"
else : else :
mode = "full" mode = "full"
prepared_body = self.prepare(self.body) prepared_body = self.prepare(self.body,mode=mode)
self.rendered_text, self.links = self.render(prepared_body,width=width,mode=mode) self.rendered_text, self.links = self.render(prepared_body,width=width,mode=mode)
return self.rendered_text return self.rendered_text
# An instance of AbstractRenderer should have a self.render(body,width,mode) method. # An instance of AbstractRenderer should have a self.render(body,width,mode) method.
@ -467,7 +467,7 @@ class FolderRenderer(GemtextRenderer):
body += write_list(l) body += write_list(l)
return body return body
class FeedRenderer(AbstractRenderer): class FeedRenderer(GemtextRenderer):
def is_valid(self): def is_valid(self):
if _DO_FEED: if _DO_FEED:
parsed = feedparser.parse(self.body) parsed = feedparser.parse(self.body)
@ -483,7 +483,7 @@ class FeedRenderer(AbstractRenderer):
self.render(self.body) self.render(self.body)
return self.title return self.title
def render(self,content,mode="readable",width=None): def prepare(self,content,mode="readable",width=None):
if not width: if not width:
width = TERM_WIDTH width = TERM_WIDTH
self.links = [] self.links = []
@ -505,39 +505,33 @@ class FeedRenderer(AbstractRenderer):
else: else:
t = "Unknown" t = "Unknown"
self.title = "%s (XML feed)" %t self.title = "%s (XML feed)" %t
title = "\x1b[1;4;34m%s\x1b[0m" %self.title title = "# %s"%self.title
blue_title = textwrap.fill(title,width) page += title + "\n"
page += blue_title + "\n"
if "subtitle" in parsed.feed:
page += textwrap.fill(parsed.feed.subtitle,width) + "\n\n"
if "link" in parsed.feed:
self.links.append(parsed.feed.link)
line = "This is the feed for \x1b[34;2m%s [1]\x1b[0m" %parsed.feed.link
page += textwrap.fill(line,width) + "\n"
if "updated" in parsed.feed: if "updated" in parsed.feed:
line = "Last updated on %s" %parsed.feed.updated page += "Last updated on %s\n\n" %parsed.feed.updated
page += textwrap.fill(line,width) if "subtitle" in parsed.feed:
page += "\n\n" page += parsed.feed.subtitle + "\n"
if "link" in parsed.feed:
page += "=> %s\n" %parsed.feed.link
page += "\n## Entries\n"
if len(parsed.entries) < 1: if len(parsed.entries) < 1:
self.validity = False self.validity = False
for i in parsed.entries: for i in parsed.entries:
self.links.append(i.link) line = "=> %s " %i.link
line = "\x1b[34m%s [%s]\x1b[0m"%(i.title,len(self.links))
page += textwrap.fill(line,width) + "\n"
line = ""
if "author" in i:
line += "by %s "%i.author
if "published" in i: if "published" in i:
line += "on %s"%i.published pub_date = time.strftime("%Y-%m-%d",i.published_parsed)
page += textwrap.fill(line,width) line += pub_date + " : "
page += "\n\n" line += "%s" %(i.title)
if "author" in i:
line += " (by %s)"%i.author
page += line + "\n"
if mode == "full": if mode == "full":
if "summary" in i: if "summary" in i:
rendered, links = HtmlRenderer.render(self,i.summary,\ rendered, links = HtmlRenderer.render(self,i.summary,\
width=width,mode="full",add_title=False) width=width,mode="full",add_title=False)
page += rendered page += rendered
page += "\n" page += "\n"
return page, self.links return page
class ImageRenderer(AbstractRenderer): class ImageRenderer(AbstractRenderer):
def is_valid(self): def is_valid(self):