66 "fmt"
77 "io"
88 "os"
9+ "strings"
910 "text/template"
1011 "time"
1112
@@ -31,21 +32,11 @@ func TimeEntriesPrintQuietly(timeEntries []dto.TimeEntry, w io.Writer) error {
3132// TimeEntriesPrint will print more details
3233func TimeEntriesPrint (timeEntries []dto.TimeEntry , w io.Writer ) error {
3334 tw := tablewriter .NewWriter (w )
34- tw .SetHeader ([]string {"ID" , "Start" , "End" , "Dur" , "Project" , "Description" })
35+ tw .SetHeader ([]string {"ID" , "Start" , "End" , "Dur" , "Project" , "Description" , "Tags" })
3536
3637 lines := make ([][]string , len (timeEntries ))
3738
38- var wD , wP = 0 , 0
39-
4039 for i , t := range timeEntries {
41- if wD < len (t .Description ) {
42- wD = len (t .Description )
43- }
44-
45- if t .Project != nil && wP < len (t .Project .Name ) {
46- wP = len (t .Project .Name )
47- }
48-
4940 end := time .Now ()
5041 if t .TimeInterval .End != nil {
5142 end = * t .TimeInterval .End
@@ -62,23 +53,31 @@ func TimeEntriesPrint(timeEntries []dto.TimeEntry, w io.Writer) error {
6253 durationToString (end .Sub (t .TimeInterval .Start )),
6354 projectName ,
6455 t .Description ,
56+ strings .Join (tagsToStringSlice (t .Tags ), ", " ),
6557 }
6658 }
6759
6860 if width , _ , err := terminal .GetSize (int (os .Stdin .Fd ())); err == nil {
69- width = width - 70 - wP
70- if width < wD {
71- wD = width
72- }
61+ tw .SetColWidth (width / 3 )
7362 }
7463
75- tw .SetColWidth ( wD )
64+ tw .SetRowLine ( true )
7665 tw .AppendBulk (lines )
7766 tw .Render ()
7867
7968 return nil
8069}
8170
71+ func tagsToStringSlice (tags []dto.Tag ) []string {
72+ s := make ([]string , len (tags ))
73+
74+ for i , t := range tags {
75+ s [i ] = fmt .Sprintf ("%s (%s)" , t .Name , t .ID )
76+ }
77+
78+ return s
79+ }
80+
8281// TimeEntriesCSVPrint will print each time entry using the format string
8382func TimeEntriesCSVPrint (timeEntries []dto.TimeEntry , out io.Writer ) error {
8483 w := csv .NewWriter (out )
@@ -108,16 +107,6 @@ func TimeEntriesCSVPrint(timeEntries []dto.TimeEntry, out io.Writer) error {
108107 return t .In (time .Local ).Format ("2006-01-02 15:04:05" )
109108 }
110109
111- tags := func (tags []dto.Tag ) []string {
112- s := make ([]string , len (tags ))
113-
114- for i , t := range tags {
115- s [i ] = fmt .Sprintf ("%s (%s)" , t .Name , t .ID )
116- }
117-
118- return s
119- }
120-
121110 for _ , te := range timeEntries {
122111 var p dto.Project
123112 if te .Project != nil {
@@ -147,7 +136,7 @@ func TimeEntriesCSVPrint(timeEntries []dto.TimeEntry, out io.Writer) error {
147136 te .User .Name ,
148137 }
149138
150- err := w .Write (append (arr , tags (te .Tags )... ))
139+ err := w .Write (append (arr , tagsToStringSlice (te .Tags )... ))
151140
152141 if err != nil {
153142 return err
0 commit comments