Commit 5a966fc39145434519d4383eb21e8c68f8170d8d

Authored by Georg Hopp
1 parent 8f2fe2bb

fix missing newline and add option handling and file io

Showing 1 changed file with 93 additions and 12 deletions
... ... @@ -57,7 +57,7 @@ function taskend() {
57 57 function taskuuids() {
58 58 local UUID
59 59
60   - [[ $# -eq 0 ]] && set \( +PENDING or +DONE \)
  60 + [[ $# -eq 0 ]] && set -- \( +PENDING or +DONE \)
61 61 for UUID in $(task $@ _uuid)
62 62 do
63 63 printf "%05.2f\037%s\037%s\n" \
... ... @@ -113,7 +113,7 @@ function extracttime() {
113 113 TIME="00:00:00"
114 114 else
115 115 IFS=:
116   - set $(echo $1)
  116 + set -- $(echo $1)
117 117 IFS=${OIFS}
118 118 TIMEKEY="$1"
119 119 TIME=$(printf "%02d:%02d:%02d" ${2:-0} ${3:-0} $4)
... ... @@ -125,7 +125,7 @@ function printtimes() {
125 125 for T in "$@"
126 126 do
127 127 extracttime "$T"
128   - printf "%51s: %s\n" "spent - $TIMEKEY" $TIME
  128 + printf "%51s: %s\n" "spent - $TIMEKEY" "$TIME"
129 129 done
130 130 }
131 131
... ... @@ -165,20 +165,29 @@ function showall() {
165 165 }
166 166
167 167 function timesheet() {
168   - local phrase="1-week-ago"
169   - local start="$(date +%Y-%m-%d -d ${phrase})"
170   - local end="$(date +%Y-%m-%d)"
  168 + local PHRASE="1-week-ago"
  169 + local START="$(date +%Y-%m-%d -d ${PHRASE})"
  170 +
  171 + local DONE="$(showall $(doneuuids end.after:${START} $@))"
  172 + local UPCOMING="$(showall $(pendinguuids $@))"
  173 + local BLOCKED="$(showall $(blockeduuids $@))"
  174 + local BLOCKING="$(showall $(blockinguuids $@))"
  175 +
  176 + DONE="${DONE:+${DONE}${NL}}"
  177 + UPCOMING="${UPCOMING:+${UPCOMING}${NL}}"
  178 + BLOCKED="${BLOCKED:+${BLOCKED}${NL}}"
  179 + BLOCKING="${BLOCKING:+${BLOCKING}${NL}}"
171 180
172 181 printf " (generated at %s)\n\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n" \
173   - "$(date)" \
174   - "$(bold "" "Tasks completed from $start to $end (back $phrase)")" \
175   - "$(showall $(doneuuids end.after:${start} $@))" \
  182 + "${TODAY}" \
  183 + "$(bold "" "Tasks completed from $START to $TODAY (back $PHRASE)")" \
  184 + "${DONE}" \
176 185 "$(bold "" "Upcoming tasks")" \
177   - "$(showall $(pendinguuids $@))" \
  186 + "${UPCOMING}" \
178 187 "$(bold "" "Blocked tasks")" \
179   - "$(showall $(blockeduuids $@))" \
  188 + "${BLOCKED}" \
180 189 "$(bold "" "Blocking tasks")" \
181   - "$(showall $(blockinguuids $@))"
  190 + "${BLOCKING}"
182 191
183 192 printf "%s%s\n\n%s%s\n%s\n\n%s\n\n%s\n" \
184 193 "$(bold "" "Summary")" \
... ... @@ -190,6 +199,78 @@ function timesheet() {
190 199 "$(task rc._forcecolor=on $@ burndown 2>/dev/null)"
191 200 }
192 201
  202 +function usage() {
  203 + local USAGE=$(cat <<-USAGE
  204 + Usage: %s [OPTION]... [FILTER]
  205 +
  206 + OPTIONS:
  207 + -?, --help Show this help
  208 + -h, --html Create HTML form ANSI data.
  209 + -f, --file The file to write data to. Actually this specifies the
  210 + basename which will be postfixed by the creation date.
  211 +
  212 + FILTER can be additional taskwarriors filters to limit the result
  213 + any further.
  214 + USAGE
  215 + )
  216 + /usr/bin/printf "${USAGE}\n" $0
  217 +}
  218 +
  219 +TODAY="$(date +%Y-%m-%d)"
  220 +NL=$'\n'
  221 +
  222 +#
  223 +# parse command line arguments
  224 +#
  225 +SHORTOPTS=?hf:
  226 +LONGOPTS=help,html,file
  227 +ARGS=$(getopt -o "${SHORTOPTS}" --long "${LONGOPTS}" -n "timesheet" -- "$@")
  228 +if [ $? -ne 0 ]
  229 +then
  230 + usage "$0"
  231 + exit 1
  232 +fi
  233 +eval set -- "${ARGS}"
  234 +unset ARGS
  235 +
  236 +while true
  237 +do
  238 + case "$1" in
  239 + '-?'|'--help')
  240 + shift
  241 + usage "$0"
  242 + exit 0
  243 + ;;
  244 + '-h'|'--html')
  245 + DOHTML=1
  246 + shift
  247 + continue
  248 + ;;
  249 + '-f'|'--file')
  250 + OUTFILE="${2}_$TODAY"
  251 + shift 2
  252 + continue
  253 + ;;
  254 + '--')
  255 + shift
  256 + break
  257 + ;;
  258 + *)
  259 + echo 'Internal error!' >&2
  260 + exit 1
  261 + ;;
  262 + esac
  263 +done
  264 +
  265 +[[ $OUTFILE ]] && {
  266 + if [[ ${DOHTML} -eq 1 ]]
  267 + then
  268 + exec 1> >(ansi2html >${OUTFILE}.html)
  269 + else
  270 + exec 1> ${OUTFILE}.ansi
  271 + fi
  272 +}
  273 +
193 274 timesheet $@
194 275
195 276 # vim: set et ts=4 sw=4:
... ...
Please register or login to post a comment