forked from solderpunk/AV-98
works at Volvo
This commit is contained in:
parent
26ed1769de
commit
7ba6bac5a4
|
@ -210,9 +210,10 @@ class AbstractRenderer():
|
|||
self.images = {}
|
||||
self.title = None
|
||||
self.validity = True
|
||||
self.temp_file = {}
|
||||
self.temp_files = {}
|
||||
self.less_histfile = {}
|
||||
self.center = center
|
||||
self.last_mode = "readable"
|
||||
|
||||
#This class hold an internal representation of the HTML text
|
||||
class representation:
|
||||
|
@ -439,7 +440,11 @@ class AbstractRenderer():
|
|||
return [[self.url,self.get_mime(),self.get_title()]]
|
||||
def is_valid(self):
|
||||
return self.validity
|
||||
def get_links(self,mode="links_only"):
|
||||
def is_local(self):
|
||||
#TODO with self.url
|
||||
return False
|
||||
def get_links(self,mode=None):
|
||||
if not mode: mode = self.last_mode
|
||||
if mode not in self.links :
|
||||
prepared_body = self.prepare(self.body,mode=mode)
|
||||
results = self.render(prepared_body,mode=mode)
|
||||
|
@ -533,16 +538,17 @@ class AbstractRenderer():
|
|||
title_r.close_color("red")
|
||||
return title_r.get_final()
|
||||
|
||||
def display(self,mode="readable",window_title="",window_info=None,grep=None):
|
||||
if not mode: mode = "readable"
|
||||
def display(self,mode=None,window_title="",window_info=None,grep=None):
|
||||
if mode: self.last_mode = mode
|
||||
else: mode = self.last_mode
|
||||
wtitle = self._window_title(window_title,info=window_info)
|
||||
body = wtitle + "\n" + self.get_body(mode=mode)
|
||||
if not body:
|
||||
return False
|
||||
# We actually put the body in a tmpfile before giving it to less
|
||||
if mode not in self.temp_file:
|
||||
if mode not in self.temp_files:
|
||||
tmpf = tempfile.NamedTemporaryFile("w", encoding="UTF-8", delete=False)
|
||||
self.temp_file[mode] = tmpf.name
|
||||
self.temp_files[mode] = tmpf.name
|
||||
tmpf.write(body)
|
||||
tmpf.close()
|
||||
if mode not in self.less_histfile:
|
||||
|
@ -551,12 +557,12 @@ class AbstractRenderer():
|
|||
self.less_histfile[mode] = tmpf.name
|
||||
else:
|
||||
firsttime = False
|
||||
less_cmd(self.temp_file[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
|
||||
|
||||
def get_temp_file(self,mode="readable"):
|
||||
if mode in self.temp_file:
|
||||
return self.temp_file[mode]
|
||||
if mode in self.temp_files:
|
||||
return self.temp_files[mode]
|
||||
else:
|
||||
return None
|
||||
|
||||
|
|
54
offpunk.py
54
offpunk.py
|
@ -1,6 +1,3 @@
|
|||
#TODO: migrate go_to_gi to netcache
|
||||
#TODO: separate ansirenderer into ansicat and ansiless
|
||||
#TODO: migrate displaying into ansirenderer
|
||||
#!/usr/bin/env python3
|
||||
# Offpunk Offline Gemini client
|
||||
# Derived from AV-98 by Solderpunk,
|
||||
|
@ -245,28 +242,6 @@ class GeminiItem():
|
|||
else:
|
||||
return []
|
||||
|
||||
#TODO: should be in ansiless
|
||||
def display(self,mode=None,grep=None):
|
||||
if self.renderer and self.renderer.is_valid():
|
||||
if not mode:
|
||||
mode = self.last_mode
|
||||
else:
|
||||
self.last_mode = mode
|
||||
title = self.renderer.get_url_title()
|
||||
if netcache.is_cache_valid(self.url): #and self.offline_only and not self.local:
|
||||
nbr = len(self.get_links(mode=mode))
|
||||
if self.local:
|
||||
title += " (%s items)"%nbr
|
||||
str_last = "local file"
|
||||
else:
|
||||
str_last = "last accessed on %s" %time.ctime(netcache.cache_last_modified(self.url))
|
||||
title += " (%s links)"%nbr
|
||||
return self.renderer.display(mode=mode,window_title=title,window_info=str_last,grep=grep)
|
||||
else:
|
||||
return False
|
||||
else:
|
||||
return False
|
||||
|
||||
def get_filename(self):
|
||||
filename = os.path.basename(netcache.get_cache_path(self.url))
|
||||
return filename
|
||||
|
@ -534,6 +509,14 @@ class GeminiClient(cmd.Cmd):
|
|||
def get_renderer(self,url=None):
|
||||
# If launched without argument, we return the renderer for the current URL
|
||||
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
|
||||
# reuse existing renderer if any
|
||||
if url in self.rendererdic.keys():
|
||||
renderer = self.rendererdic[url]
|
||||
|
@ -635,7 +618,20 @@ class GeminiClient(cmd.Cmd):
|
|||
print(toprint,end="\r")
|
||||
self._go_to_url(image, update_hist=False, check_cache=True, \
|
||||
handle=False,limit_size=True)
|
||||
if display and gi.display(mode=mode):
|
||||
is_rendered = False
|
||||
if display and netcache.is_cache_valid(self.url):
|
||||
title = renderer.get_url_title()
|
||||
nbr = len(renderer.get_links(mode=mode))
|
||||
if renderer.is_local():
|
||||
title += " (%s items)"%nbr
|
||||
str_last = "local file"
|
||||
else:
|
||||
str_last = "last accessed on %s"\
|
||||
%time.ctime(netcache.cache_last_modified(self.url))
|
||||
title += " (%s links)"%nbr
|
||||
is_rendered = renderer.display(mode=mode,\
|
||||
window_title=title,window_info=str_last)
|
||||
if display and is_rendered:
|
||||
self.index = gi.get_links()
|
||||
self.page_index = 0
|
||||
self.index_index = -1
|
||||
|
@ -644,7 +640,7 @@ class GeminiClient(cmd.Cmd):
|
|||
self.current_url = url
|
||||
if update_hist and not self.sync_only:
|
||||
self._update_history(gi)
|
||||
elif display :
|
||||
elif display and not is_rendered :
|
||||
cmd_str = self._get_handler_cmd(ansirenderer.get_mime(gi.url))
|
||||
try:
|
||||
# get body (tmpfile) from gi !
|
||||
|
@ -763,12 +759,12 @@ class GeminiClient(cmd.Cmd):
|
|||
r = self.get_renderer()
|
||||
if r:
|
||||
url = r.get_link(n)
|
||||
self._go_to_url(url)
|
||||
else:
|
||||
print("No page with links")
|
||||
return
|
||||
|
||||
self.index_index = n
|
||||
self._go_to_url(url)
|
||||
|
||||
### Settings
|
||||
def do_redirect(self,line):
|
||||
|
@ -1267,7 +1263,7 @@ Use 'ls -l' to see URLs."""
|
|||
@needs_gi
|
||||
def do_find(self, searchterm):
|
||||
"""Find in current page by displaying only relevant lines (grep)."""
|
||||
self.gi.display(grep=searchterm)
|
||||
self.get_renderer().display(grep=searchterm)
|
||||
|
||||
def emptyline(self):
|
||||
"""Page through index ten lines at a time."""
|
||||
|
|
Loading…
Reference in New Issue