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"
|
mime = "text/gemini"
|
||||||
return mime
|
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):
|
def set_renderer(content,url,mime):
|
||||||
renderer = None
|
renderer = None
|
||||||
if mime == "Local Folder":
|
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):
|
def render(input,path=None,format="auto",mime=None,url=None):
|
||||||
if format == "gemtext":
|
if format == "gemtext":
|
||||||
r = GemtextRenderer(input,"https://ploum.net")
|
r = GemtextRenderer(input,url)
|
||||||
elif format == "html":
|
elif format == "html":
|
||||||
r = HtmlRenderer(input,"https://ploum.net")
|
r = HtmlRenderer(input,url)
|
||||||
elif format == "feed":
|
elif format == "feed":
|
||||||
r = FeedRenderer(input,"https://ploum.net")
|
r = FeedRenderer(input,url)
|
||||||
elif format == "gopher":
|
elif format == "gopher":
|
||||||
r = GopherRenderer(input,"https://ploum.net")
|
r = GopherRenderer(input,url)
|
||||||
elif format == "image":
|
elif format == "image":
|
||||||
r = ImageRenderer(input,"https://ploum.net")
|
r = ImageRenderer(input,url)
|
||||||
elif format == "folder":
|
elif format == "folder":
|
||||||
r = FolderRenderer(input,"https://ploum.net")
|
r = FolderRenderer(input,url)
|
||||||
else:
|
else:
|
||||||
if not mime and path:
|
if not mime and path:
|
||||||
mime = get_mime(path)
|
r= renderer_from_file(path,url)
|
||||||
r = set_renderer(input,url,mime)
|
else:
|
||||||
|
r = set_renderer(input,url,mime)
|
||||||
print("renderer is %s"%r)
|
print("renderer is %s"%r)
|
||||||
if r:
|
if r:
|
||||||
r.display()
|
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
|
#!/usr/bin/env python3
|
||||||
# Offpunk Offline Gemini client
|
# Offpunk Offline Gemini client
|
||||||
# Derived from AV-98 by Solderpunk,
|
# Derived from AV-98 by Solderpunk,
|
||||||
|
@ -150,15 +150,6 @@ def fix_ipv6_url(url):
|
||||||
return schema + "://" + schemaless
|
return schema + "://" + schemaless
|
||||||
return 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:
|
# Offpunk is organized as follow:
|
||||||
# - a GeminiClient instance which handles the browsing of GeminiItems (= pages).
|
# - a GeminiClient instance which handles the browsing of GeminiItems (= pages).
|
||||||
# - There’s only one GeminiClient. Each page is a GeminiItem (name is historical, as
|
# - There’s only one GeminiClient. Each page is a GeminiItem (name is historical, as
|
||||||
|
@ -180,11 +171,10 @@ class GeminiItem():
|
||||||
else:
|
else:
|
||||||
self.url = url
|
self.url = url
|
||||||
self.url = fix_ipv6_url(self.url).strip()
|
self.url = fix_ipv6_url(self.url).strip()
|
||||||
self._cache_path = None
|
self._cache_path = self.get_cache_path()
|
||||||
self.name = name
|
self.name = name
|
||||||
self.mime = None
|
self.mime = None
|
||||||
self.renderer = None
|
self.renderer = ansirenderer.renderer_from_file(self._cache_path,self.url)
|
||||||
self.body = None
|
|
||||||
#TODO : stuff have been migrated to netcache. What are we missing here ?
|
#TODO : stuff have been migrated to netcache. What are we missing here ?
|
||||||
|
|
||||||
def get_cache_path(self):
|
def get_cache_path(self):
|
||||||
|
@ -222,8 +212,6 @@ class GeminiItem():
|
||||||
|
|
||||||
def get_page_title(self):
|
def get_page_title(self):
|
||||||
title = ""
|
title = ""
|
||||||
if not self.renderer:
|
|
||||||
self._set_renderer()
|
|
||||||
if self.renderer:
|
if self.renderer:
|
||||||
title = self.renderer.get_title()
|
title = self.renderer.get_title()
|
||||||
if not title or len(title) == 0:
|
if not title or len(title) == 0:
|
||||||
|
@ -239,8 +227,6 @@ class GeminiItem():
|
||||||
return netcache.cache_last_modified(self.url)
|
return netcache.cache_last_modified(self.url)
|
||||||
|
|
||||||
def get_body(self,as_file=False):
|
def get_body(self,as_file=False):
|
||||||
if self.body and not as_file:
|
|
||||||
return self.body
|
|
||||||
if self.is_cache_valid():
|
if self.is_cache_valid():
|
||||||
path = self.get_cache_path()
|
path = self.get_cache_path()
|
||||||
else:
|
else:
|
||||||
|
@ -263,8 +249,6 @@ class GeminiItem():
|
||||||
return None
|
return None
|
||||||
|
|
||||||
def get_images(self,mode=None):
|
def get_images(self,mode=None):
|
||||||
if not self.renderer:
|
|
||||||
self._set_renderer()
|
|
||||||
if self.renderer:
|
if self.renderer:
|
||||||
return self.renderer.get_images(mode=mode)
|
return self.renderer.get_images(mode=mode)
|
||||||
else:
|
else:
|
||||||
|
@ -275,8 +259,6 @@ class GeminiItem():
|
||||||
def get_links(self,mode=None):
|
def get_links(self,mode=None):
|
||||||
links = []
|
links = []
|
||||||
toreturn = []
|
toreturn = []
|
||||||
if not self.renderer:
|
|
||||||
self._set_renderer()
|
|
||||||
if self.renderer:
|
if self.renderer:
|
||||||
if not mode:
|
if not mode:
|
||||||
mode = self.last_mode
|
mode = self.last_mode
|
||||||
|
@ -319,8 +301,6 @@ class GeminiItem():
|
||||||
return links[nb-1]
|
return links[nb-1]
|
||||||
|
|
||||||
def get_subscribe_links(self):
|
def get_subscribe_links(self):
|
||||||
if not self.renderer:
|
|
||||||
self._set_renderer()
|
|
||||||
if self.renderer:
|
if self.renderer:
|
||||||
subs = self.renderer.get_subscribe_links()
|
subs = self.renderer.get_subscribe_links()
|
||||||
abssubs = []
|
abssubs = []
|
||||||
|
@ -334,8 +314,6 @@ class GeminiItem():
|
||||||
|
|
||||||
|
|
||||||
def display(self,mode=None,grep=None):
|
def display(self,mode=None,grep=None):
|
||||||
if not self.renderer:
|
|
||||||
self._set_renderer()
|
|
||||||
if self.renderer and self.renderer.is_valid():
|
if self.renderer and self.renderer.is_valid():
|
||||||
if not mode:
|
if not mode:
|
||||||
mode = self.last_mode
|
mode = self.last_mode
|
||||||
|
@ -362,8 +340,6 @@ class GeminiItem():
|
||||||
|
|
||||||
def get_temp_filename(self):
|
def get_temp_filename(self):
|
||||||
tmpf = None
|
tmpf = None
|
||||||
if not self.renderer:
|
|
||||||
self._set_renderer()
|
|
||||||
if self.renderer and self.renderer.is_valid():
|
if self.renderer and self.renderer.is_valid():
|
||||||
tmpf = self.renderer.get_temp_file()
|
tmpf = self.renderer.get_temp_file()
|
||||||
cache_path = self.get_cache_path()
|
cache_path = self.get_cache_path()
|
||||||
|
@ -430,7 +406,7 @@ class GeminiItem():
|
||||||
A thin wrapper around urlunparse which avoids inserting standard ports
|
A thin wrapper around urlunparse which avoids inserting standard ports
|
||||||
into URLs just to keep things clean.
|
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
|
host = self.host
|
||||||
else:
|
else:
|
||||||
host = self.host + ":" + str(self.port)
|
host = self.host + ":" + str(self.port)
|
||||||
|
@ -468,7 +444,7 @@ def looks_like_url(word):
|
||||||
port = parsed.port
|
port = parsed.port
|
||||||
mailto = word.startswith("mailto:")
|
mailto = word.startswith("mailto:")
|
||||||
scheme = word.split("://")[0]
|
scheme = word.split("://")[0]
|
||||||
start = scheme in standard_ports
|
start = scheme in netcache.standard_ports
|
||||||
local = scheme in ["file","list"]
|
local = scheme in ["file","list"]
|
||||||
if not start and not local and not mailto:
|
if not start and not local and not mailto:
|
||||||
return looks_like_url("gemini://"+word)
|
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("Cannot find a mail client to send mail to %s" %gi.path)
|
||||||
print("Please install xdg-open (usually from xdg-util package)")
|
print("Please install xdg-open (usually from xdg-util package)")
|
||||||
return
|
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:
|
and not self.sync_only:
|
||||||
print("Sorry, no support for {} links.".format(gi.scheme))
|
print("Sorry, no support for {} links.".format(gi.scheme))
|
||||||
return
|
return
|
||||||
|
@ -928,7 +904,7 @@ class GeminiClient(cmd.Cmd):
|
||||||
os.makedirs(certdir)
|
os.makedirs(certdir)
|
||||||
with open(os.path.join(certdir, fingerprint+".crt"), "wb") as fp:
|
with open(os.path.join(certdir, fingerprint+".crt"), "wb") as fp:
|
||||||
fp.write(cert)
|
fp.write(cert)
|
||||||
|
|
||||||
def _get_handler_cmd(self, mimetype):
|
def _get_handler_cmd(self, mimetype):
|
||||||
# Now look for a handler for this mimetype
|
# Now look for a handler for this mimetype
|
||||||
# Consider exact matches before wildcard matches
|
# Consider exact matches before wildcard matches
|
||||||
|
@ -949,7 +925,6 @@ class GeminiClient(cmd.Cmd):
|
||||||
else:
|
else:
|
||||||
cmd_str = "echo \"Can’t find how to open \"%s"
|
cmd_str = "echo \"Can’t find how to open \"%s"
|
||||||
print("Please install xdg-open (usually from xdg-util package)")
|
print("Please install xdg-open (usually from xdg-util package)")
|
||||||
self._debug("Using handler: %s" % cmd_str)
|
|
||||||
return cmd_str
|
return cmd_str
|
||||||
|
|
||||||
#TODO: remove format_geminiitem
|
#TODO: remove format_geminiitem
|
||||||
|
|
Loading…
Reference in New Issue