X-Git-Url: https://git.armaanb.net/?p=bin.git;a=blobdiff_plain;f=rss;h=5a1da2de44a451ff818fdc1eef0a0f52c59c6085;hp=cfd93e6d5163e9d5f1e77cd910e4da200effbf0c;hb=HEAD;hpb=a8bd0bb1b73a2ca13eda633726b85f644b1edf4b diff --git a/rss b/rss index cfd93e6..5a1da2d 100755 --- a/rss +++ b/rss @@ -1,24 +1,33 @@ #!/usr/bin/env sh -file=${2:-$HOME/org/feeds} -total=$(wc -l "$file" | cut -d " " -f 1) -cachedir=${XDG_CACHE_HOME:-$HOME/.cache/}/sfeed +dl() { + while read -r feed; do + printf "Processing %s\n" "$feed" + curl -s "$feed" | xmllint --format - 1> /tmp/sfeed 2> /dev/null + + title="$(grep -m 1 title /tmp/sfeed | \ + xmllint --xpath "string(//title)" - 2> /dev/null)" + domain=$(echo "$feed" | cut -d/ -f 3) + fname=$(echo "${title:-$domain}" | sed 's|/|!|g' | head -c 25) + sfeed < /tmp/sfeed > "$cachedir/$fname" + done < "$1" +} -mkdir -p "$cachedir" +trap 'trap - SIGTERM && kill -- -$$' INT TERM EXIT -i=1 -while read -r feed; do - printf "Downloading %s\n%s/%s\r" "$feed" "$i" "$total" - curl -s "$feed" | xmllint --format - > /tmp/sfeed - - title="$(grep -m 1 title /tmp/sfeed | xmllint --xpath "string(//title)" -)" - domain=$(echo "$feed" | cut -d/ -f 3) - fname=$(echo "${title:-$domain}" | sed 's|/|!|g' | head -c 25) - sfeed < /tmp/sfeed > "$cachedir/$fname" +file=${1:-$HOME/org/feeds} +total=$(wc -l "$file" | cut -d " " -f 1) +cachedir=${XDG_CACHE_HOME:-$HOME/.cache/}/sfeed +threads=${2:-4} +pere=$(($((total + threads - 1)) / threads)) - i=$((i+1)) -done < "$file" +mkdir -p "$cachedir/split" +(cd "$cachedir/split" || exit; split -l "$pere" "$file") -rm /tmp/sfeed +for j in "$cachedir/split"/*; do + dl "$j" & +done +wait +rm -rf /tmp/sfeed "$cachedir/split" sfeed_curses "$cachedir"/*