From 06931dfdb443584a2c140bf53a12cff9dc239557 Mon Sep 17 00:00:00 2001 From: Sebastiano Tronto Date: Sun, 2 Jul 2023 13:36:02 +0200 Subject: New feed manager --- feed | 83 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 83 insertions(+) create mode 100755 feed (limited to 'feed') diff --git a/feed b/feed new file mode 100755 index 0000000..2a513a7 --- /dev/null +++ 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 -- cgit v1.3