diff options
author | sinanmohd <sinan@firemail.cc> | 2023-05-31 23:14:00 +0530 |
---|---|---|
committer | sinanmohd <sinan@firemail.cc> | 2023-06-01 00:28:35 +0530 |
commit | bb2360868fcdba4ac7bd46ada5ed97170a58f4ee (patch) | |
tree | 82f73ec29a01fd43093257b9aec02002d65dd48f /tcsv | |
parent | c7eb21d8f8542a42b3c92ddc011937a88ea97bab (diff) |
tcsv: initial commit: posix client for torrents-csv.ml
Diffstat (limited to 'tcsv')
-rwxr-xr-x | tcsv | 149 |
1 files changed, 149 insertions, 0 deletions
@@ -0,0 +1,149 @@ +#!/bin/sh + +url_csv="https://torrents-csv.ml" +menu="wmenu" + +die() +{ + : "${1:?}" + + command -v notify-send > /dev/null && + notify-send " torrents-csv" "$1" + + printf "\033[31;1merr: %b\033[0m\n" "$1" + exit "${2:-1}" +} + +dep_check() +{ + : "${1:?}" + + for dep; do + command -v "$dep" 1>/dev/null || + die "${dep} not found, please install it" 127 + done + + unset dep +} + +search_tcsv() +{ + : "${1:?}" + dep_check curl + + curl "${url_csv}/service/search?q=$(echo "$1" | tr ' ' '+')" \ + --silent \ + --compressed | + grep -o '"[^,}]*' +} + +byttounit() +{ + # usage: bytounuit bytes + : "${1:?}" + + if [ "$1" -lt 1024 ]; then + printf "%d B" "$1" + elif [ "$1" -lt 1048576 ]; then + printf "%.1f KB" "$(echo "$1 / 1024" | bc -l)" + elif [ "$1" -lt 1073741824 ]; then + printf "%.1f MB" "$(echo "$1 / 1048576" | bc -l)" + elif [ "$1" -lt 1099511627776 ]; then + printf "%.1f GB" "$(echo "$1 / 1073741824" | bc -l)" + else + printf "BIG B" + fi +} + +parse_table() +{ + # usage: echo "$fetch" | parse_table + name= + sneed= + leech= + size= + + while read -r line; do + case "$line" in + \"name\":\"*) + name="${line#*:\"}" + name="${name%\"}" + ;; + \"size_bytes\":*) + size="$(byttounit "${line#*:}")" + ;; + \"seeders\":*) + sneed="${line#*:}" + ;; + \"leechers\":*) + leech="${line#*:}" + ;; + \"scraped_date\":*) + printf "%4d %4d %8s %s\n" \ + "$sneed" "$leech" "$size" "$name" + ;; + esac + done | "$menu" -p " " -il 25 | sed 's/.* //g' + + unset name sneed leech size +} + +wheremag() +{ + # usage: echo "$fetch" | wheremag name + : "${1:?}" + + name= + magnet= + + while read -r line; do + case "$line" in + \"infohash\":\"*) + magnet="${line#*:\"}" + magnet="${magnet%\"}" + ;; + \"name\":\"*) + name="${line#*:\"}" + name="${name%\"}" + + if [ "$name" = "$1" ]; then + echo "$magnet" + return + fi + ;; + esac + done + + unset name magnet +} + +query= +fetch= +name= +magnet= + +[ -z "$WAYLAND_DISPLAY" ] && + menu="dmenu" +if [ "$#" -gt 0 ] && [ "$1" = "-o" ]; then + out=true + shift +fi +dep_check "$menu" + +query="${*:-$(printf "" | "$menu" -p " ")}" +[ -z "$query" ] && + exit 1 +fetch="$(search_tcsv "$query")" +[ -z "$fetch" ] && + die "search failed, check your internet connection" +name="$(echo "$fetch" | parse_table)" +[ -z "$name" ] && + exit 1 +magnet="$(echo "$fetch" | wheremag "$name")" + +if [ "$out" = true ]; then + echo "$magnet" +else + dep_check "pirowatch" + pirowatch "$magnet" +fi |