#!/bin/bash
# Generates/Updates Gopher maps for new Phlog entries.
# Specifically, replaces gophermap in current ("/phlog")
# directory, and adds latest post name to home gophermap in "../".
#
# Use -wraplatest to automatically wrap text in the latest file.
# Generates RSS 2.0 feed if a rsshead file is in the current
# directory (should contain channel headers except for pubDate).
#
# Version 2 (RSS feed generation added)
# By The Free Thinker (
gopher://aussies.space/1/%7efreet/ ), 2022.
##### Config. Options
#Line wrapping width:
WRAPWIDTH=68
#location of home gophermap (without trailing "/"):
HOMEGOPHERMAPDIR=".."
#Line to replace containing name of latest post in home gophermap:
REPLACEHOMEMAPLINE=14
#Set to 0 to disable modifying home gophermap
#Text preceeding post filename on that line:
LATESTPOSTPREFIX=" - Latest post:"
#Maximum number of entries to include in RSS feed
RSSMAX=3
#Base URL for RSS feed item links:
RSSROOT="
gopher://aussies.space/0/~freet/phlog/"
#File Name of RSS feed:
RSSNAME=freet.rss
##### End of Config.
lineno=1
firstline=0
rssgen=0
title=
rsscount=0
addposttohomemap ()
{
if ((REPLACEHOMEMAPLINE!=0)); then
cat ../gophermap | while IFS= read -r line; do
if((lineno==REPLACEHOMEMAPLINE)); then
echo -e "$LATESTPOSTPREFIX $i" >> "$HOMEGOPHERMAPDIR/gophermap.new"
else
echo "$line" >> "$HOMEGOPHERMAPDIR/gophermap.new"
fi
((lineno++))
done
mv "$HOMEGOPHERMAPDIR/gophermap.new" "$HOMEGOPHERMAPDIR/gophermap"
chmod u+rw,go-wx,go+r "$HOMEGOPHERMAPDIR/gophermap"
fi
}
cp phloghead gophermap.new
if [ -f rsshead ]; then
rssgen=1
cp rsshead $RSSNAME.new
echo " <pubDate>`date -R`</pubDate>" >> $RSSNAME.new
fi
for i in `ls -r *.txt`
do
echo -e "0$i\t" >> gophermap.new
if ((firstline==0)); then
addposttohomemap
if [ "$1" = "-wraplatest" ]; then
fold -s -w $WRAPWIDTH "$i" > "$i,f"
mv "$i,f" "$i"
fi
firstline=1
fi
if ((rssgen)) && ((rsscount < RSSMAX)); then
((rsscount++))
title="${i#????-??-??}"
title="`echo \"${title%.txt}\" | tr _ ' '`"
echo -e " <item>\n" \
" <title>$title</title>\n" \
" <link>${RSSROOT}${i}</link>\n" \
" <description>\n" \
"`sed -e 's/&/\&/g' -e 's/>/\&gt;/g' -e 's/</\&lt;/g' \"$i\"`\n" \
" </description>\n" \
" </item>" >> $RSSNAME.new
fi
done
if ((rssgen)); then
echo -e "</channel>\n</rss>" >> $RSSNAME.new
mv $RSSNAME.new $RSSNAME
chmod u+rw,go-wx,go+r $RSSNAME
fi
mv gophermap.new gophermap
chmod u+rw,go-wx,go+r gophermap