first version - potcasse - Podcast publication made easy HTML git clone git://bitreich.org/potcasse git://hg6vgqziawt5s4dj.onion/potcasse DIR Log DIR Files DIR Refs DIR Tags DIR README DIR LICENSE --- DIR commit 7d50f07ca06423a5d0c93ce190093920f551c669 HTML Author: Solene Rapenne <solene@perso.pw> Date: Tue, 20 Jul 2021 22:13:55 +0200 first version Diffstat: A potcasse | 116 ++++++++++++++++++++++++++++++ 1 file changed, 116 insertions(+), 0 deletions(-) --- DIR diff --git a/potcasse b/potcasse @@ -0,0 +1,116 @@ +#!/bin/sh + +exitp() { + echo "$1" + exit 1 +} + +usage() { + name=$(basename $0) + printf '%s\n' \ + "$name init | gen | episode TITLE FILE [ID]" \ + "$name init" \ + ': initialize the potcasse structure' \ + "$name gen" \ + ': generate the RSS file' \ + "$name episode TITLE FILE [ID]" \ + ': create the structure for a new episode and eventually copy file [FILE] in [ID]' + exit 0 +} + +init() { + test -f metadata.sh && exitp "You seem in a directory managed by potcasse" + mkdir -p episodes + cat << EOF > metadata.sh +SITE= +LANG=en-us +#uncomment to use logo.png as a logo +#IMAGE=YES +EOF + exit 0 +} + +episode() { + test -f metadata.sh || exitp "The directory isn't managed by potcasse" + TITLE="$1" + + test -f "$2" || exitp "File $2 doesn't exist" + AUDIOFILE="$2" + EXT=${AUDIOFILE##*.} + + if [ -n "$3" ] + then + ID="$3" + else + ID="$(date +%Y%m%d%H)" + fi + + DEST="episodes/${ID}" + mkdir -p "$DEST" + cat << EOF > ${DEST}/metadata.sh +TITLE="$TITLE" +PUBDATE="$(date "+%a, %d %b %Y 00:00:00 GMT")" +AUDIOFILE="${ID}.${EXT}" +EOF + cp "$AUDIOFILE" "${DEST}/${ID}.${EXT}" +} + +gen() { + TMPFILE=$(mktemp /tmp/potcasse.XXXXXXXXXXXXXXXXXXXXX) + . ./metadata.sh + mkdir -p output_html/episodes + + if [ -n "$IMAGE" ] + then + test -f logo.png || exitp "You defined an IMAGE, move it to $PWD/logo.png" + cp logo.png output_html/logo.png + fi + + cat <<EOF >> $TMPFILE +<?xml version="1.0" encoding="UTF-8"?> +<rss version="2.0"> + <channel> + <title>${TITLE}</title> + <description>${DESCRIPTION}</description> + <link>${SITE}</link> + <image> + <url>${SITE}/logo.png</url> + <title>Image of ${SITE}</title> + <link>${SITE}</link> + </image> + <language>${LANG}</language> +EOF + + for episode in episodes/* + do + echo "Scanning $episode" + . ${episode}/metadata.sh + SIZE=$(stat -f "%z" "${episode}/${AUDIOFILE}") + EXT=${AUDIOFILE##*.} + rsync -a "${episode}/${AUDIOFILE}" output_html/episodes/ + cat <<EOF >> $TMPFILE + <item> + <title>$TITLE</title> + <description></description> + <pubDate>${PUBDATE}</pubDate> + <enclosure url="${SITE}/episodes/${AUDIOFILE}" length="${SIZE}" type="audio/${EXT}" /> + </item> +EOF + done + + cat <<EOF >> $TMPFILE + </channel> +</rss> +EOF + install -m 644 "$TMPFILE" output_html/${RSSLINK} + rm "$TMPFILE" +} + + +case "$1" in + '') usage;; + help) usage;; + init) init ;; + gen) gen ;; + episode) [ -n "$2" ] && episode "$2" "$3" "$4" ;; +esac