Commit 7ab0abbc9ecc719cc9911799de84f3717703e9f2

Authored by Georg Hopp
1 parent fceb2ecb

Split timesheet in reusable helper

  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:
... ...
  1 +function truncate() {
  2 + [[ $# -lt 2 ]] && return 1
  3 +
  4 + local STRING=$1
  5 +
  6 + [[ ${#STRING} -gt ${2} ]] && STRING="${STRING:0:$(($2-3))}..."
  7 + echo -n ${STRING}
  8 +}
  9 +
  10 +# vim: set et ts=4 sw=4:
... ...
  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)
... ...
  1 +function underline() {
  2 + [[ $# -lt 2 ]] && return 1
  3 + printf "\033[4m%${1}s\033[24m" $2
  4 +}
  5 +
  6 +function bold() {
  7 + [[ $# -lt 2 ]] && return 1
  8 + printf "\033[1m%${1}s\033[22m" $2
  9 +}
  10 +
  11 +# vim: set et ts=4 sw=4:
... ...
Please register or login to post a comment