works at Volvo

This commit is contained in:
Lionel Dricot 2023-07-31 09:34:12 +02:00
parent 26ed1769de
commit 7ba6bac5a4
2 changed files with 40 additions and 38 deletions

View File

@ -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

View File

@ -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."""