123 lines
2.9 KiB
Bash
Executable File
123 lines
2.9 KiB
Bash
Executable File
#!/bin/sh
|
|
# SPDX-License-Identifier: AGPL-3.0-only
|
|
# Copyright 2022 Sxmo Contributors
|
|
# title="$icon_rss RSS"
|
|
# include common definitions
|
|
# shellcheck source=configs/default_hooks/sxmo_hook_icons.sh
|
|
. sxmo_hook_icons.sh
|
|
# shellcheck source=scripts/core/sxmo_common.sh
|
|
. sxmo_common.sh
|
|
|
|
FETCHENABLED=1
|
|
|
|
if [ -f "$XDG_CONFIG_HOME/sxmo/sfeedrc" ]; then
|
|
SFEEDCONF="$XDG_CONFIG_HOME/sxmo/sfeedrc"
|
|
elif [ -f "$HOME/.sfeed/sfeedrc" ]; then
|
|
SFEEDCONF="$HOME/.sfeed/sfeedrc"
|
|
else
|
|
SFEEDCONF=$(xdg_data_path sxmo/appcfg/sxmo_sfeedrc)
|
|
fi
|
|
|
|
. "$SFEEDCONF"
|
|
|
|
die() {
|
|
echo "Error: $1"
|
|
exit 1
|
|
}
|
|
|
|
tflt() {
|
|
# Date with feature like "1 day ago" etc main reason
|
|
# coreutils is a dep...
|
|
TIME=$(eval date -d \""$TIMESPAN"\" +%s)
|
|
cat | gawk "\$1 > $TIME"
|
|
}
|
|
|
|
prep_temp_folder_with_items() {
|
|
mkdir -p "$FOLDER"
|
|
rm -rf "${FOLDER:?}/*"
|
|
cd "${sfeedpath:-$HOME/.sfeed/feeds}" || die "Could cd to ${sfeedpath:-$HOME/.sfeed/feeds}"
|
|
for f in ./*; do
|
|
fclean="$(basename "$f")"
|
|
tflt < "$fclean" > "$FOLDER/$fclean"
|
|
[ -s "$FOLDER/$fclean" ] || rm "${FOLDER:?}/$fclean"
|
|
done
|
|
}
|
|
|
|
list_items() {
|
|
cd "$FOLDER" || die "Couldn't cd to $FOLDER"
|
|
printf %b "Close Menu\nChange Timespan\n"
|
|
gawk -F'\t' '{print $1 " " substr(FILENAME, 3) " | " $2 ": " $3}' ./* |\
|
|
grep -E '^[0-9]{5}' |\
|
|
sort -nk1 |\
|
|
sort -r |\
|
|
gawk -F' ' '{printf strftime("%y/%m/%d %H:%M",$1); $1=""; print $0}'
|
|
}
|
|
|
|
|
|
rsstimespanmenu() {
|
|
CHOICE="Fetch"
|
|
while [ "${CHOICE#Fetch}" != "$CHOICE" ]; do
|
|
# Dmenu prompt for timespan
|
|
CHOICES="
|
|
Close Menu
|
|
1 hour ago
|
|
3 hours ago
|
|
12 hours ago
|
|
1 day ago
|
|
2 day ago
|
|
1970-01-01
|
|
Fetch $([ "$FETCHENABLED" = "1" ] && echo "enabled $icon_chk" || echo "disabled (use cache)")
|
|
"
|
|
CHOICE="$(
|
|
echo "$CHOICES" |
|
|
sed '/^[[:space:]]*$/d' |
|
|
awk '{$1=$1};1' |
|
|
sxmo_dmenu.sh -p "RSS Timespan"
|
|
)" || return 0
|
|
|
|
case "$CHOICE" in
|
|
"Close Menu") return 0 ;;
|
|
"Fetch"*) [ "$FETCHENABLED" = 0 ] && FETCHENABLED=1 || FETCHENABLED=0 ;;
|
|
*) TIMESPAN="$CHOICE" ;;
|
|
esac
|
|
done
|
|
|
|
# Update Sfeed via sfeed_update (as long as user didn't request cached)
|
|
[ $FETCHENABLED = 1 ] &&
|
|
sxmo_terminal.sh sh -c "echo Fetching Feeds && sfeed_update $SFEEDCONF"
|
|
|
|
rssreadmenu
|
|
}
|
|
|
|
rssreadmenu() {
|
|
# Make folder like /tmp/sfeed_1_day_ago
|
|
FOLDER="/tmp/sfeed_$(echo "$TIMESPAN" | sed 's/ /_/g')"
|
|
prep_temp_folder_with_items
|
|
TIMESPANABBR="$(
|
|
echo "$TIMESPAN" |
|
|
sed -e 's/ago//g' -e 's/hour\|hours/h/g' -e 's/day\|days/d/g' -e 's/\s//g'
|
|
)"
|
|
|
|
CHOICES="$(list_items)"
|
|
DMENUIDX=1
|
|
while true; do
|
|
PICKED="$(printf %b "$CHOICES" |
|
|
sxmo_dmenu.sh --index "$DMENUIDX" -p "RSS ($TIMESPANABBR)")" || return 0
|
|
DMENUIDX="$(echo "$CHOICES" | grep -m1 -F -n "$PICKED" | cut -d ':' -f1)"
|
|
|
|
case "$PICKED" in
|
|
"Close Menu") return 0;;
|
|
"Change Timespan")
|
|
rsstimespanmenu
|
|
CHOICES="$(list_items)"
|
|
DMENUIDX=1
|
|
;;
|
|
*)
|
|
URL="$(echo "$PICKED" | awk -F " " '{print $NF}')"
|
|
sxmo_urlhandler.sh "$URL"
|
|
esac
|
|
done
|
|
}
|
|
|
|
rsstimespanmenu
|