more elegant solution when redirecting to index.gmi

This commit is contained in:
Lionel Dricot 2021-12-15 11:05:38 +01:00
parent 10d6c3110f
commit 3d6c702fda
2 changed files with 22 additions and 14 deletions

View File

@ -9,12 +9,14 @@ Use "av-98.py --sync" to build a cache containing your bookmarks and all links i
* FIXME1: doesnt handle MIME other than text/gemini
* FIXME2: consider root file is always index.gmi
* FIXME3: if a file exists in the cache where it should have been a folder, it fails (should instead remove the file)
* FIXME4: certificates error are not handled in --synconly
* FIXME5: offline web browser use os.system because its the only one that understands the ">> file.txt"
* FIXME6: sync-only always tries to download "uncachable" content (such as XML, forms, gopher…) This is somewhat related to FIXME1.
* FIXME6: sync-only always tries to download "uncachable" content (such as XML, forms, gopher…) This is somewhat related to FIXME1 and FIXME2.
* TODO: number of cache updated in blackbox
* TODO: dont add to tour when sync from tour/to_fetch
* TODO: dont refresh is cache is young, even for bm
* TODO: https:// gemini:// should be understood without go
This is a fork of the original [AV-98](https://tildegit.org/solderpunk/AV-98)
by Solderpunk.

30
av98.py
View File

@ -158,13 +158,6 @@ class GeminiItem():
# of the file.
if self.cache_path.endswith("/"):
self.cache_path += "index.gmi"
elif not self.cache_path.endswith(".gmi"):
# Thats really a naughty hack
# but else, accessing gemini://mysite/~user while offline
# will truncate all relative links
# mysite/~user/page.gmi would become mysite/page.gmi
self.url += "/"
self.cache_path += "/index.gmi"
def is_cache_valid(self):
# TODO:Try to be smart about when to update a cache
@ -213,7 +206,8 @@ class GeminiItem():
Convert a relative URL to an absolute URL by using the URL of this
GeminiItem as a base.
"""
return urllib.parse.urljoin(self.url, relative_url)
abs_url = urllib.parse.urljoin(self.url, relative_url)
return abs_url
def to_map_line(self, name=None):
if name or self.name:
@ -419,10 +413,21 @@ you'll be able to transparently follow links to Gopherspace!""")
print("original cache used ", gi.url)
mime, body, tmpfile = self._get_cached(gi.url)
elif self.offline_only:
#FIXME : how do we know MIME for cached content?
mime = "text/gemini"
if os.path.exists(gi.cache_path):
with open(gi.cache_path,'r') as file:
if os.path.isdir(gi.cache_path):
# if cache is a directory, then we redirect
# (similar to status 31 over the network)
new_url = gi.url + "/"
new_gi = GeminiItem(new_url,name=gi.name)
self._go_to_gi(new_gi)
return
else:
cached = gi.cache_path
if os.path.isfile(cached):
mime,encoding = mimetypes.guess_type(cached,strict=False)
#gmi Mimetype is not recognized yet
if not mime and cached.endswith('.gmi'):
mime = "text/gemini"
with open(cached,'r') as file:
body = file.read()
file.close()
else:
@ -437,6 +442,7 @@ you'll be able to transparently follow links to Gopherspace!""")
try:
gi, mime, body, tmpfile = self._fetch_over_network(gi)
## We create the permanent cache for "text/gemini"
## FIXME : try caching everything eles ?
if mime == "text/gemini":
cache_dir = os.path.dirname(gi.cache_path)
os.makedirs(cache_dir,exist_ok=True)