Commit 7ab0abbc9ecc719cc9911799de84f3717703e9f2
1 parent
fceb2ecb
Split timesheet in reusable helper
Showing
5 changed files
with
148 additions
and
139 deletions
timesheet/datetimehelper.sh
0 → 100755
| 1 | +function tstodate() { | |
| 2 | + [[ $# -eq 0 ]] && return 1 | |
| 3 | + date -d @${1} +%Y-%m-%d | |
| 4 | +} | |
| 5 | + | |
| 6 | +function extracttime() { | |
| 7 | + local OIFS=${IFS} | |
| 8 | + | |
| 9 | + if [[ $# -eq 0 || -z $1 ]] | |
| 10 | + then | |
| 11 | + TIMEKEY="" | |
| 12 | + TIME="00:00:00" | |
| 13 | + else | |
| 14 | + IFS=: | |
| 15 | + set -- $=1 | |
| 16 | + IFS=${OIFS} | |
| 17 | + TIMEKEY=$1 | |
| 18 | + TIME=$(printf "%02d:%02d:%02d" ${2:-0} ${3:-0} $4) | |
| 19 | + fi | |
| 20 | +} | |
| 21 | + | |
| 22 | +# vim: set et ts=4 sw=4: | ... | ... |
timesheet/stringhelper.sh
0 → 100755
timesheet/taskhelper.sh
0 → 100755
| 1 | +#!/bin/zsh | |
| 2 | + | |
| 3 | +function tasktimes() { | |
| 4 | + [[ $# -eq 0 ]] && return 1 | |
| 5 | + | |
| 6 | + local KEY=${2:-\\1} | |
| 7 | + local T | |
| 8 | + local D='([0-9]{4}-[0-9]{2}-[0-9]{2})' | |
| 9 | + local N='([0-9]+)' | |
| 10 | + local EXPR='s/'$D'.*PT('$N'H)?('$N'M)?('$N').*/'${KEY}':\3:\5:\7/;te;d;:e' | |
| 11 | + | |
| 12 | + task $1 info | sed -r ${EXPR} | awk -F: ' | |
| 13 | + { | |
| 14 | + s = (d[$1][2] + $4) % 60 | |
| 15 | + _m = int((d[$1][2] + $4) / 60) | |
| 16 | + m = (d[$1][1] + $3 + _m) % 60 | |
| 17 | + _h = int((d[$1][1] + $3 + _m) / 60) | |
| 18 | + d[$1][0] += $2 + _h | |
| 19 | + d[$1][1] = m | |
| 20 | + d[$1][2] = s | |
| 21 | + } | |
| 22 | + END { | |
| 23 | + for(i in d) | |
| 24 | + printf("%s:%d:%d:%d\n", i, d[i][0], d[i][1], d[i][2]) | |
| 25 | + }' | sort -t: -k1 | |
| 26 | +} | |
| 27 | + | |
| 28 | +function tasktimestotal() { | |
| 29 | + tasktimes $1 TOTAL | |
| 30 | +} | |
| 31 | + | |
| 32 | +function taskdescription() { | |
| 33 | + [[ $# -eq 0 ]] && return 1 | |
| 34 | + task $1 _unique description | |
| 35 | +} | |
| 36 | + | |
| 37 | +function taskproject() { | |
| 38 | + [[ $# -eq 0 ]] && return 1 | |
| 39 | + task $1 _unique project | |
| 40 | +} | |
| 41 | + | |
| 42 | +function taskurgency() { | |
| 43 | + [[ $# -eq 0 ]] && return 1 | |
| 44 | + task $1 _urgency | cut -d\ -f 4 | |
| 45 | +} | |
| 46 | + | |
| 47 | +function taskentry() { | |
| 48 | + [[ $# -eq 0 ]] && return 1 | |
| 49 | + task $1 _unique entry | |
| 50 | +} | |
| 51 | + | |
| 52 | +function taskend() { | |
| 53 | + [[ $# -eq 0 ]] && return 1 | |
| 54 | + task $1 _unique end | |
| 55 | +} | |
| 56 | + | |
| 57 | +function taskuuids() { | |
| 58 | + local UUID | |
| 59 | + | |
| 60 | + [[ $# -eq 0 ]] && set -- \( +PENDING or +DONE \) | |
| 61 | + for UUID in $(task $@ _uuid) | |
| 62 | + do | |
| 63 | + printf "%05.2f\037%s\037%s\n" \ | |
| 64 | + "$(taskurgency $UUID)" \ | |
| 65 | + "$(taskdescription $UUID)" \ | |
| 66 | + $UUID | |
| 67 | + done | sort -t$'\037' -k1nr,2 | cut -d$'\037' -f3 | |
| 68 | +} | |
| 69 | + | |
| 70 | +function pendinguuids() { | |
| 71 | + taskuuids +PENDING $@ | |
| 72 | +} | |
| 73 | + | |
| 74 | +function doneuuids() { | |
| 75 | + taskuuids +COMPLETED $@ | |
| 76 | +} | |
| 77 | + | |
| 78 | +function blockeduuids() { | |
| 79 | + taskuuids +BLOCKED $@ | |
| 80 | +} | |
| 81 | + | |
| 82 | +function blockinguuids() { | |
| 83 | + taskuuids +BLOCKING $@ | |
| 84 | +} | |
| 85 | + | |
| 86 | +function deleteduuids() { | |
| 87 | + taskuuids +DELETED $@ | |
| 88 | +} | |
| 89 | + | |
| 90 | +# vim: set et ts=4 sw=4: | ... | ... |
| 1 | 1 | #!/bin/zsh |
| 2 | 2 | |
| 3 | -function tasktimes() { | |
| 4 | - [[ $# -eq 0 ]] && return 1 | |
| 5 | - | |
| 6 | - local KEY=${2:-\\1} | |
| 7 | - local T | |
| 8 | - local D='([0-9]{4}-[0-9]{2}-[0-9]{2})' | |
| 9 | - local N='([0-9]+)' | |
| 10 | - local EXPR='s/'$D'.*PT('$N'H)?('$N'M)?('$N').*/'${KEY}':\3:\5:\7/;te;d;:e' | |
| 11 | - | |
| 12 | - task $1 info | sed -r ${EXPR} | awk -F: ' | |
| 13 | - { | |
| 14 | - s = (d[$1][2] + $4) % 60 | |
| 15 | - _m = int((d[$1][2] + $4) / 60) | |
| 16 | - m = (d[$1][1] + $3 + _m) % 60 | |
| 17 | - _h = int((d[$1][1] + $3 + _m) / 60) | |
| 18 | - d[$1][0] += $2 + _h | |
| 19 | - d[$1][1] = m | |
| 20 | - d[$1][2] = s | |
| 21 | - } | |
| 22 | - END { | |
| 23 | - for(i in d) | |
| 24 | - printf("%s:%d:%d:%d\n", i, d[i][0], d[i][1], d[i][2]) | |
| 25 | - }' | sort -t: -k1 | |
| 26 | -} | |
| 27 | - | |
| 28 | -function tasktimestotal() { | |
| 29 | - tasktimes $1 TOTAL | |
| 30 | -} | |
| 31 | - | |
| 32 | -function taskdescription() { | |
| 33 | - [[ $# -eq 0 ]] && return 1 | |
| 34 | - task $1 _unique description | |
| 35 | -} | |
| 36 | - | |
| 37 | -function taskproject() { | |
| 38 | - [[ $# -eq 0 ]] && return 1 | |
| 39 | - task $1 _unique project | |
| 40 | -} | |
| 41 | - | |
| 42 | -function taskurgency() { | |
| 43 | - [[ $# -eq 0 ]] && return 1 | |
| 44 | - task $1 _urgency | cut -d\ -f 4 | |
| 45 | -} | |
| 46 | - | |
| 47 | -function taskentry() { | |
| 48 | - [[ $# -eq 0 ]] && return 1 | |
| 49 | - task $1 _unique entry | |
| 50 | -} | |
| 51 | - | |
| 52 | -function taskend() { | |
| 53 | - [[ $# -eq 0 ]] && return 1 | |
| 54 | - task $1 _unique end | |
| 55 | -} | |
| 56 | - | |
| 57 | -function taskuuids() { | |
| 58 | - local UUID | |
| 59 | - | |
| 60 | - [[ $# -eq 0 ]] && set -- \( +PENDING or +DONE \) | |
| 61 | - for UUID in $(task $@ _uuid) | |
| 62 | - do | |
| 63 | - printf "%05.2f\037%s\037%s\n" \ | |
| 64 | - "$(taskurgency $UUID)" \ | |
| 65 | - "$(taskdescription $UUID)" \ | |
| 66 | - $UUID | |
| 67 | - done | sort -t$'\037' -k1nr,2 | cut -d$'\037' -f3 | |
| 68 | -} | |
| 69 | - | |
| 70 | -function pendinguuids() { | |
| 71 | - taskuuids +PENDING $@ | |
| 72 | -} | |
| 73 | - | |
| 74 | -function doneuuids() { | |
| 75 | - taskuuids +COMPLETED $@ | |
| 76 | -} | |
| 77 | - | |
| 78 | -function blockeduuids() { | |
| 79 | - taskuuids +BLOCKED $@ | |
| 80 | -} | |
| 81 | - | |
| 82 | -function blockinguuids() { | |
| 83 | - taskuuids +BLOCKING $@ | |
| 84 | -} | |
| 85 | - | |
| 86 | -function deleteduuids() { | |
| 87 | - taskuuids +DELETED $@ | |
| 88 | -} | |
| 89 | - | |
| 90 | -function underline() { | |
| 91 | - [[ $# -lt 2 ]] && return 1 | |
| 92 | - printf "\033[4m%${1}s\033[24m" "$2" | |
| 93 | -} | |
| 94 | - | |
| 95 | -function bold() { | |
| 96 | - [[ $# -lt 2 ]] && return 1 | |
| 97 | - printf "\033[1m%${1}s\033[22m" "$2" | |
| 98 | -} | |
| 99 | - | |
| 100 | -function tstodate() { | |
| 101 | - [[ $# -eq 0 ]] && return 1 | |
| 102 | - date -d @${1} +%Y-%m-%d | |
| 103 | -} | |
| 104 | - | |
| 105 | -function extracttime() { | |
| 106 | - [[ $# -eq 0 ]] && return 1 | |
| 107 | - | |
| 108 | - local OIFS=${IFS} | |
| 109 | - | |
| 110 | - if [[ -z $1 ]] | |
| 111 | - then | |
| 112 | - TIMEKEY="" | |
| 113 | - TIME="00:00:00" | |
| 114 | - else | |
| 115 | - IFS=: | |
| 116 | - set -- $(echo $1) | |
| 117 | - IFS=${OIFS} | |
| 118 | - TIMEKEY="$1" | |
| 119 | - TIME=$(printf "%02d:%02d:%02d" ${2:-0} ${3:-0} $4) | |
| 120 | - fi | |
| 121 | -} | |
| 3 | +source $0:A:h/datetimehelper.sh | |
| 4 | +source $0:A:h/stringhelper.sh | |
| 5 | +source $0:A:h/taskhelper.sh | |
| 6 | +source $0:A:h/ttyhelper.sh | |
| 122 | 7 | |
| 123 | 8 | function printtimes() { |
| 124 | 9 | local T |
| 125 | - for T in "$@" | |
| 10 | + for T in $@ | |
| 126 | 11 | do |
| 127 | - extracttime "$T" | |
| 12 | + extracttime $T | |
| 128 | 13 | printf "%37s%-4s%10s: %s\n" "spent - " "$(date -d "$TIMEKEY" +%a)" \ |
| 129 | - "$TIMEKEY" "$TIME" | |
| 14 | + $TIMEKEY $TIME | |
| 130 | 15 | done |
| 131 | 16 | } |
| 132 | 17 | |
| 133 | -function truncate() { | |
| 134 | - [[ $# -lt 2 ]] && return 1 | |
| 135 | - | |
| 136 | - local STRING=$1 | |
| 137 | - | |
| 138 | - [[ ${#STRING} -gt ${2} ]] && STRING="${STRING:0:$(($2-3))}..." | |
| 139 | - echo -n "${STRING}" | |
| 140 | -} | |
| 141 | - | |
| 142 | 18 | function showall() { |
| 143 | 19 | [[ $# -eq 0 ]] && return 1 |
| 144 | 20 | |
| ... | ... | @@ -151,9 +27,9 @@ function showall() { |
| 151 | 27 | "$(underline -10 completed)" \ |
| 152 | 28 | "$(underline -10 entered)" |
| 153 | 29 | |
| 154 | - for UUID in "$@" | |
| 30 | + for UUID in $@ | |
| 155 | 31 | do |
| 156 | - extracttime "$(tasktimes $UUID TOTAL)" | |
| 32 | + extracttime $(tasktimes $UUID TOTAL) | |
| 157 | 33 | printf "%-16s %-35s %-10s %-10s %-8s\n" \ |
| 158 | 34 | "$(truncate "$(taskproject $UUID)" 16)" \ |
| 159 | 35 | "$(truncate "$(taskdescription $UUID)" 35)" \ |
| ... | ... | @@ -225,21 +101,21 @@ NL=$'\n' |
| 225 | 101 | # |
| 226 | 102 | SHORTOPTS=?hf: |
| 227 | 103 | LONGOPTS=help,html,file |
| 228 | -ARGS=$(getopt -o "${SHORTOPTS}" --long "${LONGOPTS}" -n "timesheet" -- "$@") | |
| 104 | +ARGS=$(getopt -o ${SHORTOPTS} --long ${LONGOPTS} -n timesheet -- $@) | |
| 229 | 105 | if [ $? -ne 0 ] |
| 230 | 106 | then |
| 231 | - usage "$0" | |
| 107 | + usage $0 | |
| 232 | 108 | exit 1 |
| 233 | 109 | fi |
| 234 | -eval set -- "${ARGS}" | |
| 110 | +eval set -- ${=ARGS} | |
| 235 | 111 | unset ARGS |
| 236 | 112 | |
| 237 | 113 | while true |
| 238 | 114 | do |
| 239 | - case "$1" in | |
| 115 | + case $1 in | |
| 240 | 116 | '-?'|'--help') |
| 241 | 117 | shift |
| 242 | - usage "$0" | |
| 118 | + usage $0 | |
| 243 | 119 | exit 0 |
| 244 | 120 | ;; |
| 245 | 121 | '-h'|'--html') |
| ... | ... | @@ -263,7 +139,7 @@ do |
| 263 | 139 | esac |
| 264 | 140 | done |
| 265 | 141 | |
| 266 | -[[ $OUTFILE ]] && { | |
| 142 | +[[ -n $OUTFILE ]] && { | |
| 267 | 143 | if [[ ${DOHTML} -eq 1 ]] |
| 268 | 144 | then |
| 269 | 145 | exec 1> >(ansi2html >${OUTFILE}.html) | ... | ... |
Please
register
or
login
to post a comment