added scheme extensions and fixed URIs only remembering their domains when replaced.

This commit is contained in:
Emma Tebibyte 2023-03-22 14:38:04 -04:00
parent da348f82f2
commit ada7c6976f
Signed by: emma
GPG Key ID: 6D661C738815E7DD
3 changed files with 47 additions and 25 deletions

View File

@ -39,29 +39,39 @@ Extensions are written using TOML and are stored in either
Extension support requires the installation of the `tomcat(1)` tool, which
parses TOML for the command line.
There are two types of extensions: MIME and replace. MIME extensions are parsed
first and replace the MIME type of the content being fetched. Replace extensions
change the URI passed to the command to another.
There are three kinds of extensions: MIME, replace, and scheme. MIME extensions
are parsed first and replace the MIME type of the content being fetched. Replace
extensions change the URI passed to the command to another. Scheme extensions
replace the protocol by which the URI hostname is being accessed.
The type of the extension depends on the file name. MIME extensions should have
a name ending in `-mime.toml` and replace extensions should have
`-replace.toml`.
a name ending in `.mime.toml`, replace extensions should have
`.replace.toml`, and scheme extensions should end with `.scheme.toml`.
Here's what a MIME extension looks like:
```
$ cat $XDG_DATA_HOME/xdg-sanity/youtube-mime.toml
$ cat $XDG_DATA_HOME/xdg-sanity/youtube.mime.toml
[replace]
urls = [ "youtube.com", "youtu.be" ]
[with]
mime = "video/vnd.youtube.yt"
```
and here's what a replace extension looks like:
what a replace extension looks like:
```
$ cat $XDG_DATA_HOME/xdg-sanity/youtube-replace.toml
$ cat $XDG_DATA_HOME/xdg-sanity/youtube.replace.toml
[replace]
urls = [ "youtube.com", "youtu.be" ]
[with]
url = "https://piped.mint.lgbt/"
```
and what a scheme extension looks like:
```
$ cat $XDG_DATA_HOME/xdg-sanity/spotify.scheme.toml
[replace]
urls = [ "spotify.com" ]
[with]
scheme = "spotify://"
```

View File

@ -1,7 +0,0 @@
# xdg-sanity mime extension
[replace] # replaces these urls
urls = [ "youtube.com", "youtu.be" ]
[with] # replaces the mime type of the above
mime = "video/vnd.youtube.yt"

View File

@ -63,17 +63,22 @@ while test -n "$1"; do
MIME="$(curl -Ls -o /dev/null -w '%{content_type}' "$1" | sed 's/\;.*//' \
| xargs echo)"
# get the URL with no scheme
NO_SCHEME="$(printf "%s\n" "$URL" | sed -n 's/^h.\+\/\///p')"
# get the pattern for the extensions to MATCH
MATCH="$(printf "%s\n" "$URL" | sed -ne 's/^h.\+\/\///p' \
| sed -e 's/\/.*\+//g')"
MATCH="$(printf "%s\n" "$NO_SCHEME" | sed 's/\/.*\+//g')"
# get the non-domain of the URI for tacking onto the end of replaced URIs
URI="$(printf "%s\n" "$NO_SCHEME" | sed -n 's/^[^/]*\///p')"
# only check for extensions if tomcat(1) is installed
if command -v tomcat >/dev/null 2>&1; then
# run through MIME extensions
for file in \
"$XDG_DATA_HOME"/xdg-sanity/*-mime.toml \
/usr/share/xdg-sanity/*-mime.toml \
/usr/local/share/xdg-sanity/*-mime.toml
"$XDG_DATA_HOME"/xdg-sanity/*.mime.toml \
/usr/share/xdg-sanity/*.mime.toml \
/usr/local/share/xdg-sanity/*.mime.toml
do
if test -e "$file"; then
get_urls
@ -85,21 +90,35 @@ while test -n "$1"; do
fi
done
# and the replace extensions
# then replace extensions
for file in \
"$XDG_DATA_HOME"/xdg-sanity/*-replace.toml \
/usr/share/xdg-sanity/*-replace.toml \
/usr/local/share/xdg-sanity/*-replace.toml
"$XDG_DATA_HOME"/xdg-sanity/*.replace.toml \
/usr/share/xdg-sanity/*.replace.toml \
/usr/local/share/xdg-sanity/*.replace.toml
do
if test -e "$file"; then
get_urls
for url in $URLS; do
if [ "$MATCH" = "$url" ]; then
URL="$(tomcat with.url "$file")"
URL="$(tomcat with.url "$file")$URI"
fi
done
fi
done
# and the scheme extensions
for file in \
"$XDG_DATA_HOME"/xdg-sanity/*.scheme.toml \
/usr/share/xdg-sanity/*.scheme.toml \
/usr/local/share/xdg-sanity/*.scheme.toml
do
get_urls
for url in $URLS; do
if [ "$URL" = "$url" ]; then
URL="$(tomcat with.scheme "$file")$MATCH"
fi
done
done
fi
# these commands may fail; this is intentional