forked from solderpunk/AV-98
next work : reimplementing list and local files
This commit is contained in:
parent
7ba6bac5a4
commit
a6fee03d2b
|
@ -443,7 +443,10 @@ class AbstractRenderer():
|
|||
def is_local(self):
|
||||
#TODO with self.url
|
||||
return False
|
||||
def set_mode(self,mode):
|
||||
self.last_mode = mode
|
||||
def get_links(self,mode=None):
|
||||
print("mode : %s and last_mode : %s (%s)"%(mode,self.last_mode,self.url))
|
||||
if not mode: mode = self.last_mode
|
||||
if mode not in self.links :
|
||||
prepared_body = self.prepare(self.body,mode=mode)
|
||||
|
@ -503,7 +506,8 @@ class AbstractRenderer():
|
|||
|
||||
# This function return a list of URL which should be downloaded
|
||||
# before displaying the page (images in HTML pages, typically)
|
||||
def get_images(self,mode="readable"):
|
||||
def get_images(self,mode=None):
|
||||
if not mode: mode = self.last_mode
|
||||
if not mode in self.images:
|
||||
self.get_body(mode=mode)
|
||||
# we also invalidate the body that was done without images
|
||||
|
@ -516,7 +520,8 @@ class AbstractRenderer():
|
|||
def prepare(self,body,mode=None):
|
||||
return body
|
||||
|
||||
def get_body(self,width=None,mode="readable"):
|
||||
def get_body(self,width=None,mode=None):
|
||||
if not mode: mode = self.last_mode
|
||||
if not width:
|
||||
width = term_width()
|
||||
if mode not in self.rendered_text:
|
||||
|
@ -560,7 +565,8 @@ class AbstractRenderer():
|
|||
less_cmd(self.temp_files[mode], histfile=self.less_histfile[mode],cat=firsttime,grep=grep)
|
||||
return True
|
||||
|
||||
def get_temp_file(self,mode="readable"):
|
||||
def get_temp_file(self,mode=None):
|
||||
if not mode: mode = self.last_mode
|
||||
if mode in self.temp_files:
|
||||
return self.temp_files[mode]
|
||||
else:
|
||||
|
@ -849,7 +855,8 @@ class FeedRenderer(GemtextRenderer):
|
|||
self.get_body()
|
||||
return self.title
|
||||
|
||||
def prepare(self,content,mode="readable",width=None):
|
||||
def prepare(self,content,mode=None,width=None):
|
||||
if not mode: mode = self.last_mode
|
||||
if not width:
|
||||
width = term_width()
|
||||
self.title = "RSS/Atom feed"
|
||||
|
@ -972,7 +979,8 @@ class HtmlRenderer(AbstractRenderer):
|
|||
# Our own HTML engine (crazy, isn’t it?)
|
||||
# Return [rendered_body, list_of_links]
|
||||
# mode is either links_only, readable or full
|
||||
def render(self,body,mode="readable",width=None,add_title=True):
|
||||
def render(self,body,mode=None,width=None,add_title=True):
|
||||
if not mode: mode = self.last_mode
|
||||
if not width:
|
||||
width = term_width()
|
||||
if not _DO_HTML:
|
||||
|
|
40
offpunk.py
40
offpunk.py
|
@ -199,7 +199,7 @@ class GeminiItem():
|
|||
toreturn = []
|
||||
if self.renderer:
|
||||
if not mode:
|
||||
mode = self.last_mode
|
||||
mode = self.renderer.last_mode
|
||||
links = self.renderer.get_links(mode=mode)
|
||||
for l in links:
|
||||
#split between link and potential name
|
||||
|
@ -400,8 +400,6 @@ class GeminiClient(cmd.Cmd):
|
|||
self.gi = None
|
||||
self.current_url = None
|
||||
self.hist_index = 0
|
||||
self.index = []
|
||||
self.index_index = -1
|
||||
self.marks = {}
|
||||
self.page_index = 0
|
||||
self.permanent_redirects = {}
|
||||
|
@ -508,15 +506,13 @@ class GeminiClient(cmd.Cmd):
|
|||
|
||||
def get_renderer(self,url=None):
|
||||
# If launched without argument, we return the renderer for the current URL
|
||||
mode = None
|
||||
if not url: url = self.url
|
||||
findmode = url.split("##offpunk_mode=")
|
||||
if len(findmode) > 1:
|
||||
url = findmode[0]
|
||||
if findmode[1] in ["full"] or findmode[1].isnumeric():
|
||||
#TODO: what should we do with last mode ?
|
||||
last_mode = findmode[1]
|
||||
else:
|
||||
self.url = url
|
||||
mode = findmode[1]
|
||||
# reuse existing renderer if any
|
||||
if url in self.rendererdic.keys():
|
||||
renderer = self.rendererdic[url]
|
||||
|
@ -530,6 +526,9 @@ class GeminiClient(cmd.Cmd):
|
|||
print("WARNING: no cache for requested renderer for %s" %url)
|
||||
#TODO FIXME
|
||||
return None
|
||||
self.url = url
|
||||
if mode:
|
||||
renderer.set_mode(mode)
|
||||
return renderer
|
||||
#TODO: go_to_gi should take an URL as parameter, not gi
|
||||
#it should also only be called to really go, not for all links
|
||||
|
@ -568,8 +567,6 @@ class GeminiClient(cmd.Cmd):
|
|||
# print("Sorry, no support for {} links.".format(gi.scheme))
|
||||
# return
|
||||
url = gi.url
|
||||
if not mode:
|
||||
mode = gi.last_mode
|
||||
# Obey permanent redirects
|
||||
if url in self.permanent_redirects:
|
||||
self._go_to_url(self.permanent_redirects[url],name=gi.name,mode=mode)
|
||||
|
@ -588,6 +585,12 @@ class GeminiClient(cmd.Cmd):
|
|||
params["offline"] = self.offline_only
|
||||
cachepath = netcache.fetch(url,**params)
|
||||
renderer = self.get_renderer(url)
|
||||
if not renderer:
|
||||
print("no renderer for %s"%url)
|
||||
print("mode is originally : %s"%mode)
|
||||
if not mode:
|
||||
mode = renderer.last_mode
|
||||
print("now mode is %s" %mode)
|
||||
# Use cache or mark as to_fetch if resource is not cached
|
||||
if not cachepath:
|
||||
self.get_list("to_fetch")
|
||||
|
@ -631,10 +634,10 @@ class GeminiClient(cmd.Cmd):
|
|||
title += " (%s links)"%nbr
|
||||
is_rendered = renderer.display(mode=mode,\
|
||||
window_title=title,window_info=str_last)
|
||||
print("after display: last_mode = %s" %renderer.last_mode)
|
||||
print("renderers : %s"%self.rendererdic)
|
||||
if display and is_rendered:
|
||||
self.index = gi.get_links()
|
||||
self.page_index = 0
|
||||
self.index_index = -1
|
||||
# Update state (external files are not added to history)
|
||||
self.gi = gi
|
||||
self.current_url = url
|
||||
|
@ -687,6 +690,7 @@ class GeminiClient(cmd.Cmd):
|
|||
|
||||
@needs_gi
|
||||
def _show_lookup(self, offset=0, end=None, url=False):
|
||||
#TODO: change get_links to use the renderer
|
||||
for n, gi in enumerate(self.gi.get_links()[offset:end]):
|
||||
print(self._format_geminiitem(n+offset+1, gi, url))
|
||||
|
||||
|
@ -764,7 +768,6 @@ class GeminiClient(cmd.Cmd):
|
|||
print("No page with links")
|
||||
return
|
||||
|
||||
self.index_index = n
|
||||
|
||||
### Settings
|
||||
def do_redirect(self,line):
|
||||
|
@ -931,10 +934,9 @@ Use with "cache" to copy the path of the cached content."""
|
|||
args = arg.split()
|
||||
if args and args[0] == "url":
|
||||
if len(args) > 1 and args[1].isdecimal():
|
||||
gi = self.index[int(args[1])-1]
|
||||
url = gi.url
|
||||
url = self.get_renderer().get_link(int(args[1])-1)
|
||||
else:
|
||||
url = self.gi.url
|
||||
url = self.url
|
||||
run("xsel -b -i", input=url, direct_output=True)
|
||||
elif args and args[0] == "raw":
|
||||
run("xsel -b -i", input=open(self.gi.get_temp_filename(), "rb"), direct_output=True)
|
||||
|
@ -1070,6 +1072,7 @@ Current tour can be listed with `tour ls` and scrubbed with `tour clear`."""
|
|||
for l in self.list_get_links("tour"):
|
||||
self.list_rm_url(l.url_mode(),"tour")
|
||||
elif line == "*":
|
||||
#TODO: change to use renderer.get_links and change list_add_line
|
||||
for l in self.gi.get_links():
|
||||
self.list_add_line("tour",gi=l,verbose=False)
|
||||
elif line == ".":
|
||||
|
@ -1084,6 +1087,7 @@ Current tour can be listed with `tour ls` and scrubbed with `tour clear`."""
|
|||
gi = GeminiItem("list:///%s"%line)
|
||||
display = not self.sync_only
|
||||
if gi:
|
||||
#TODO : change get_links
|
||||
for l in gi.get_links():
|
||||
self.list_add_line("tour",gi=l,verbose=False)
|
||||
else:
|
||||
|
@ -1268,7 +1272,7 @@ Use 'ls -l' to see URLs."""
|
|||
def emptyline(self):
|
||||
"""Page through index ten lines at a time."""
|
||||
i = self.page_index
|
||||
if not self.gi or i > len(self.gi.get_links()):
|
||||
if not self.gi or i > len(self.get_renderer().get_links()):
|
||||
return
|
||||
self._show_lookup(offset=i, end=i+10)
|
||||
self.page_index += 10
|
||||
|
@ -1632,8 +1636,7 @@ archives, which is a special historical list limited in size. It is similar to `
|
|||
def list_get_links(self,list):
|
||||
list_path = self.list_path(list)
|
||||
if list_path:
|
||||
gi = GeminiItem("list:///%s"%list)
|
||||
return gi.get_links()
|
||||
return self.get_renderer("list:///%s"%list).get_links()
|
||||
else:
|
||||
return []
|
||||
|
||||
|
@ -2007,6 +2010,7 @@ Argument : duration of cache validity (in seconds)."""
|
|||
#we should only savetotour at the first level of recursion
|
||||
# The code for this was removed so, currently, we savetotour
|
||||
# at every level of recursion.
|
||||
#TODO: get rid of gitem
|
||||
links = gitem.get_links(mode="links_only")
|
||||
subcount = [0,len(links)]
|
||||
d = depth - 1
|
||||
|
|
Loading…
Reference in New Issue