forked from solderpunk/AV-98
renderer in ansirenderer
This commit is contained in:
parent
268e50a781
commit
1a3d839ab3
|
@ -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()
|
||||
|
|
39
offpunk.py
39
offpunk.py
|
@ -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).
|
||||
# - There’s 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 \"Can’t 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
|
||||
|
|
Loading…
Reference in New Issue