forked from cosmic/cosmic
74 lines
1.9 KiB
Bash
Executable File
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
|