From 35b233aa6473b83e1385f247a79bb71b5ff08ef0 Mon Sep 17 00:00:00 2001 From: Gordon GECOS Date: Mon, 29 Jul 2024 16:59:35 -0400 Subject: search --- search | 100 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 100 insertions(+) create mode 100755 search (limited to 'search') diff --git a/search b/search new file mode 100755 index 0000000..191882e --- /dev/null +++ b/search @@ -0,0 +1,100 @@ +#!/bin/bash +set -e +set -o pipefail +shopt -s lastpipe + +encode_query() +{ + perl -e ' +$_ = join " ", map { m/ / ? qq<"$_"> : $_ } @ARGV; +s/([^a-zA-Z0-9])/sprintf "%%%x", ord $1/ge; +print "$_\n" +' "$@" +} + +search_url() +{ + if [ "$1" -gt 1 ] + then + p=$1 + else + p= + fi + q=$(encode_query "${@:2}") + echo https://search.f-droid.org/'?q='"$q"${p:+'&page='$p}'&lang='${lang:-en} +} + +search() +{ + page=${page:-1} + url=$(search_url "$page" "$@") + out=$(mktemp) + curl -s "$url" | + hxclean | + hxselect '.package-header, div.package-info' | + hxnormalize -l 2147483647 > "$out" + trap 'rm -f "$out"' EXIT + hxclean < "$out" | + hxselect -s '\n' 'a.package-header::attr(href)' | + mapfile -t href + hxclean < "$out" | + hxselect -s '\n' h4.package-name | + mapfile -t name + hxclean < "$out" | + hxselect -s '\n' span.package-summary | + mapfile -t summary + [ ${#href[@]} = ${#name[@]} ] + [ ${#href[@]} = ${#summary[@]} ] + OPTIONS=() + for ((i=0; i<${#href[@]}; ++i)) + do + n=${name[$i]} + s=${summary[$i]} + h=${href[$i]} + h=${h#href=\"} + h=${h%\"} + href[$i]=$h + + n=$(w3m -T text/html <<<"$n") + s=$(w3m -T text/html <<<"$s") + OPTIONS+=("$(printf "%40s: %s" "$n" "$s")") + done + PS3='Choose to install, [n]ext, [p]revious, or m for [m]ore> ' + select i in "${OPTIONS[@]}" + do + if [ "$i" ] + then + i=$((REPLY - 1)) + ( + set -x + mkdir repo/"${href[$i]##*/}" + ) + continue + fi + case "${REPLY@L}" in + n ) + let ++page + search "$@" + return + ;; + p ) + let --page + search "$@" + return + ;; + m*[^0-9\ ] ) + continue + ;; + m*[0-9]* ) + i=${REPLY#?} + i=$((i - 1)) + if [ $i -gt 0 -a $i -lt ${#OPTIONS[@]} ] + then + w3m "${href[$i]}" + fi + ;; + esac + done +} + +search "${@:-music}" -- cgit v1.2.3