#!/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"/*