From 4d0c47e2c99a0ceb8a89273e2f7a73a07306a433 Mon Sep 17 00:00:00 2001 From: dogeystamp Date: Wed, 8 Feb 2023 19:35:00 -0500 Subject: [PATCH] added mrss.sh script --- README | 43 +++++++++++++++++++++++--- contrib/mrss.sh | 81 +++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 120 insertions(+), 4 deletions(-) create mode 100755 contrib/mrss.sh diff --git a/README b/README index d91f3b6..f453caa 100644 --- a/README +++ b/README @@ -50,11 +50,46 @@ in order to successfully run MinRSS. }; -Using MinRSS +Manual usage ------------ -Make a directory to store your RSS feeds, then cd into it. Then, enter -the minrss command to download the RSS feeds. Your feeds will be -available as folders in your current working directory. +If you compile with OUTPUT_HTML (as is default), you can read feeds with just +the 'minrss' binary, basic shell utilities and (preferably) a browser of any +kind. + +Make a directory to store your RSS feeds, then cd into it. Then, run the minrss +binary to download all articles. + +Each configured feed will now appear as a folder, and articles as HTML files +within them. You can open the files in a browser to see the summary text, and +also follow the link to see the full article. + +To see which files are new, use 'ls -t' or compile with SUMMARY_FILES. + +It is important to note that MinRSS does not download the full text of each +article, but only the summary. If you wish to archive the full text for offline +reading, consider writing a script for it. + +Wrapper scripts +--------------- +The wrapper script contrib/mrss.sh is provided with MinRSS as an example. + +To install it, run the following: + + cp contrib/mrss.sh ~/.local/bin/mrss + chmod 755 ~/.local/bin/mrss + +The script requires compiling with configuration options OUTPUT_JSON and +SUMMARY_FILES, as well as having jq and xdg-open installed. + +By default, mrss sets up a directory at ~/rss/ to store all feeds. To change +this, set MRSS_DIR. + +'mrss update' will check feeds for new articles and download them. Symlinks to +new articles are also stored in ~/rss/new/. + +'mrss read' can be used on article files to open them in a browser or mpv. + +Run 'mrss --help' for further usage help. Compatibility ------------- diff --git a/contrib/mrss.sh b/contrib/mrss.sh new file mode 100755 index 0000000..c3a9f35 --- /dev/null +++ b/contrib/mrss.sh @@ -0,0 +1,81 @@ +#!/bin/sh + +set -e + +scriptname=$0 +subcmd=$1 + +if [ -z "$MRSS_DIR" ]; then + MRSS_DIR="$HOME/rss" +fi +mkdir -p "$MRSS_DIR" + +sub_help() { + echo "usage:" + echo " $scriptname [options]" + echo + echo "commands:" + echo " update updates feeds" + echo " read opens link from an article file in either a browser or mpv" + echo " link print the article link from a .json file" + echo " purge purge new/ directory" + echo + echo "The following is required to use this script:" + echo " - jq" + echo " - minrss compiled with:" + echo " * OUTPUT_JSON" + echo " * SUMMARY_FILES" +} + +sub_update() { + cd "$MRSS_DIR" + minrss | { + while read -r ARTICLE; do + DIRNAME="$(dirname "$ARTICLE")" + BASENAME="$(basename "$ARTICLE")" + mkdir -p "$MRSS_DIR"/new/"$DIRNAME" + ln -sr "$MRSS_DIR"/"$ARTICLE" "$MRSS_DIR"/new/"$ARTICLE" + done + } +} + +sub_purge() { + cd "$MRSS_DIR" + rm -r "$MRSS_DIR"/new/* +} + +sub_link() { + # extract the link from a single article file + cat "$@" | jq -r '.enclosure.link // .link' +} + +sub_read() { + VID="" + + for art in "$@"; do + LINK="$(sub_link "$art")" + if [ ! -z "$(printf "%s" "$LINK" | grep 'youtube.com\|odycdn\|simplecastaudio\|podcasts\|twitch')" ]; then + VID="$VID$LINK " + else + xdg-open $LINK & + fi + done + + if [ -n "$VID" ]; then + mpv $VID + fi +} + +case $subcmd in + "" | "--help" | "-h") + sub_help + ;; + *) + shift + sub_${subcmd} "$@" + if [ $? = 127 ]; then + echo "error: unknown command '$subcmd'" + exit 1 + fi + ;; +esac