#!/bin/bash

# Convert from plan.txt form to iCalendar form.
# We do the minimum needed to get the plan in a calendar GUI.
# Requires expr, test, and sed.
# Requires awk for done tasks.
# BUG: Doesn't check that the line starts with and ISO date.
# BUG: Ignores lines that do not have a time or priority in the second "word".
# BUG: No way to give proper end times for events.

echo BEGIN:VCALENDAR
echo VERSION:2.0
echo PRODID:-//Blossom Associates West//NONSGML SimplePlan//EN

#This should not be needed, but might be in some cases.
#TZID=\;TZID\=California-Los_Angeles

while read THEDATE TWO LINE
do

  unset CATEGORIES
  for w in $LINE
  do
    case $w in
    @* ) CATEGORIES=${CATEGORIES}${CATEGORIES:+","}$w ;;
    esac
  done

  UNREADABLEDATE=`echo $THEDATE | sed 's/-//'g`
  case $TWO in
  [0-2][0-9]:[0-5][0-9] )
    # Here we let meeting run until the end of the hour.
    # Someday we may allow a duration or end time in our event format.
    STARTHOUR=`expr "$TWO" : "\([0-9]*\):"`
    STARTMIN=`expr "$TWO" : ".*:\([0-9]*\)"`
    ENDHOUR=`expr $STARTHOUR + 1`
    ENDMIN=00;
    if [ 23 -lt $ENDHOUR ]; then ENDHOUR=23; ENDMIN=59; fi
    echo BEGIN:VEVENT
    echo DTSTART${TZID}:${UNREADABLEDATE}T${STARTHOUR}${STARTMIN}00
    echo DTEND${TZID}:${UNREADABLEDATE}T${ENDHOUR}${ENDMIN}29
    echo SUMMARY:`echo $LINE | sed 's/@[^ ]* //g'`
    echo CATEGORIES:`echo ${CATEGORIES} | sed 's/@//g'`
    echo END:VEVENT
    ;;
  A|B|C|D)
    echo BEGIN:VTODO
    case $TWO in
      D) echo COMPLETED:$UNREADABLEDATE
         THEDATE=`echo $LINE | awk '{print $1}'`
         TWO=`echo $LINE | awk '{print $2}'`
         LINE=`echo $LINE | awk '2<NF {printf $3; for ( i = 4; i <= NF; i++ ) printf( " %s", $i );}'`
         UNREADABLEDATE=`echo $THEDATE | sed 's/-//'g`
         ;;
    esac
    case $TWO in
      A) echo PRIORITY:1 ;;
      B) echo PRIORITY:5 ;;
      C) echo PRIORITY:9 ;;
    esac
    echo DUE:$UNREADABLEDATE
    echo SUMMARY:`echo $LINE | sed 's/@[^ ]* //g'`
    echo CATEGORIES:`echo ${CATEGORIES} | sed 's/@//g'`
    echo END:VTODO
    ;;
  esac
  echo
done

echo END:VCALENDAR

