From 1a3d839ab34183e8ef1b5e713abf0cceed6e580e Mon Sep 17 00:00:00 2001 From: Lionel Dricot Date: Fri, 21 Jul 2023 14:22:09 +0200 Subject: [PATCH] renderer in ansirenderer --- ansirenderer.py | 25 +++++++++++++++++-------- offpunk.py | 39 +++++++-------------------------------- 2 files changed, 24 insertions(+), 40 deletions(-) diff --git a/ansirenderer.py b/ansirenderer.py index dc2369e..3ec2095 100644 --- a/ansirenderer.py +++ b/ansirenderer.py @@ -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() diff --git a/offpunk.py b/offpunk.py index 2f0d48f..adf4992 100755 --- a/offpunk.py +++ b/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