#!/bin/sh mdtest="$(command -v mdtest)" data_dir="${PWD}/data" db_dir="${data_dir}/db" bin_dir="${PWD}/bin" mdpid="${XDG_RUNTIME_DIR:-${TMPDIR:-/tmp}}/mdtest.pid" mdin="${XDG_RUNTIME_DIR:-${TMPDIR:-/tmp}}/mdin" && mdout="${XDG_RUNTIME_DIR:-${TMPDIR:-/tmp}}/mdout" && usage() { cat <<- EOF Usage: ${0##*/} [cmd] [options] A whatsapp bot broadcast news Commands: kill-daemon kill the daemon if it is running Options: -m EOF } die() { : "${1:?}" printf "\033[31;1merr: %b\033[0m\n" "$1" 1>&2 exit "${2:-1}" } note() { : "${1:?}" printf "\033[32;1m%b\033[0m\n" "$*" 1>&2 } kill_daemon() { kill "$(cat "$mdpid" 2> /dev/null)" 2> /dev/null && rm -f "$mdpid" rm -f "$mdin" rm -f "$mdout" } start_daemon() { [ -p "$mdin" ] || mkfifo "$mdin" [ -p "$mdout" ] || mkfifo "$mdout" [ -p "$mdout" ] || mkfifo "$mdout" cd "$db_dir" || exit 1 tail -f "$mdin" | "$mdtest" > "$mdout" 2>&1 & echo $! > "$mdpid" cd - > /dev/null || exit 1 trap kill_daemon EXIT } ######## # MAIN # ######## cmnd= infile= outfile= case "$1" in -*) ;; *) cmnd="$1" [ "$#" -gt 0 ] && shift ;; esac while getopts "m:d:i:o:" f; do case "$f" in m) mdtest="$OPTARG" ;; d) db_dir="$OPTARG" ;; i) infile="$OPTARG" ;; o) outfile="$OPTARG" ;; ?) usage exit 1 esac done [ ! -x "$mdtest" ] && die "invalid mdtest bin" [ -d "$db_dir" ] || mkdir -p "$db_dir" case "$PATH" in *"$bin_dir"*) ;; *) PATH="${PATH}:$bin_dir" ;; esac case "$cmnd" in kill-daemon) kill_daemon exit ;; vtoc) [ -z "$infile" ] && infile="${data_dir}/contacts.vcf" [ -z "$outfile" ] && outfile="${data_dir}/contacts.csv" [ ! -s "$infile" ] && die "vtoc: ${infile}: no such file or directory" vtoc.sh "$infile" > "$outfile" && note "vtoc: contacts saved to ${outfile}" ;; "") kill_daemon start_daemon read wip_remove_me ;; *) die "invalid command: ${cmnd}" esac