get_link now in ansirenderer

This commit is contained in:
Lionel Dricot 2023-07-30 23:35:34 +02:00
parent 12c61f4317
commit 4f6ab9225b
2 changed files with 35 additions and 32 deletions

View File

@ -448,6 +448,14 @@ class AbstractRenderer():
for l in self.get_subscribe_links()[1:]: for l in self.get_subscribe_links()[1:]:
self.links[mode].append(l[0]) self.links[mode].append(l[0])
return self.links[mode] 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 #get_title is about the "content title", so the title in the page itself
def get_title(self): def get_title(self):
return "Abstract title" return "Abstract title"

View File

@ -286,16 +286,6 @@ class GeminiItem():
toreturn.append(None) toreturn.append(None)
return toreturn 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 #TODO: should be in ansirenderer
def get_subscribe_links(self): def get_subscribe_links(self):
if self.renderer: if self.renderer:
@ -595,7 +585,9 @@ class GeminiClient(cmd.Cmd):
def complete_move(self,text,line,begidx,endidx): def complete_move(self,text,line,begidx,endidx):
return self.complete_add(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 # reuse existing renderer if any
if url in self.rendererdic.keys(): if url in self.rendererdic.keys():
renderer = self.rendererdic[url] renderer = self.rendererdic[url]
@ -818,17 +810,19 @@ class GeminiClient(cmd.Cmd):
print("What?") print("What?")
return return
# if we have no GeminiItem, there's nothing to do # 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") print("No links to index")
return return
try: else:
gi = self.gi.get_link(n) r = self.get_renderer()
except IndexError: if r:
print ("Index too high!") url = r.get_link(n)
return else:
print("No page with links")
return
self.index_index = n self.index_index = n
self._go_to_gi(gi) self._go_to_url(url)
### Settings ### Settings
def do_redirect(self,line): def do_redirect(self,line):
@ -1157,18 +1151,18 @@ Current tour can be listed with `tour ls` and scrubbed with `tour clear`."""
if len(pair) == 1: if len(pair) == 1:
# Just a single index # Just a single index
n = int(index) n = int(index)
gi = self.gi.get_link(n) url = self.get_renderer().get_link(n)
self.list_add_line("tour",gi=gi,verbose=False) self.list_add_line("tour",gi=GeminiItem(url),verbose=False)
elif len(pair) == 2: elif len(pair) == 2:
# Two endpoints for a range of indices # Two endpoints for a range of indices
if int(pair[0]) < int(pair[1]): if int(pair[0]) < int(pair[1]):
for n in range(int(pair[0]), int(pair[1]) + 1): for n in range(int(pair[0]), int(pair[1]) + 1):
gi = self.gi.get_link(n) url = self.get_renderer().get_link(n)
self.list_add_line("tour",gi=gi,verbose=False) self.list_add_line("tour",gi=GeminiItem(url),verbose=False)
else: else:
for n in range(int(pair[0]), int(pair[1]) - 1, -1): for n in range(int(pair[0]), int(pair[1]) - 1, -1):
gi = self.gi.get_link(n) url = self.get_renderer().get_link(n)
self.list_add_line("tour",gi=gi,verbose=False) self.list_add_line("tour",gi=GeminiItem(url),verbose=False)
else: else:
# Syntax error # Syntax error
@ -1198,7 +1192,7 @@ Marks are temporary until shutdown (not saved to disk)."""
"""Display information about current page.""" """Display information about current page."""
print("current url: %s" %self.current_url) print("current url: %s" %self.current_url)
print("current renderer: %s" %self.rendererdic) print("current renderer: %s" %self.rendererdic)
renderer = self.get_renderer(self.current_url) renderer = self.get_renderer()
url = self.current_url url = self.current_url
out = renderer.get_page_title() + "\n\n" out = renderer.get_page_title() + "\n\n"
out += "URL : " + url + "\n" out += "URL : " + url + "\n"
@ -1446,8 +1440,8 @@ see "handler" command to set your handler."""
if index: if index:
last_gi = self.gi last_gi = self.gi
try: try:
gi = self.gi.get_link(index) url = self.get_renderer().get_link(index)
self._go_to_gi(gi, update_hist = False, handle = False) self._go_to_url(url, update_hist = False, handle = False)
except IndexError: except IndexError:
print ("Index too high!") print ("Index too high!")
self.gi = last_gi self.gi = last_gi
@ -1589,7 +1583,7 @@ archives, which is a special historical list limited in size. It is similar to `
if deleted: if deleted:
print("Removed from %s"%li) print("Removed from %s"%li)
self.list_add_top("archives",limit=self.options["archives_size"]) 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"]) 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): def list_add_line(self,list,gi=None,verbose=True):
@ -1708,11 +1702,12 @@ archives, which is a special historical list limited in size. It is similar to `
elif not line.isnumeric(): elif not line.isnumeric():
print("go_to_line requires a number as parameter") print("go_to_line requires a number as parameter")
else: else:
gi = GeminiItem("list:///%s"%list) r = self.get_renderer("list:///%s"%list)
gi = gi.get_link(int(line)) url = r.get_lin(int(line))
display = not self.sync_only display = not self.sync_only
if gi: if url:
self._go_to_gi(gi,handle=display) self._go_to_url(url,handle=display)
#TODO url_mode ?
return gi.url_mode() return gi.url_mode()
def list_show(self,list): def list_show(self,list):