commit 06931dfdb443584a2c140bf53a12cff9dc239557
parent 026bcfc65687ba14299ea2f553940f62388874ce
Author: Sebastiano Tronto <sebastiano@tronto.net>
Date:   Sun,  2 Jul 2023 13:36:02 +0200
New feed manager
Diffstat:
3 files changed, 84 insertions(+), 0 deletions(-)
diff --git a/Makefile b/Makefile
@@ -14,6 +14,7 @@ SCRIPTS =       addressgrep \
 		dmenu-unmount \
 		dmenu-urlselect \
 		dmenu-websearch \
+		feed \
 		ffmpeg-screenrecord \
 		ffmpeg-facecam \
 		mail-compose \
diff --git a/feed b/feed
@@ -0,0 +1,83 @@
+#!/bin/sh
+
+# RSS feed manager
+
+# Requires: sfeed, sfeed_plain (get), dmenu, open-url (menu)
+
+# Usage: feed [-m menu] [get|menu|clear|edit]
+
+dir=$HOME/box/sfeed
+feeddir=$dir/urls
+destdir=$dir/new
+olddir=$dir/old
+readdir=$dir/last
+menu="dmenu -l 20 -i"
+urlopener=open-url
+
+usage() {
+	echo "Usage: feed [get|menu|clear|show]"
+}
+
+getnew() {
+	for f in "$feeddir"/*; do
+		read -r url < "$f"
+		name=$(basename "$f")
+		d="$destdir/$name"
+		r="$readdir/$name"
+
+		[ -f "$r" ] && read -r lr < "$r" || lr=0
+
+		# Get new feed items
+		tmp=$(mktemp)
+		curl -s "$url" | sfeed | \
+		awk -v lr="$lr" '$1 > lr {print $0}' | \
+		tee "$tmp" | sfeed_plain >> "$d"
+
+		# Update last time stamp
+		awk -v lr="$lr" '$1 > lr {lr=$1} END {print lr}' <"$tmp" >"$r"
+	done
+}
+
+showmenu() {
+	cat "$destdir"/* | $menu | awk '{print $NF}' | xargs $urlopener
+}
+
+while getopts "m:" opt; do
+	case "$opt" in
+		m)
+			menu="$OPTARG"
+			;;
+		*)
+			usage
+			exit 1
+			;;
+	esac
+done
+
+shift $((OPTIND - 1))
+
+if [ -z "$1" ]; then
+	usage
+	exit 1
+fi
+
+case "$1" in
+	get)
+		getnew
+		;;
+	menu)
+		showmenu
+		;;
+	clear)
+		d="$olddir/$(date +'%Y-%m-%d-%H-%M-%S')"
+		mkdir "$d"
+		mv "$destdir"/* "$d/"
+		;;
+	show)
+		cat "$destdir"/*
+		;;
+	*)
+		usage
+		exit 1
+		;;
+esac
diff --git a/sfeed-browser b/old/sfeed-browser