cosmic/bin/cosmic-log
2018-11-27 00:09:21 -05:00

74 lines
1.9 KiB
Bash
Executable File

#!/bin/sh
# TODO: create new messages for ship using templates
# TODO: better isolate listings.gophermap from accidental clobbering
user=$(whoami)
ships=$(find /var/gopher -user "$user" -type d -exec basename {} \;)
numships=$(echo "${ships}" | wc -l)
tmp="$HOME/.cosmiclog"
finish () {
rm -f "$tmp"
}
trap finish EXIT
check_yn () {
read -r answer
if [ "$answer" != "${answer#[Yy]}" ] ; then
printf 1 # true
else
printf 0 # false
fi
}
check_log () {
ship="$*"
printf "Checking for outbound messages on ship: %s\\n" "${ship}"
# look at log entries in gophermap
# compare against files in ship directory
# store list of unpublished logs
logs=$(grep "^0${ship}" "/var/gopher/listing.gophermap" | awk -F'\t' '{print $2}')
files=$(find "/var/gopher/$ship" -name "*.txt" -not -path '*/\.*' -type f | sed 's|/var/gopher||')
uniq=$(printf "%s\\n%s" "$logs" "$files" | sort | uniq -u)
if [ -z "$uniq" ]; then
printf " .... No messages.\\n"
else
# check each unpublished message for sending
IFS='
'
for u in $uniq
do
printf "Send message %s? " "$(basename "$u" | sed 's/\.[^.]*$//')"
res=$(check_yn)
if [ "$res" -eq 1 ]; then
# prompt for title and prepare output
printf "Title for message %s? " "$(basename "$u" | sed 's/\.[^.]*$//')"
read -r title
printf "0%s - %s\\t%s\\n" "$ship" "$title" "$u" | cat - /var/gopher/listing.gophermap > "$tmp" && cat "$tmp" > /var/gopher/listing.gophermap && rm "$tmp"
printf " .... Sent.\\n"
else
printf " .... Skiped.\\n"
fi
done
unset IFS
fi
}
printf "Initializing QEC...\\n"
printf "Ready to transmit for %s\\n" "${user}"
if [ "$numships" -eq 0 ]; then
printf "No registered ships found in system.\\n"
elif [ "$numships" -eq 1 ]; then
check_log "$ships"
else
IFS='
'
for f in $ships
do
check_log "$(basename "$f")"
done
unset IFS
fi