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,7 +57,7 @@ function taskend() {
57 function taskuuids() { 57 function taskuuids() {
58 local UUID 58 local UUID
59 59
60 - [[ $# -eq 0 ]] && set \( +PENDING or +DONE \) 60 + [[ $# -eq 0 ]] && set -- \( +PENDING or +DONE \)
61 for UUID in $(task $@ _uuid) 61 for UUID in $(task $@ _uuid)
62 do 62 do
63 printf "%05.2f\037%s\037%s\n" \ 63 printf "%05.2f\037%s\037%s\n" \
@@ -113,7 +113,7 @@ function extracttime() { @@ -113,7 +113,7 @@ function extracttime() {
113 TIME="00:00:00" 113 TIME="00:00:00"
114 else 114 else
115 IFS=: 115 IFS=:
116 - set $(echo $1) 116 + set -- $(echo $1)
117 IFS=${OIFS} 117 IFS=${OIFS}
118 TIMEKEY="$1" 118 TIMEKEY="$1"
119 TIME=$(printf "%02d:%02d:%02d" ${2:-0} ${3:-0} $4) 119 TIME=$(printf "%02d:%02d:%02d" ${2:-0} ${3:-0} $4)
@@ -125,7 +125,7 @@ function printtimes() { @@ -125,7 +125,7 @@ function printtimes() {
125 for T in "$@" 125 for T in "$@"
126 do 126 do
127 extracttime "$T" 127 extracttime "$T"
128 - printf "%51s: %s\n" "spent - $TIMEKEY" $TIME 128 + printf "%51s: %s\n" "spent - $TIMEKEY" "$TIME"
129 done 129 done
130 } 130 }
131 131
@@ -165,20 +165,29 @@ function showall() { @@ -165,20 +165,29 @@ function showall() {
165 } 165 }
166 166
167 function timesheet() { 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 printf " (generated at %s)\n\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n" \ 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 "$(bold "" "Upcoming tasks")" \ 185 "$(bold "" "Upcoming tasks")" \
177 - "$(showall $(pendinguuids $@))" \ 186 + "${UPCOMING}" \
178 "$(bold "" "Blocked tasks")" \ 187 "$(bold "" "Blocked tasks")" \
179 - "$(showall $(blockeduuids $@))" \ 188 + "${BLOCKED}" \
180 "$(bold "" "Blocking tasks")" \ 189 "$(bold "" "Blocking tasks")" \
181 - "$(showall $(blockinguuids $@))" 190 + "${BLOCKING}"
182 191
183 printf "%s%s\n\n%s%s\n%s\n\n%s\n\n%s\n" \ 192 printf "%s%s\n\n%s%s\n%s\n\n%s\n\n%s\n" \
184 "$(bold "" "Summary")" \ 193 "$(bold "" "Summary")" \
@@ -190,6 +199,78 @@ function timesheet() { @@ -190,6 +199,78 @@ function timesheet() {
190 "$(task rc._forcecolor=on $@ burndown 2>/dev/null)" 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 timesheet $@ 274 timesheet $@
194 275
195 # vim: set et ts=4 sw=4: 276 # vim: set et ts=4 sw=4:
Please register or login to post a comment