#!/bin/bash
# Kenny Phloggins v0.0002
#
# ratfactor's phlog create/edit/preview/push script
#
# "Out along the edges / Always where I burn to be
# The further on the edge / The hotter the intensity
# Highway to the Danger Zone
# Right into the Danger Zone"
# -- Kenny Loggins, Danger Zone
#
echo
echo "Kenny Phloggins says, \"Welcome to the Danger Zone!\""
echo
function list {
local map=$SRC_PHLOGDIR/gophermap
echo "Phlogs read from $map:"
# get list from phlog gophermap!
local phlog_list=$(awk 'BEGIN {ORS=" "} /^0/ {print $NF}' $map)
PS3="Select a phlog to edit: "
select selected in $phlog_list
do
FNAME=$selected
break
done
}
function new_phlog {
printf "(Short) title for new phlog: "
read title
local date=$(date +%Y-%m-%d)
local day=$(date +%d)
FNAME="$date-$(echo "$title" | tr '[:upper:] ' '[:lower:]-')"
echo
echo "Title: $title"
echo "Fname: $FNAME"
echo "Hit return to fly into the Danger Zone!"
read nothing
# append title to phlog and phlog map
echo "$title" >> $SRC_PHLOGDIR/$FNAME
echo "======" >> $SRC_PHLOGDIR/$FNAME
local phlogmap=$SRC_PHLOGDIR/gophermap
echo "0$day $title $FNAME" >> $phlogmap
vim $phlogmap
cp $phlogmap $PUB_PHLOGDIR/gophermap
less $PUB_PHLOGDIR/gophermap
# update main site gophermap and review
sed "s/<phlog_updated>/$date/" $SRC_MAINMAP > $PUB_MAINMAP
less $PUB_MAINMAP
# first time in phlog club, you *have* to phlog!
edit
}
function edit {
if [[ $FNAME = 'NONE' ]]
then
echo "You must first select a phlog to edit!"
return
fi
local src=$SRC_PHLOGDIR/$FNAME
local pub=$PUB_PHLOGDIR/$FNAME
vim $src
# make immediate backup!
cp $src "${src}_bak$(date +%s)"
# format and review
#fmt -w67 $src > $pub
ttt $src > $pub
less $pub
echo
echo "$FNAME edited and formatted."
}
#function push_helper {
# this function re-tries scp copy thrice
#for i in 1 2 3
#do
# echo "Pushing $1 to $2..."
# scp $1 $2 && break || sleep 5
#done
#}
function push {
if [[ $FNAME = 'NONE' ]]
then
echo "You must first select a phlog to push!"
return
fi
# This is totally specific to the author (Ratfactor)
# You will definitely need to edit this to make it
# work for you!
# As best I understand it, updating the root gophermap
# will cause the SDF phlogroll to detect the update.
echo "put $PUB_PHLOGDIR/$FNAME gopher/phlog/
put $PUB_PHLOGDIR/gophermap gopher/phlog/
put $PUB_MAINMAP gopher/" | sftp sdf
}
while true
do
[[ $FNAME != NONE ]] && echo -e "Current entry: \e[33m$FNAME\e[0m"
prompt="(n)ew (l)ist (v)iew (e)dit (p)ush (s)pellcheck (q)uit: "
[[ $FNAME = NONE ]] && prompt="(n)ew (l)ist (q)uit: "
echo -en "\e[32m$prompt\e[0m "
read action
case $action in
n ) new_phlog ;;
l ) list ;;
v ) less $PUB_PHLOGDIR/$FNAME ;;
e ) edit ;;
p ) push ;;
s ) ispell $SRC_PHLOGDIR/$FNAME ;;
q ) echo "Leaving the Danger Zone!"; exit ;;
* ) echo "What? ";;
esac
done