more elegant solution when redirecting to index.gmi
This commit is contained in:
parent
10d6c3110f
commit
3d6c702fda
|
@ -9,12 +9,14 @@ Use "av-98.py --sync" to build a cache containing your bookmarks and all links i
|
||||||
|
|
||||||
* FIXME1: doesn’t handle MIME other than text/gemini
|
* FIXME1: doesn’t handle MIME other than text/gemini
|
||||||
* FIXME2: consider root file is always index.gmi
|
* 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
|
* FIXME4: certificates error are not handled in --synconly
|
||||||
* FIXME5: offline web browser use os.system because it’s the only one that understands the ">> file.txt"
|
* FIXME5: offline web browser use os.system because it’s 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: number of cache updated in blackbox
|
||||||
|
* TODO: don’t add to tour when sync from tour/to_fetch
|
||||||
|
* TODO: don’t 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)
|
This is a fork of the original [AV-98](https://tildegit.org/solderpunk/AV-98)
|
||||||
by Solderpunk.
|
by Solderpunk.
|
||||||
|
|
30
av98.py
30
av98.py
|
@ -158,13 +158,6 @@ class GeminiItem():
|
||||||
# of the file.
|
# of the file.
|
||||||
if self.cache_path.endswith("/"):
|
if self.cache_path.endswith("/"):
|
||||||
self.cache_path += "index.gmi"
|
self.cache_path += "index.gmi"
|
||||||
elif not self.cache_path.endswith(".gmi"):
|
|
||||||
# That’s 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):
|
def is_cache_valid(self):
|
||||||
# TODO: Try to be smart about when to update a cache
|
# 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
|
Convert a relative URL to an absolute URL by using the URL of this
|
||||||
GeminiItem as a base.
|
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):
|
def to_map_line(self, name=None):
|
||||||
if name or self.name:
|
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)
|
print("original cache used ", gi.url)
|
||||||
mime, body, tmpfile = self._get_cached(gi.url)
|
mime, body, tmpfile = self._get_cached(gi.url)
|
||||||
elif self.offline_only:
|
elif self.offline_only:
|
||||||
#FIXME : how do we know MIME for cached content?
|
if os.path.isdir(gi.cache_path):
|
||||||
mime = "text/gemini"
|
# if cache is a directory, then we redirect
|
||||||
if os.path.exists(gi.cache_path):
|
# (similar to status 31 over the network)
|
||||||
with open(gi.cache_path,'r') as file:
|
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()
|
body = file.read()
|
||||||
file.close()
|
file.close()
|
||||||
else:
|
else:
|
||||||
|
@ -437,6 +442,7 @@ you'll be able to transparently follow links to Gopherspace!""")
|
||||||
try:
|
try:
|
||||||
gi, mime, body, tmpfile = self._fetch_over_network(gi)
|
gi, mime, body, tmpfile = self._fetch_over_network(gi)
|
||||||
## We create the permanent cache for "text/gemini"
|
## We create the permanent cache for "text/gemini"
|
||||||
|
## FIXME : try caching everything eles ?
|
||||||
if mime == "text/gemini":
|
if mime == "text/gemini":
|
||||||
cache_dir = os.path.dirname(gi.cache_path)
|
cache_dir = os.path.dirname(gi.cache_path)
|
||||||
os.makedirs(cache_dir,exist_ok=True)
|
os.makedirs(cache_dir,exist_ok=True)
|
||||||
|
|
Loading…
Reference in New Issue