summaryrefslogtreecommitdiff
path: root/bin/menuscripts
diff options
context:
space:
mode:
authorRaymaekers Luca <raymaekers.luca@gmail.com>2024-07-11 21:48:56 +0200
committerRaymaekers Luca <raymaekers.luca@gmail.com>2024-07-11 21:48:56 +0200
commita857f247d9a71b88a4f0dbcfa95e3679e8456e70 (patch)
tree846ddcd8117be1505a970e3638fc65d0ec954a2e /bin/menuscripts
parent75196520b3d6a0e60db1d03a64aaa0655cc4f202 (diff)
parent6251d6ba1054cd79387f0f88ce25d2f4bc8b78c4 (diff)
Merge branch 'main' of debuc.com:dotfiles
Diffstat (limited to 'bin/menuscripts')
-rwxr-xr-xbin/menuscripts/mmedia91
-rwxr-xr-xbin/menuscripts/tsh275
2 files changed, 171 insertions, 195 deletions
diff --git a/bin/menuscripts/mmedia b/bin/menuscripts/mmedia
index 3141c3b..f4e6e3c 100755
--- a/bin/menuscripts/mmedia
+++ b/bin/menuscripts/mmedia
@@ -6,52 +6,65 @@ dirs="$HOME/dl"
concat_path() { sed "s#^$HOME#\~#;s#\([^/]\)[^/]*/#\1/#g"; }
-case "$1" in
- "video")
- regex='^.\+\.\(webm\|mp4\|mpeg\|mkv\)$'
- dirs="$dirs $HOME/vids"
- viewer() { $PLAYER "$1"; } ;;
- "pdf")
- regex='^.\+\.\(pdf\)$'
- dirs="$dirs $HOME/docs"
- viewer() { $VIEWER "$1"; } ;;
- "image")
- regex='^.\+\.\(png\|avif\|jpg\)$'
- dirs="$dirs $HOME/pics"
- viewer() { $IMAGE "$1"; } ;;
- "cursus")
- regex='^.*/[cC]ursus/index.html$'
- dirs="$HOME/docs/school/Vakken"
- concat_path() { sed "s#$dirs/##;s#/[cC]ursus/index.html##"; }
- viewer() { $BROWSER "$1"; } ;;
- "schoolpdf")
- regex='^.\+\.\(pdf\)$'
- dirs="$HOME/docs/school/Vakken"
- concat_path() { sed "s#$dirs/##;s#/[cC]ursus/index.html##;s#/Cursus/viewer/files/#: #"; }
- viewer() { $VIEWER "$1"; } ;;
- *)
- choice="$(cat <<-EOF | dmenu -g 5 -l 1 -c
- video
- pdf
- image
- cursus
- schoolpdf
+case "$1" in
+"video")
+ regex='^.\+\.\(webm\|mp4\|mpeg\|mkv\)$'
+ dirs="$dirs $HOME/vids"
+ viewer() { $PLAYER "$1"; }
+ ;;
+"pdf")
+ regex='^.\+\.\(pdf\)$'
+ dirs="$dirs $HOME/docs"
+ viewer() { $VIEWER "$1"; }
+ ;;
+"image")
+ regex='^.\+\.\(png\|avif\|jpg\)$'
+ dirs="$dirs $HOME/pics"
+ viewer() { $IMAGE "$1"; }
+ ;;
+"cursus")
+ regex='^.*/[cC]ursus/index.html$'
+ dirs="$HOME/docs/school/Vakken"
+ concat_path() { sed "s#$dirs/##;s#/[cC]ursus/index.html##"; }
+ viewer() { $BROWSER "$1"; }
+ ;;
+"schoolpdf")
+ regex='^.\+\.\(pdf\)$'
+ dirs="$HOME/docs/school/Vakken"
+ concat_path() { sed "s#$dirs/##;s#/[cC]ursus/index.html##;s#/Cursus/viewer/files/#: #"; }
+ viewer() { $VIEWER "$1"; }
+ ;;
+"lecture")
+ dmfm $HOME/docs/lecture
+ exit
+ ;;
+*)
+ choice="$(
+ cat <<-EOF | dmenu -g 6 -l 1 -c
+ video
+ pdf
+ image
+ cursus
+ schoolpdf
+ lecture
EOF
- )"
- [ "$choice" ] || exit 1
- "$0" "$choice"
- exit ;;
+ )"
+ [ "$choice" ] || exit 1
+ "$0" "$choice"
+ exit
+ ;;
esac
shift
[ "$1" ] && dirs="$1"
choice="$(
- find -L $dirs 2> /dev/null |
- grep "$regex" |
- sort | tee "$tmp" |
- concat_path |
- dmenu -px -c -i -l 10 -g 1 -x)"
+ find -L $dirs 2>/dev/null |
+ grep -i "$regex" |
+ sort | tee "$tmp" |
+ concat_path |
+ dmenu -px -c -i -l 10 -g 1 -x
+)"
file="$(sed -n "${choice}p" "$tmp")"
[ -r "$file" ] || exit 1
diff --git a/bin/menuscripts/tsh b/bin/menuscripts/tsh
index 0c57ee0..ea582d8 100755
--- a/bin/menuscripts/tsh
+++ b/bin/menuscripts/tsh
@@ -3,206 +3,169 @@
PROG="$(basename "$0")"
## VARIABLES
# copy command and deps variable
-deps="pup curl $MENUCMD"
+deps="pup curl clipp transmission-cli"
MODULES_PATH=$HOME/.local/share/tsh
module='nyaa.sh' # default module
# Files
export tmp="/tmp/$PROG"
+
files="seeds sizes names html tmp_types"
# Use export so that these variables can be used inside of modules
-for file in $files
-do eval "export $file=$tmp/$file"
+for file in $files; do
+ eval "export $file=$tmp/$file"
done
+
# Files not in $files won't be deleted
export results="$tmp/results"
export links="$tmp/links"
categories="music anime movies shows other software games isos books"
-if [ "$WAYLAND_DISPLAY" ]
-then
- clipp() { wl-copy -n; }
- deps="$deps wl-copy"
-else
- clipp() { xclip -selection clipboard -r; }
- deps="$deps xclip"
-fi
-## FUNCTIONS
-
-help ()
-{
- >&2 cat <<-EOF
- Usage: $PROG [options] query
- Options:
- -h Show this help message and exit
- -r Skip getting pages and use last results
- -s OPTION Sort results based on the specified OPTION
- Available options: seeds, size, name
- -m MODULE Select a module, if MODULE is 'list',
- lists out available modules
- -c CATEGORY Select category
- -f Do not list files
- -d Download without confirming
- EOF
+logn() { >&2 printf '%s\n' "$*"; }
+die() {
+ logn "$@"
+ exit 1
}
-
-log () { >&2 printf '%s' "$*"; }
-logn () { >&2 printf '%s\n' "$*"; }
-die () { logn "$@"; exit 1; }
-
-confirm()
-{
- log "$1"
+confirm() {
+ >&2 printf '%s' "$1"
head -n 1 | grep -q "[yY]"
}
-dependencies ()
-{
- for p in $deps
- do
- if ! command -v "$p" > /dev/null
- then
- logn "E: Program '$p' not found."
- error=1
- fi
- done
- [ "${error:-0}" -eq 1 ] && exit 1
-}
-
-# shellcheck disable=SC2046
-# (we use word splitting on purpose)
-isOnline () { grep -q '1' $(echo /sys/class/net/*/carrier | sed 's#/sys/class/net/lo/carrier ##'); }
-
# Remove temp files and quit
-cleanup ()
-{
- for file in $files
- do eval "rm -f \$$file"
+cleanup() {
+ for file in $files; do
+ eval "rm -f \$$file"
done
}
-list_modules () { find -L "$MODULES_PATH" -type f -printf "%f\n"; }
-
-# get a query from user based on MENUCMD
-get_query ()
-{
- isOnline || exit 1
- if [ "${query:="$*"}" ]
- then
- printf "%s" "$query"
- else
- log ' > '
- head -n 1
- fi | tr ' ' '+'
-}
-
-# Select a result from the result file sorterd with sort_results
-# and select with fzf
-select_result ()
-{
- command -v sort_results > /dev/null || sort_results() { sort -k3 -n -r; }
- awk '{print NR, $0}' "$results" |
- sort_results |
- column -t -l 3 |
- fzf -m --with-nth 2.. |
- awk '{print $1}'
-}
-
-show_files()
-{
- hash="${1##*btih:}"
- hash="${hash%%&*}"
-
- # Download the torrent file from a torrent website
- curl -s "https://itorrents.org/torrent/${hash}.torrent" > "$tmp"/.torrent
- transmission-show "$tmp"/.torrent | sed -n '/^FILES/,$p' | head -n -1 | tail -n +3 >&2
- rm -f "$tmp"/.torrent
-}
+list_modules() { find -L "$MODULES_PATH" -type f -printf "%f\n"; }
-trap "exit 1" INT
+trap "exit 2" INT
trap "cleanup" EXIT
## OPTIONS
-skip=0
-while getopts ":hm:rs:c:fd" opt
-do
+while getopts ":hm:rs:c:fd" opt; do
case $opt in
- h) help && exit ;;
- c)
- [ "$OPTARG" = "list" ] && >&2 printf '%s\n' "$categories" && exit
- category="$(printf '%s\n' "$categories" | tr ' ' '\n' | grep -m 1 "^$OPTARG")"
- [ -z "$category" ] && die "No valid category for '$OPTARG'"
- logn "category: $category" ;;
- f) noaskfiles="1" ;;
- d) noaskdownload="1" ;;
- m)
- [ "$OPTARG" = "list" ] && list_modules && exit
- module="$(list_modules | grep -m 1 "^$OPTARG")"
- [ -z "$module" ] && die "No valid module for '$OPTARG'"
- logn "module: $module" ;;
- r)
- [ ! -r "$results" ] && die "No previous results found."
- skip=1 ;;
- s)
- case $OPTARG in
- "seeds") sort_results() { sort -k3 -n -r; } ;;
- "size") sort_results() { sort -k2 -h -r; } ;;
- "name") sort_results() { sort -k4; } ;;
- *) die "argument '$OPTARG' not seeds,size,name" ;;
- esac ;;
- :) die "Option -$OPTARG requires an argument" ;;
- ?) die "Invalid option: -$OPTARG" ;;
+ h)
+ >&2 cat <<-EOF
+ Usage: $PROG [options] query
+ Options:
+ -h Show this help message and exit
+ -r Skip getting pages and use last results
+ -s OPTION Sort results based on the specified OPTION
+ Available options: seeds, size, name
+ -m MODULE Select a module, if MODULE is 'list',
+ lists out available modules
+ -c CATEGORY Select category
+ -f Do not list files
+ -d Download without confirming
+ EOF
+
+ exit
+ ;;
+ c)
+ [ "$OPTARG" = "list" ] && >&2 printf '%s\n' "$categories" && exit
+ category="$(printf '%s\n' "$categories" | tr ' ' '\n' | grep -m 1 "^$OPTARG")"
+ [ -z "$category" ] && die "No valid category for '$OPTARG'"
+ logn "category: $category"
+ ;;
+ f) noaskfiles="1" ;;
+ d) noaskdownload="1" ;;
+ m)
+ [ "$OPTARG" = "list" ] && list_modules && exit
+ module="$(list_modules | grep -m 1 "^$OPTARG")"
+ [ -z "$module" ] && die "No valid module for '$OPTARG'"
+ logn "module: $module"
+ ;;
+ r)
+ [ ! -r "$results" ] && die "No previous results found."
+ skip=1
+ ;;
+ s)
+ case $OPTARG in
+ "seeds") sort_results() { sort -k3 -n -r; } ;;
+ "size") sort_results() { sort -k2 -h -r; } ;;
+ "name") sort_results() { sort -k4; } ;;
+ *) die "argument '$OPTARG' not seeds,size,name" ;;
+ esac
+ ;;
+ :) die "Option -$OPTARG requires an argument" ;;
+ ?) die "Invalid option: -$OPTARG" ;;
esac
done
shift $((OPTIND - 1))
-dependencies
+for p in $deps; do
+ if ! command -v "$p" >/dev/null; then
+ logn "E: Program '$p' not found."
+ error=1
+ fi
+done
+[ "${error:-0}" -eq 1 ] && exit 3
# Get the torrents with module
-if [ $skip -ne 1 ]
-then
+if [ "${skip:-0}" -eq 1 ]; then
+ module="$(tail -n 1 "$links")"
+else
mkdir -p "$tmp"
- query="$(get_query "$*")"
- [ "$query" ] || exit 1
+ query="$(
+ if [ "${query:="$*"}" ]; then
+ printf "%s" "$query"
+ else
+ >&2 printf ' > '
+ head -n 1
+ fi | tr ' ' '+'
+ )"
+ [ "$query" ] || exit 4
- # Get results
- rm -f "$results" "$links"
# shellcheck source=/usr/local/lib/$PROG/nyaa.sh disable=SC1091
. "$MODULES_PATH/$module"
+ rm -f "$results" "$links"
+ get_torrents
+
[ -f "$results" ] || die "No results."
- # Save which module was used
- printf "%s\n" "$module" >> "$links"
-else
- module="$(tail -n 1 "$links")"
+ # Save which module was used (hack)
+ printf "%s\n" "$module" >>"$links"
fi
-# acquire get_magnet function
-# shellcheck source=/usr/local/lib/$PROG/nyaa.sh disable=SC1091
-getfunctions=1 . "$MODULES_PATH/$module"
+# Default sorting if unset
+command -v sort_results >/dev/null || sort_results() { sort -k3 -n -r; }
# select result from "$results"
-for choice in $(select_result | xargs)
-do
- printf 'choice: %s\n' "$(sed -n "${choice}p" "$results" | cut -f 3-)"
- magnet="$(get_magnet "$choice")"
- [ "$magnet" ] || exit 1
-
- if [ -z "$noaskfiles" ] && confirm 'files?'; then
- show_files "$magnet"
- fi
-
- if [ "$noaskdownload" ] || confirm 'download?'
- then
- [ "$category" ] || category="$(printf '%s' "$categories" | tr ' ' '\n' | fzf)"
- [ "$category" ] || exit 2
- transmission-remote debuc.com -a "$magnet" -w "/downloads/$category"
- elif confirm "copy?"
- then
- echo "$magnet" | clipp
- fi
+for choice in $(
+ # Select result(s) from the result file sorted with sort_results
+ # with fzf
+ awk '{print NR, $0}' "$results" |
+ sort_results |
+ column -t -l 3 |
+ fzf -m --with-nth 2.. |
+ awk 'BEGIN{OFS=" "} {print $1}'
+); do
+
+ printf 'choice: %s\n' "$(sed -n "${choice}p" "$results" | cut -f 3-)"
+ magnet="$(get_magnet "$choice")"
+ [ "$magnet" ] || exit 5
+
+ if [ -z "$noaskfiles" ] && confirm 'files?'; then
+ hash="${1##*btih:}"
+ hash="${hash%%&*}"
+
+ # Download the torrent file from a torrent website
+ curl -s "https://itorrents.org/torrent/${hash}.torrent" >"$tmp"/.torrent
+ transmission-show "$tmp"/.torrent | sed -n '/^FILES/,$p' | head -n -1 | tail -n +3 >&2
+ rm -f "$tmp"/.torrent
+ fi
+
+ if [ -z "$noaskdownload" ] && confirm 'download?'; then
+ [ "$category" ] || category="$(printf '%s' "$categories" | tr ' ' '\n' | fzf)"
+ [ "$category" ] || exit 6
+ transmission-remote debuc.com -a "$magnet" -w "/downloads/$category"
+ elif confirm "copy?"; then
+ echo "$magnet" | clipp
+ fi
done