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