aboutsummaryrefslogtreecommitdiff
path: root/feed
blob: 64e5a5fd59b5270700700ad193c52462a6b60a6c (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
93
94
95
96
#!/bin/sh

# RSS feed manager

# Requires: sfeed, sfeed_plain (get), dmenu, open-url (menu)

# Usage: feed [-m menu] [get|menu|clear|show]

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
}

show() {
	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
}

selectmenu() {
	$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)
		show | selectmenu
		;;
	clear)
		d="$olddir/$(date +'%Y-%m-%d-%H-%M-%S')"
		mkdir "$d"
		mv "$destdir"/* "$d/"
		;;
	show)
		show
		;;
	*)
		usage
		exit 1
		;;
esac

Generated with cgit - Back to sebastiano.tronto.net