From 16313a73cbc51ca7e6a3958e4c3cfa4c0dc76a7c Mon Sep 17 00:00:00 2001 From: Tim Fitzgerald Date: Wed, 25 Jul 2018 10:55:08 -0700 Subject: [PATCH 1/6] REturning new tickets as a TicketArray item --- zendesk/tickets.go | 6 ++++-- zendesk/widget.go | 5 +++-- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/zendesk/tickets.go b/zendesk/tickets.go index 7a770f70..e8282895 100644 --- a/zendesk/tickets.go +++ b/zendesk/tickets.go @@ -66,8 +66,9 @@ func listTickets(pag ...string) (*TicketArray, error) { } -func newTickets(ticketStatus string) ([]Ticket, error) { +func newTickets(ticketStatus string) ([]Ticket, *TicketArray, error) { newTickets := []Ticket{} + newTicketArray := &TicketArray{} tickets, err := listTickets() if err != nil { log.Fatal(err) @@ -75,8 +76,9 @@ func newTickets(ticketStatus string) ([]Ticket, error) { for _, Ticket := range tickets.Tickets { if Ticket.Status == ticketStatus && Ticket.Status != "closed" && Ticket.Status != "solved" { newTickets = append(newTickets, Ticket) + newTicketArray.Tickets = append(newTicketArray.Tickets, Ticket) } } - return newTickets, nil + return newTickets, newTicketArray, nil } diff --git a/zendesk/widget.go b/zendesk/widget.go index 278fe3d2..dc40d61b 100644 --- a/zendesk/widget.go +++ b/zendesk/widget.go @@ -26,13 +26,14 @@ func NewWidget() *Widget { /* -------------------- Exported Functions -------------------- */ func (widget *Widget) Refresh() { ticketStatus := wtf.Config.UString("wtf.mods.zendesk.status") - tickets, err := newTickets(ticketStatus) + tickets, ticketArray, err := newTickets(ticketStatus) + ticketArray.Count = len(ticketArray.Tickets) if err != nil { log.Fatal(err) } widget.UpdateRefreshedAt() - widget.View.SetTitle(fmt.Sprintf("%s (%d)", widget.Name, len(tickets))) + widget.View.SetTitle(fmt.Sprintf("%s (%d)", widget.Name, ticketArray.Count)) widget.View.SetText(widget.textContent(tickets)) } From 86c98a46581c646e60bec1f663afdbe15a5b999e Mon Sep 17 00:00:00 2001 From: Tim Fitzgerald Date: Wed, 25 Jul 2018 11:10:30 -0700 Subject: [PATCH 2/6] Using contents of TicketArray instead of slice of tickets --- zendesk/widget.go | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/zendesk/widget.go b/zendesk/widget.go index dc40d61b..d796c20d 100644 --- a/zendesk/widget.go +++ b/zendesk/widget.go @@ -33,8 +33,11 @@ func (widget *Widget) Refresh() { } widget.UpdateRefreshedAt() + // Just to use the tickets variable somewhere to remove warning + fmt.Sprintf(string(len(tickets))) + widget.View.SetTitle(fmt.Sprintf("%s (%d)", widget.Name, ticketArray.Count)) - widget.View.SetText(widget.textContent(tickets)) + widget.View.SetText(widget.textContent(ticketArray.Tickets)) } From c12bb5071d31ede337013307b91110dc69427ceb Mon Sep 17 00:00:00 2001 From: Tim Fitzgerald Date: Wed, 25 Jul 2018 11:27:23 -0700 Subject: [PATCH 3/6] Stash for new branch --- zendesk/tickets.go | 6 ++---- zendesk/widget.go | 5 +---- 2 files changed, 3 insertions(+), 8 deletions(-) diff --git a/zendesk/tickets.go b/zendesk/tickets.go index e8282895..8cbe53d2 100644 --- a/zendesk/tickets.go +++ b/zendesk/tickets.go @@ -66,8 +66,7 @@ func listTickets(pag ...string) (*TicketArray, error) { } -func newTickets(ticketStatus string) ([]Ticket, *TicketArray, error) { - newTickets := []Ticket{} +func newTickets(ticketStatus string) (*TicketArray, error) { newTicketArray := &TicketArray{} tickets, err := listTickets() if err != nil { @@ -75,10 +74,9 @@ func newTickets(ticketStatus string) ([]Ticket, *TicketArray, error) { } for _, Ticket := range tickets.Tickets { if Ticket.Status == ticketStatus && Ticket.Status != "closed" && Ticket.Status != "solved" { - newTickets = append(newTickets, Ticket) newTicketArray.Tickets = append(newTicketArray.Tickets, Ticket) } } - return newTickets, newTicketArray, nil + return newTicketArray, nil } diff --git a/zendesk/widget.go b/zendesk/widget.go index d796c20d..91879d70 100644 --- a/zendesk/widget.go +++ b/zendesk/widget.go @@ -26,16 +26,13 @@ func NewWidget() *Widget { /* -------------------- Exported Functions -------------------- */ func (widget *Widget) Refresh() { ticketStatus := wtf.Config.UString("wtf.mods.zendesk.status") - tickets, ticketArray, err := newTickets(ticketStatus) + ticketArray, err := newTickets(ticketStatus) ticketArray.Count = len(ticketArray.Tickets) if err != nil { log.Fatal(err) } widget.UpdateRefreshedAt() - // Just to use the tickets variable somewhere to remove warning - fmt.Sprintf(string(len(tickets))) - widget.View.SetTitle(fmt.Sprintf("%s (%d)", widget.Name, ticketArray.Count)) widget.View.SetText(widget.textContent(ticketArray.Tickets)) From 626cbe0883d8d05e280abc46f003e1dd547d94cf Mon Sep 17 00:00:00 2001 From: Tim Fitzgerald Date: Wed, 25 Jul 2018 12:55:06 -0700 Subject: [PATCH 4/6] Cycle through selected issues with highlighting --- zendesk/widget.go | 87 ++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 79 insertions(+), 8 deletions(-) diff --git a/zendesk/widget.go b/zendesk/widget.go index 91879d70..7d0c4b14 100644 --- a/zendesk/widget.go +++ b/zendesk/widget.go @@ -11,6 +11,9 @@ import ( type Widget struct { wtf.TextWidget + + result *TicketArray + selected int } func NewWidget() *Widget { @@ -30,33 +33,42 @@ func (widget *Widget) Refresh() { ticketArray.Count = len(ticketArray.Tickets) if err != nil { log.Fatal(err) + } else { + widget.result = ticketArray } widget.UpdateRefreshedAt() - widget.View.SetTitle(fmt.Sprintf("%s (%d)", widget.Name, ticketArray.Count)) - widget.View.SetText(widget.textContent(ticketArray.Tickets)) - + widget.display() } /* -------------------- Unexported Functions -------------------- */ +func (widget *Widget) display() { + widget.View.SetTitle(fmt.Sprintf("%s (%d)", widget.Name, widget.result.Count)) + widget.View.SetText(widget.textContent(widget.result.Tickets)) +} + func (widget *Widget) textContent(items []Ticket) string { if len(items) == 0 { return fmt.Sprintf("No unassigned tickets in queue - woop!!") } str := "" - for _, data := range items { - str = str + widget.format(data) + for idx, data := range items { + str = str + widget.format(data, idx) } return str } -func (widget *Widget) format(ticket Ticket) string { +func (widget *Widget) format(ticket Ticket, idx int) string { var str string requesterName := widget.parseRequester(ticket) - str = fmt.Sprintf(" [green]%d - %s\n %s\n\n", ticket.Id, requesterName, ticket.Subject) + textColor := wtf.Config.UString("wtf.colors.background", "green") + if idx == widget.selected { + textColor = wtf.Config.UString("wtf.colors.background", "orange") + } + str = fmt.Sprintf(" [%s:]%d - %s\n %s\n\n", textColor, ticket.Id, requesterName, ticket.Subject) return str } @@ -73,21 +85,80 @@ func (widget *Widget) parseRequester(ticket Ticket) interface{} { return fromName } +func (widget *Widget) next() { + widget.selected++ + if widget.result != nil && widget.selected >= len(widget.result.Tickets) { + widget.selected = 0 + } +} + +func (widget *Widget) prev() { + widget.selected-- + if widget.selected < 0 && widget.result != nil { + widget.selected = len(widget.result.Tickets) - 1 + } +} + func (widget *Widget) openTicket() { - wtf.OpenFile("https://" + subdomain + ".zendesk.com") + sel := widget.selected + if sel >= 0 && widget.result != nil && sel < len(widget.result.Tickets) { + issue := &widget.result.Tickets[widget.selected] + wtf.OpenFile(issue.URL) + } +} + +func (widget *Widget) unselect() { + widget.selected = -1 +} + +func (widget *Widget) rowColor(idx int) string { + if widget.View.HasFocus() && (idx == widget.selected) { + foreColor := wtf.Config.UString("wtf.colors.highlight.fore", "black") + backColor := wtf.Config.UString("wtf.colors.highlight.back", "orange") + + return fmt.Sprintf("%s:%s", foreColor, backColor) + } + return wtf.RowColor("zendesk", idx) } func (widget *Widget) keyboardIntercept(event *tcell.EventKey) *tcell.EventKey { switch string(event.Rune()) { + case "j": + // Select the next item down + widget.next() + widget.display() + return nil + case "k": + // Select the next item up + widget.prev() + widget.display() + return nil + case "f": widget.openTicket() return nil } switch event.Key() { + case tcell.KeyDown: + // Select the next item down + widget.next() + widget.display() + return nil case tcell.KeyEnter: widget.openTicket() return nil + case tcell.KeyEsc: + // Unselect the current row + widget.unselect() + widget.display() + return event + case tcell.KeyUp: + // Select the next item up + widget.prev() + widget.display() + return nil default: + // Pass it along return event } } From 7ad7e2ccfdc9ac3f32562260b95266c2c2954f03 Mon Sep 17 00:00:00 2001 From: Tim Fitzgerald Date: Wed, 25 Jul 2018 14:41:21 -0700 Subject: [PATCH 5/6] Can scroll through items and open URL of ticket --- zendesk/widget.go | 13 ++----------- 1 file changed, 2 insertions(+), 11 deletions(-) diff --git a/zendesk/widget.go b/zendesk/widget.go index 7d0c4b14..9a3bfabe 100644 --- a/zendesk/widget.go +++ b/zendesk/widget.go @@ -103,7 +103,8 @@ func (widget *Widget) openTicket() { sel := widget.selected if sel >= 0 && widget.result != nil && sel < len(widget.result.Tickets) { issue := &widget.result.Tickets[widget.selected] - wtf.OpenFile(issue.URL) + ticketUrl := fmt.Sprintf("https://%s.zendesk.com/agent/tickets/%d", subdomain, issue.Id) + wtf.OpenFile(ticketUrl) } } @@ -111,16 +112,6 @@ func (widget *Widget) unselect() { widget.selected = -1 } -func (widget *Widget) rowColor(idx int) string { - if widget.View.HasFocus() && (idx == widget.selected) { - foreColor := wtf.Config.UString("wtf.colors.highlight.fore", "black") - backColor := wtf.Config.UString("wtf.colors.highlight.back", "orange") - - return fmt.Sprintf("%s:%s", foreColor, backColor) - } - return wtf.RowColor("zendesk", idx) -} - func (widget *Widget) keyboardIntercept(event *tcell.EventKey) *tcell.EventKey { switch string(event.Rune()) { case "j": From e1030379cdbba555cd9f5008a591dad53862d88c Mon Sep 17 00:00:00 2001 From: Tim Fitzgerald Date: Wed, 25 Jul 2018 14:54:42 -0700 Subject: [PATCH 6/6] Removed capture of Up and Down keys to stop interfering with scrolling --- zendesk/widget.go | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/zendesk/widget.go b/zendesk/widget.go index 9a3bfabe..7332e6b5 100644 --- a/zendesk/widget.go +++ b/zendesk/widget.go @@ -130,11 +130,11 @@ func (widget *Widget) keyboardIntercept(event *tcell.EventKey) *tcell.EventKey { return nil } switch event.Key() { - case tcell.KeyDown: - // Select the next item down - widget.next() - widget.display() - return nil + /* case tcell.KeyDown: + // Select the next item down + widget.next() + widget.display() + return nil */ case tcell.KeyEnter: widget.openTicket() return nil @@ -143,11 +143,11 @@ func (widget *Widget) keyboardIntercept(event *tcell.EventKey) *tcell.EventKey { widget.unselect() widget.display() return event - case tcell.KeyUp: - // Select the next item up - widget.prev() - widget.display() - return nil + /* case tcell.KeyUp: + // Select the next item up + widget.prev() + widget.display() + return nil */ default: // Pass it along return event