blob: 3235feec132137671f0e8fae6aa44e1036f68b30 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
|
#!/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() {
for f in "$destdir"/*; do
ff=$(basename "$f")
if [ -s "$f" ]; then
while read -r line; do
printf '%20s %s\n' "$ff" "$line"
done < "$f"
fi
done | $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
countnew=$(cat "$destdir"/* | wc -l)
echo "$countnew new feed items"
;;
menu)
showmenu
;;
clear)
d="$olddir/$(date +'%Y-%m-%d-%H-%M-%S')"
mkdir "$d"
mv "$destdir"/* "$d/"
;;
show)
cat "$destdir"/*
;;
*)
usage
exit 1
;;
esac
|