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 --- Makefile | 1 + feed | 83 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ old/sfeed-browser | 80 +++++++++++++++++++++++++++++++++++++++++++++++++++++ sfeed-browser | 80 ----------------------------------------------------- 4 files changed, 164 insertions(+), 80 deletions(-) create mode 100755 feed create mode 100755 old/sfeed-browser delete mode 100755 sfeed-browser diff --git a/Makefile b/Makefile index daf7c2a..aadfa7c 100644 --- 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 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 diff --git a/old/sfeed-browser b/old/sfeed-browser new file mode 100755 index 0000000..774c808 --- /dev/null +++ b/old/sfeed-browser @@ -0,0 +1,80 @@ +#!/bin/sh + +# This script is based on sfeed (https://codemadness.org/sfeed.html), but +# it allows you organize your feeds in directories and subdirectories. +# In your $sfd directory (see below) you should have two folders: +# urls: it can contain more subfolders and files. Each file should contain +# only one line with the url to the feed. The name of the file is the +# name of the feed (it can contains spaces and such). +# files: this one can be empty, it will be filled with the feed files +# An older version of this script also marked viewed items and removed +# them before displaying the choice of feeds. Contact me if you are interested +# in using it. + +# Requires: sfeed, dmenu-file-picker (or similar), open-url (or similar) + +# Usage: sfeed-browser [-m menu] + +filepicker="dmenu-filepicker" # Try "nnn -p -" +menu="dmenu -l 35 -i" +urlopener=open-url +sfd="$HOME/box/sfeed" +showlast=10 + +usage() { + echo "sfeed-browser [-m MENU]" +} + +while getopts "m:" opt; do + case "$opt" in + m) + menu="$OPTARG" + ;; + *) + usage + exit 1 + ;; + esac +done + +# Might add more stuff later +fixurl() { + sed 's/old\.reddit\.com/reddit\.com/' +} + +dirtofeedpaths() { + while read -r line; do + find "$line" | while read -r fname; do + [ -f "$fname" ] && echo "$fname" + done + done +} + +pathstosfeedrc() { + printf 'sfeedpath="%s"\n\nfeeds() {\n' "$sfd/files" + while read -r line; do + feedname=$(echo "$line" | sed 's/.*\///') + read -r feedurl <"$line" + printf '\tfeed "%s" "%s"\n' "$feedname" "$feedurl" + done + printf "}\n" +} + +feedmenu() { + while read -r line; do + feedname=$(echo "$line" | sed 's/.*\///') + sfeed_plain "$sfd/files/$feedname" | head -$showlast + done | $menu +} + +openfeeds() { + while read -r line; do + url=$(echo "$line" | sed 's/.*[\t ]//' | fixurl) + [ -n "$url" ] && echo "$url" + done | xargs $urlopener +} + +$filepicker "$@" "$sfd/urls" | dirtofeedpaths > "$sfd/last" +pathstosfeedrc < "$sfd/last" > "$sfd/sfeedrc" +sfeed_update "$sfd/sfeedrc" +feedmenu < "$sfd/last" | openfeeds diff --git a/sfeed-browser b/sfeed-browser deleted file mode 100755 index 774c808..0000000 --- a/sfeed-browser +++ /dev/null @@ -1,80 +0,0 @@ -#!/bin/sh - -# This script is based on sfeed (https://codemadness.org/sfeed.html), but -# it allows you organize your feeds in directories and subdirectories. -# In your $sfd directory (see below) you should have two folders: -# urls: it can contain more subfolders and files. Each file should contain -# only one line with the url to the feed. The name of the file is the -# name of the feed (it can contains spaces and such). -# files: this one can be empty, it will be filled with the feed files -# An older version of this script also marked viewed items and removed -# them before displaying the choice of feeds. Contact me if you are interested -# in using it. - -# Requires: sfeed, dmenu-file-picker (or similar), open-url (or similar) - -# Usage: sfeed-browser [-m menu] - -filepicker="dmenu-filepicker" # Try "nnn -p -" -menu="dmenu -l 35 -i" -urlopener=open-url -sfd="$HOME/box/sfeed" -showlast=10 - -usage() { - echo "sfeed-browser [-m MENU]" -} - -while getopts "m:" opt; do - case "$opt" in - m) - menu="$OPTARG" - ;; - *) - usage - exit 1 - ;; - esac -done - -# Might add more stuff later -fixurl() { - sed 's/old\.reddit\.com/reddit\.com/' -} - -dirtofeedpaths() { - while read -r line; do - find "$line" | while read -r fname; do - [ -f "$fname" ] && echo "$fname" - done - done -} - -pathstosfeedrc() { - printf 'sfeedpath="%s"\n\nfeeds() {\n' "$sfd/files" - while read -r line; do - feedname=$(echo "$line" | sed 's/.*\///') - read -r feedurl <"$line" - printf '\tfeed "%s" "%s"\n' "$feedname" "$feedurl" - done - printf "}\n" -} - -feedmenu() { - while read -r line; do - feedname=$(echo "$line" | sed 's/.*\///') - sfeed_plain "$sfd/files/$feedname" | head -$showlast - done | $menu -} - -openfeeds() { - while read -r line; do - url=$(echo "$line" | sed 's/.*[\t ]//' | fixurl) - [ -n "$url" ] && echo "$url" - done | xargs $urlopener -} - -$filepicker "$@" "$sfd/urls" | dirtofeedpaths > "$sfd/last" -pathstosfeedrc < "$sfd/last" > "$sfd/sfeedrc" -sfeed_update "$sfd/sfeedrc" -feedmenu < "$sfd/last" | openfeeds -- cgit v1.3