dmenu_rss.sh - dotfiles - These are my dotfiles. There are many like it, but these are mine.
 (HTM) git clone git://jay.scot/dotfiles
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
       ---
       dmenu_rss.sh (1719B)
       ---
            1 #!/bin/sh
            2 #
            3 # wrapper for sfeed with the following features
            4 #
            5 # - default to opening item in browser.
            6 # - show only new items in feeds.
            7 # - mpv to play youtube links.
            8 # - caching to hide already viewed items.
            9 # - filter items that you dont want to see.
           10 # - option to show all feeds for searching
           11 
           12 # user config
           13 ignore='parler\|trump\|biden'
           14 feeds="${HOME}/.config/sfeed/feeds/"
           15 
           16 # apps
           17 player=$(which mpv)
           18 browser=$(which qutebrowser)
           19 
           20 # cache
           21 cachedir="${XDG_CACHE_HOME:-"$HOME/.cache"}"
           22 cache_unread="${cachedir}/sfeed_unread"
           23 cache_read="${cachedir}/sfeed_read"
           24 tmpfile=/tmp/sfeedtmp.$$
           25 
           26 [ ! -e "$cachedir" ] && mkdir -p "$cachedir"
           27 [ ! -f "$cache_read" ] && touch "$cache_read"
           28 
           29 contains() {
           30         string="$1"
           31         substring="$2"
           32         if test "${string#*"$substring"}" != "$string"; then
           33                 return 0
           34         else
           35                 return 1
           36         fi
           37 }
           38 
           39 mark_read() {
           40 
           41         sfeed_plain "$feeds/"* | grep '^N' | sort -r >>"$cache_unread"
           42         awk '!seen[$0]++' "$cache_unread" >"$tmpfile"
           43         cat "$tmpfile" >"$cache_read"
           44 }
           45 
           46 show_new() {
           47         true >"$cache_unread"
           48         sfeed_plain "$feeds/"* | grep '^N' | sort -r >>"$cache_unread"
           49         awk '!seen[$0]++' "$cache_unread" >"$tmpfile"
           50 
           51         data=$(grep -vxFf "$cache_read" "$tmpfile" |
           52                 grep -iv "$ignore" | dmenu -l 20 -i)
           53 
           54         rm "$tmpfile"
           55         url=$(echo "$data" | sed -n 's@^.* \([a-zA-Z]*://\)\(.*\)$@\1\2@p')
           56 
           57         test -n "$data" && echo "$data" >>"$cache_read"
           58         show_content "$url"
           59 }
           60 
           61 show_all() {
           62         url=$(sfeed_plain "$feeds"/* | sort -r | dmenu -l 20 -i |
           63                 sed -n 's@^.* \([a-zA-Z]*://\)\(.*\)$@\1\2@p')
           64 
           65         show_content "$url"
           66 }
           67 
           68 show_content() {
           69         if contains "$1" "youtube.com"; then
           70                 $player "$1" || exit 1
           71         fi
           72 
           73         test -n "$1" && $browser "$1"
           74 }
           75 
           76 case $1 in
           77 -a)
           78         show_all
           79         exit
           80         ;;
           81 -r)
           82         mark_read
           83         exit
           84         ;;
           85 *)
           86         show_new
           87         exit
           88         ;;
           89 esac