sfeedmenu: fixes, cleanup, add tests, add feed count to dmenu prompt. - sfeed-t… | |
git clone git://bitreich.org/sfeed-tools git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfr… | |
Log | |
Files | |
Refs | |
Tags | |
README | |
--- | |
commit 76fcac95ec842a2a97d95dbd19d56fbda23007a5 | |
parent 6625b04305bf19f598bcc15362e5010d98f2f8e6 | |
Author: eidolon <?> | |
Date: Thu, 7 Nov 2024 21:55:54 -0500 | |
sfeedmenu: fixes, cleanup, add tests, add feed count to dmenu prompt. | |
Diffstat: | |
M sfeedmenu | 39 ++++++++++++++++++++++-------… | |
1 file changed, 28 insertions(+), 11 deletions(-) | |
--- | |
diff --git a/sfeedmenu b/sfeedmenu | |
@@ -2,11 +2,20 @@ | |
# sfeedmenu with filter | |
# by: eidolon | |
+# Set environment variable SFEED_NEW_AGE in seconds to set max | |
+# age of displayed feeds. Default is 24 hours, SFEED_NEW_AGE=$((3600*24)). | |
+ | |
+die() { | |
+ printf '%s: %s\n' "${0##*/}" "$*" >&2 | |
+ exit 1 | |
+} | |
+ | |
filter() { | |
# filter read items and deduplicate items by url | |
LC_ALL=C awk -v urlfile="$urlfile" ' | |
BEGIN { while (getline < urlfile > 0) r[$0] = 1 } | |
{ | |
+ $0 = substr($0, 3) | |
match($0, /[a-z]+:\/\//) | |
url = substr($0, RSTART) | |
if (!dedup[url]++ && !r[url]) | |
@@ -14,26 +23,34 @@ filter() { | |
}' | |
} | |
+graburl() { | |
+ printf '%s\n' "$1" | sed -n 's,.* \([A-Za-z]*://\)\(.*\)$,\1\2,p' | |
+} | |
+ | |
plumber=plumb | |
feeddir="$HOME/.sfeed/feeds" | |
urlfile="$HOME/.sfeed/urls" | |
-mkdir -p "$feeddir" | |
+if [ ! -d "$feeddir" ]; then | |
+ die "$feeddir not found." | |
+fi | |
-[ -f "$urlfile" ] || : > "$urlfile" | |
+if ! command -v "$plumber" >/dev/null; then | |
+ die "$plumber not found." | |
+fi | |
-while IFS= read -r i; do | |
- [ -n "$i" ] || exit 1 | |
+[ -f "$urlfile" ] || : > "$urlfile" | |
- i=$(printf '%s\n' "$i" \ | |
- | sed -n 's,.* \([A-Za-z]*://\)\(.*\)$,\1\2,p') | |
+feeds=$(sfeed_plain "$feeddir"/* | grep '^N' | filter | sort -rn) | |
+count=$(printf '%s\n' "$feeds" | wc -l) | |
+prompt="$count feeds:" | |
+while IFS= read -r i | |
+do | |
+ [ -n "$i" ] || exit 1 | |
+ i=$(graburl "$i") | |
printf '%s\n' "$i" >> "$urlfile" | |
"$plumber" "$i" | |
done << _EOF | |
-$(sfeed_plain "$feeddir"/* \ | |
- | sed -n '/^N / s///p' \ | |
- | sort -rn \ | |
- | filter \ | |
- | dmenu -b -l 12) | |
+$(printf '%s\n' "$feeds" | dmenu -b -p "$prompt" -l 12) | |
_EOF |