print.go (2377B)
1 package jira 2 3 import ( 4 "fmt" 5 "net/url" 6 "path" 7 "strings" 8 "time" 9 ) 10 11 func printIssues(issues []Issue) string { 12 buf := &strings.Builder{} 13 for _, ii := range issues { 14 name := strings.Replace(ii.Key, "-", "/", 1) 15 fmt.Fprintf(buf, "%s/issue\t%s\n", name, ii.Summary) 16 } 17 return buf.String() 18 } 19 20 func printIssue(i *Issue) string { 21 buf := &strings.Builder{} 22 if i.Reporter != nil { 23 fmt.Fprintln(buf, "From:", i.Reporter) 24 } 25 fmt.Fprintln(buf, "Date:", i.Created.Format(time.RFC1123Z)) 26 if !i.Due.IsZero() { 27 fmt.Fprintln(buf, "Due:", i.Due.Format(time.RFC1123Z)) 28 } 29 if i.Assignee != nil { 30 fmt.Fprintln(buf, "Assignee:", i.Assignee) 31 } 32 if u, err := url.Parse(i.URL); err == nil { 33 u.Path = path.Join("browse", i.Key) 34 fmt.Fprintf(buf, "Archived-At: <%s>\n", u) 35 } 36 fmt.Fprintf(buf, "Archived-At: <%s>\n", i.URL) 37 fmt.Fprintln(buf, "Status:", i.Status.Name) 38 if len(i.Links) > 0 { 39 s := make([]string, len(i.Links)) 40 for j := range i.Links { 41 s[j] = i.Links[j].Key 42 } 43 fmt.Fprintln(buf, "References:", strings.Join(s, ", ")) 44 } 45 if len(i.Subtasks) > 0 { 46 s := make([]string, len(i.Subtasks)) 47 for j := range i.Subtasks { 48 s[j] = i.Subtasks[j].Key 49 } 50 fmt.Fprintln(buf, "Subtasks:", strings.Join(s, ", ")) 51 } 52 fmt.Fprintln(buf, "Subject:", i.Summary) 53 fmt.Fprintln(buf) 54 55 if i.Description != "" { 56 fmt.Fprintln(buf, strings.ReplaceAll(i.Description, "\r", "")) 57 } 58 if len(i.Comments) == 0 { 59 return buf.String() 60 } 61 fmt.Fprintln(buf) 62 for _, c := range i.Comments { 63 date := c.Created 64 if !c.Updated.IsZero() { 65 date = c.Updated 66 } 67 fmt.Fprintf(buf, "%s\t%s\t%s (%s)\n", c.ID, summarise(c.Body, 36), c.Author.Name, date.Format(time.DateTime)) 68 } 69 return buf.String() 70 } 71 72 func printComment(c *Comment) string { 73 buf := &strings.Builder{} 74 date := c.Created 75 if !c.Updated.IsZero() { 76 date = c.Updated 77 } 78 fmt.Fprintln(buf, "From:", c.Author) 79 fmt.Fprintln(buf, "Date:", date.Format(time.RFC1123Z)) 80 fmt.Fprintln(buf) 81 fmt.Fprintln(buf, strings.TrimSpace(c.Body)) 82 return buf.String() 83 } 84 85 func summarise(body string, length int) string { 86 if len(body) < length { 87 body = strings.ReplaceAll(body, "\n", " ") 88 return strings.TrimSpace(body) 89 } 90 body = body[:length] 91 body = strings.ReplaceAll(body, "\r", "") 92 body = strings.ReplaceAll(body, "\n", " ") 93 body = strings.TrimSpace(body) 94 body = strings.ReplaceAll(body, " ", " ") 95 return body + "..." 96 }