#!/bin/sh url_csv="https://torrents-csv.ml" menu="bemenu" die() { : "${1:?}" command -v notify-send > /dev/null && notify-send "󰎁 torrents-csv" "$1" printf "\033[31;1merr: %b\033[0m\n" "$1" 1>&2 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 \ --write-out "%{http_code}" } 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= data= 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")" case "$fetch" in *200) [ "$fetch" = '[]200' ] && die "no results found" data="$(echo "$fetch" | grep -o '"[^,}]*')" ;; *) die "search failed, check your internet connection" ;; esac name="$(echo "$data" | parse_table)" [ -z "$name" ] && exit 1 magnet="$(echo "$data" | wheremag "$name")" if [ "$out" = true ]; then echo "$magnet" else dep_check "pirowatch" pirowatch "$magnet" fi