#!/bin/sh ## potcasse - Based on solene's potcasse (https://tildegit.org/solene/potcasse) 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 # title of your podcst TITLE= # base URL of your website SITE= # base URL of your gemini capsule CAPSULE= # description of the podcast DESCRIPTION= # filename of the RSS file RSSLINK=feed.xml # language for the podcast/index.html file LANGUAGE=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() { test -d episodes || exitp "You need to import episodes before generation" TMPRSS=$(mktemp /tmp/potcasse.XXXXXXXXXXXXXXXXXXXXX) TMPGEMRSS=$(mktemp /tmp/potcasse.XXXXXXXXXXXXXXXXXXXXX) TMPHTML=$(mktemp /tmp/potcasse.XXXXXXXXXXXXXXXXXXXXX) TMPGMI=$(mktemp /tmp/potcasse.XXXXXXXXXXXXXXXXXXXXX) . ./metadata.sh mkdir -p output_html/episodes mkdir -p output_gmi/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 <> $TMPRSS ${TITLE} ${DESCRIPTION} ${SITE} ${SITE}/logo.png ${TITLE} ${SITE} ${LANGUAGE} EOF cat <> $TMPGEMRSS ${TITLE} ${DESCRIPTION} ${CAPSULE} ${LANGUAGE} EOF cat <> $TMPHTML ${TITLE}

Podcast episodes - ${TITLE}

logo

${DESCRIPTION}

    EOF cat <> $TMPGMI # Podcast episodes - ${TITLE} ${DESCRIPTION} => ${RSSLINK} RSS feed (for podcast players) EOF for episode in episodes/* do echo "Scanning $episode" . ${episode}/metadata.sh UNAME=$(uname) if [ $UNAME = 'OpenBSD' ] || [ $UNAME = 'FreeBSD' ] || [ $UNAME = 'NetBSD' ] then SIZE=$(stat -f "%z" "${episode}/${AUDIOFILE}") else SIZE=$(stat --format="%s" "${episode}/${AUDIOFILE}") fi EXT=${AUDIOFILE##*.} rsync -a "${episode}/${AUDIOFILE}" output_html/episodes/ rsync -a "${episode}/${AUDIOFILE}" output_gmi/episodes/ cat <> $TMPRSS $TITLE ${PUBDATE} ${SITE}/episodes/${AUDIOFILE} EOF cat <> $TMPGEMRSS $TITLE ${PUBDATE} ${CAPSULE}/episodes/${AUDIOFILE} EOF cat <> $TMPHTML
  • ${PUBDATE} - ${TITLE}
  • EOF cat <> $TMPGMI => episodes/${AUDIOFILE} ${PUBDATE} - ${TITLE} EOF done cat <> $TMPRSS EOF cat <> $TMPGEMRSS EOF cat <> $TMPHTML
EOF install -m 644 "$TMPRSS" output_html/${RSSLINK} install -m 644 "$TMPGEMRSS" output_gmi/${RSSLINK} install -m 644 "$TMPHTML" output_html/index.html install -m 644 "$TMPGMI" output_gmi/index.gmi rm "$TMPRSS" "$TMPHTML" "$TMPGMI" "$TMPGEMRSS" } case "$1" in '') usage;; help) usage;; init) init ;; gen) gen ;; episode) [ -n "$2" ] && episode "$2" "$3" "$4" ;; esac