]> git.g-eek.se Git - users/gustav/scripts.git/commitdiff
[event-participant] Improve control flow
authorGustav Eek <gustav.eek@fripost.org>
Thu, 19 May 2022 17:26:02 +0000 (19:26 +0200)
committerGustav Eek <gustav.eek@fripost.org>
Thu, 19 May 2022 17:26:02 +0000 (19:26 +0200)
Print summary if no STDIN is provided, instead of if input was empty.
Create file if not existing. Create cache if not existing. Update help
accordingly.

TODO Provide arguments as ordinary flags: `-f` for file, `-n` for
"other name", `-c` for cancel, argument can be "comment".

TODO Provide long list option for printing: `-s` for summary.

TODO Provide title row and header row for the CSV-file: `-t` for
setting title.

TODO Provide PGP encryption by default: `-r` for GPG recipiant.

event-participant

index 8bb525aba61c8d0d27119672d35c74911b553bdd..534ce6959ed2b30a8f79a9077d3c14be3ed3d4d4 100755 (executable)
@@ -12,7 +12,7 @@ formermost record is reused.
 Add extra participants (email taken as From field) with
 argument +NAME.
 
-If input is empty, also list of particiants is printed.
+If no input is provided, instead list a summary particiants is printed.
 
     echo | event-participant
 
@@ -22,6 +22,11 @@ Help is this message.
 CACHE="$HOME/.cache/${0##*/}/events.csv"
 HEADER="participant,date_att,date_cancel"
 
+if [ ! -f "$CACHE" ]; then
+    mkdir -p $(dirname "$CACHE")
+    echo -n "" > "$CACHE"
+fi
+
 if [[ "$1" == "--help" ]]; then
     echo -e "$HELP" 1>&2
     exit 0
@@ -32,21 +37,30 @@ if [[ "$1" =~ \+.* ]]; then
     shift
 fi
 
-arg_event="$1"
-
-if [ -f "$CACHE" ]; then
-    event=$(tail -1 "$CACHE")
+if [ -n "$1" ]; then
+    event="$1"
+    if [ "$event" != "$(tail -1 "$CACHE")" ];then
+        echo "$event" >> "$CACHE"
+    fi
 else
-    mkdir -p $(dirname "$CACHE")
-    echo -n "" > "$CACHE"
+    event=$(tail -1 "$CACHE")
 fi
-if [ -n "$arg_event" -a "$arg_event" != "$event" ]; then
-    event="$arg_event"
-    echo "$event" >> "$CACHE"
+
+if [ ! -f "$event" ]; then
+    echo -n > "$event"
 fi
-if [ -z "$event" ]; then
-    echo "${0##*/}: E: No event file." 1>&2
-    exit 1
+
+# Print summary, if no input data provided
+
+if test -t 0; then
+    n_t=$(cat "$event" | grep -v "$HEADER"| cut -d, -f2 | grep -v '^$' | wc -l)
+    n_c=$(cat "$event" | grep -v "$HEADER"| cut -d, -f3 | grep -v '^$' | wc -l)
+    n_p=$(( $n_t - $n_c ))
+    if [ -z "$info" ]; then
+        cat "$event" | tr ',' '\t'
+    fi
+    echo -ne "At $event:\n   part: $n_p\n   canc: $n_c\n" 1>&2
+    exit 0
 fi
 
 # Add info, sorted by date and uniq
@@ -77,13 +91,3 @@ echo "${participant},${date}" |
     grep -v "^$" \
         > "$event.sorted"
 mv "$event.sorted" "$event"
-
-# Print summary
-
-n_t=$(cat "$event" | grep -v "$HEADER"| cut -d, -f2 | grep -v '^$' | wc -l)
-n_c=$(cat "$event" | grep -v "$HEADER"| cut -d, -f3 | grep -v '^$' | wc -l)
-n_p=$(( $n_t - $n_c ))
-echo -ne "At $event:\n   part: $n_p\n   canc: $n_c\n" 1>&2
-if [ -z "$info" ]; then
-    cat "$event" | tr ',' '\t'
-fi