diff --git a/ansirenderer.py b/ansirenderer.py index 22c2b92..7926ea5 100644 --- a/ansirenderer.py +++ b/ansirenderer.py @@ -448,6 +448,14 @@ class AbstractRenderer(): for l in self.get_subscribe_links()[1:]: self.links[mode].append(l[0]) return self.links[mode] + def get_link(self,nb): + links = self.get_links() + if len(links) < nb: + print("Index too high! No link %s for %s" %(nb,self.url)) + return None + else: + return links[nb-1] + #get_title is about the "content title", so the title in the page itself def get_title(self): return "Abstract title" diff --git a/offpunk.py b/offpunk.py index beb86ad..6d343aa 100755 --- a/offpunk.py +++ b/offpunk.py @@ -232,16 +232,6 @@ class GeminiItem(): toreturn.append(None) return toreturn - #TODO: should be in ansirenderer - def get_link(self,nb): - # == None allows to return False, even if the list is empty - links = self.get_links() - if len(links) < nb: - print("Index too high! No link %s for %s" %(nb,self.url)) - return None - else: - return links[nb-1] - #TODO: should be in ansirenderer def get_subscribe_links(self): if self.renderer: @@ -541,7 +531,9 @@ class GeminiClient(cmd.Cmd): def complete_move(self,text,line,begidx,endidx): return self.complete_add(text,line,begidx,endidx) - def get_renderer(self,url): + def get_renderer(self,url=None): + # If launched without argument, we return the renderer for the current URL + if not url: url = self.url # reuse existing renderer if any if url in self.rendererdic.keys(): renderer = self.rendererdic[url] @@ -764,17 +756,19 @@ class GeminiClient(cmd.Cmd): print("What?") return # if we have no GeminiItem, there's nothing to do - if self.gi is None: + if self.current_url is None: print("No links to index") return - try: - gi = self.gi.get_link(n) - except IndexError: - print ("Index too high!") - return + else: + r = self.get_renderer() + if r: + url = r.get_link(n) + else: + print("No page with links") + return self.index_index = n - self._go_to_gi(gi) + self._go_to_url(url) ### Settings def do_redirect(self,line): @@ -1103,18 +1097,18 @@ Current tour can be listed with `tour ls` and scrubbed with `tour clear`.""" if len(pair) == 1: # Just a single index n = int(index) - gi = self.gi.get_link(n) - self.list_add_line("tour",gi=gi,verbose=False) + url = self.get_renderer().get_link(n) + self.list_add_line("tour",gi=GeminiItem(url),verbose=False) elif len(pair) == 2: # Two endpoints for a range of indices if int(pair[0]) < int(pair[1]): for n in range(int(pair[0]), int(pair[1]) + 1): - gi = self.gi.get_link(n) - self.list_add_line("tour",gi=gi,verbose=False) + url = self.get_renderer().get_link(n) + self.list_add_line("tour",gi=GeminiItem(url),verbose=False) else: for n in range(int(pair[0]), int(pair[1]) - 1, -1): - gi = self.gi.get_link(n) - self.list_add_line("tour",gi=gi,verbose=False) + url = self.get_renderer().get_link(n) + self.list_add_line("tour",gi=GeminiItem(url),verbose=False) else: # Syntax error @@ -1144,7 +1138,7 @@ Marks are temporary until shutdown (not saved to disk).""" """Display information about current page.""" print("current url: %s" %self.current_url) print("current renderer: %s" %self.rendererdic) - renderer = self.get_renderer(self.current_url) + renderer = self.get_renderer() url = self.current_url out = renderer.get_page_title() + "\n\n" out += "URL : " + url + "\n" @@ -1392,8 +1386,8 @@ see "handler" command to set your handler.""" if index: last_gi = self.gi try: - gi = self.gi.get_link(index) - self._go_to_gi(gi, update_hist = False, handle = False) + url = self.get_renderer().get_link(index) + self._go_to_url(url, update_hist = False, handle = False) except IndexError: print ("Index too high!") self.gi = last_gi @@ -1535,7 +1529,7 @@ archives, which is a special historical list limited in size. It is similar to ` if deleted: print("Removed from %s"%li) self.list_add_top("archives",limit=self.options["archives_size"]) - print("Archiving: %s"%self.get_renderer(self.current_url).get_page_title()) + print("Archiving: %s"%self.get_renderer().get_page_title()) print("\x1b[2;34mCurrent maximum size of archives : %s\x1b[0m" %self.options["archives_size"]) def list_add_line(self,list,gi=None,verbose=True): @@ -1654,11 +1648,12 @@ archives, which is a special historical list limited in size. It is similar to ` elif not line.isnumeric(): print("go_to_line requires a number as parameter") else: - gi = GeminiItem("list:///%s"%list) - gi = gi.get_link(int(line)) + r = self.get_renderer("list:///%s"%list) + url = r.get_lin(int(line)) display = not self.sync_only - if gi: - self._go_to_gi(gi,handle=display) + if url: + self._go_to_url(url,handle=display) + #TODO url_mode ? return gi.url_mode() def list_show(self,list):