renderer in ansirenderer

This commit is contained in:
Lionel Dricot 2023-07-21 14:22:09 +02:00
parent 268e50a781
commit 1a3d839ab3
2 changed files with 24 additions and 40 deletions

View File

@ -1176,6 +1176,14 @@ def get_mime(path):
mime = "text/gemini"
return mime
def renderer_from_file(path,url=None):
mime = get_mime(path)
with open(path) as f:
body = f.read()
f.close()
return set_renderer(body,url,mime)
def set_renderer(content,url,mime):
renderer = None
if mime == "Local Folder":
@ -1209,21 +1217,22 @@ def set_renderer(content,url,mime):
def render(input,path=None,format="auto",mime=None,url=None):
if format == "gemtext":
r = GemtextRenderer(input,"https://ploum.net")
r = GemtextRenderer(input,url)
elif format == "html":
r = HtmlRenderer(input,"https://ploum.net")
r = HtmlRenderer(input,url)
elif format == "feed":
r = FeedRenderer(input,"https://ploum.net")
r = FeedRenderer(input,url)
elif format == "gopher":
r = GopherRenderer(input,"https://ploum.net")
r = GopherRenderer(input,url)
elif format == "image":
r = ImageRenderer(input,"https://ploum.net")
r = ImageRenderer(input,url)
elif format == "folder":
r = FolderRenderer(input,"https://ploum.net")
r = FolderRenderer(input,url)
else:
if not mime and path:
mime = get_mime(path)
r = set_renderer(input,url,mime)
r= renderer_from_file(path,url)
else:
r = set_renderer(input,url,mime)
print("renderer is %s"%r)
if r:
r.display()

View File

@ -1,4 +1,4 @@
#TODO: remove the set_renderer then try to run offpunk
#TODO: migrate go_to_gi to netcache
#!/usr/bin/env python3
# Offpunk Offline Gemini client
# Derived from AV-98 by Solderpunk,
@ -150,15 +150,6 @@ def fix_ipv6_url(url):
return schema + "://" + schemaless
return schemaless
# This list is also used as a list of supported protocols
standard_ports = {
"gemini" : 1965,
"gopher" : 70,
"finger" : 79,
"http" : 80,
"https" : 443,
"spartan": 300,
}
# Offpunk is organized as follow:
# - a GeminiClient instance which handles the browsing of GeminiItems (= pages).
# - Theres only one GeminiClient. Each page is a GeminiItem (name is historical, as
@ -180,11 +171,10 @@ class GeminiItem():
else:
self.url = url
self.url = fix_ipv6_url(self.url).strip()
self._cache_path = None
self._cache_path = self.get_cache_path()
self.name = name
self.mime = None
self.renderer = None
self.body = None
self.renderer = ansirenderer.renderer_from_file(self._cache_path,self.url)
#TODO : stuff have been migrated to netcache. What are we missing here ?
def get_cache_path(self):
@ -222,8 +212,6 @@ class GeminiItem():
def get_page_title(self):
title = ""
if not self.renderer:
self._set_renderer()
if self.renderer:
title = self.renderer.get_title()
if not title or len(title) == 0:
@ -239,8 +227,6 @@ class GeminiItem():
return netcache.cache_last_modified(self.url)
def get_body(self,as_file=False):
if self.body and not as_file:
return self.body
if self.is_cache_valid():
path = self.get_cache_path()
else:
@ -263,8 +249,6 @@ class GeminiItem():
return None
def get_images(self,mode=None):
if not self.renderer:
self._set_renderer()
if self.renderer:
return self.renderer.get_images(mode=mode)
else:
@ -275,8 +259,6 @@ class GeminiItem():
def get_links(self,mode=None):
links = []
toreturn = []
if not self.renderer:
self._set_renderer()
if self.renderer:
if not mode:
mode = self.last_mode
@ -319,8 +301,6 @@ class GeminiItem():
return links[nb-1]
def get_subscribe_links(self):
if not self.renderer:
self._set_renderer()
if self.renderer:
subs = self.renderer.get_subscribe_links()
abssubs = []
@ -334,8 +314,6 @@ class GeminiItem():
def display(self,mode=None,grep=None):
if not self.renderer:
self._set_renderer()
if self.renderer and self.renderer.is_valid():
if not mode:
mode = self.last_mode
@ -362,8 +340,6 @@ class GeminiItem():
def get_temp_filename(self):
tmpf = None
if not self.renderer:
self._set_renderer()
if self.renderer and self.renderer.is_valid():
tmpf = self.renderer.get_temp_file()
cache_path = self.get_cache_path()
@ -430,7 +406,7 @@ class GeminiItem():
A thin wrapper around urlunparse which avoids inserting standard ports
into URLs just to keep things clean.
"""
if not self.port or self.port == standard_ports[self.scheme] :
if not self.port or self.port == netcache.standard_ports[self.scheme] :
host = self.host
else:
host = self.host + ":" + str(self.port)
@ -468,7 +444,7 @@ def looks_like_url(word):
port = parsed.port
mailto = word.startswith("mailto:")
scheme = word.split("://")[0]
start = scheme in standard_ports
start = scheme in netcache.standard_ports
local = scheme in ["file","list"]
if not start and not local and not mailto:
return looks_like_url("gemini://"+word)
@ -652,7 +628,7 @@ class GeminiClient(cmd.Cmd):
print("Cannot find a mail client to send mail to %s" %gi.path)
print("Please install xdg-open (usually from xdg-util package)")
return
elif gi.scheme not in ["file","list"] and gi.scheme not in standard_ports \
elif gi.scheme not in ["file","list"] and gi.scheme not in netcache.standard_ports \
and not self.sync_only:
print("Sorry, no support for {} links.".format(gi.scheme))
return
@ -928,7 +904,7 @@ class GeminiClient(cmd.Cmd):
os.makedirs(certdir)
with open(os.path.join(certdir, fingerprint+".crt"), "wb") as fp:
fp.write(cert)
def _get_handler_cmd(self, mimetype):
# Now look for a handler for this mimetype
# Consider exact matches before wildcard matches
@ -949,7 +925,6 @@ class GeminiClient(cmd.Cmd):
else:
cmd_str = "echo \"Cant find how to open \"%s"
print("Please install xdg-open (usually from xdg-util package)")
self._debug("Using handler: %s" % cmd_str)
return cmd_str
#TODO:remove format_geminiitem