-
Notifications
You must be signed in to change notification settings - Fork 26
/
jira-ui.go
114 lines (90 loc) · 1.93 KB
/
jira-ui.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
package main
import (
ui "github.com/gizak/termui"
"github.com/op/go-logging"
"os"
)
const (
ticketQuery = iota
ticketList = iota
labelList = iota
ticketShow = iota
)
const (
default_list_template = `{{ range .issues }}{{ .key | printf "%-20s"}} {{ dateFormat "2006-01-02" .fields.created }}/{{ dateFormat "2006-01-02T15:04" .fields.updated }} {{ .fields.summary | printf "%-75s"}} -- labels({{ join "," .fields.labels }})
{{ end }}`
)
var exitNow = false
type GoBacker interface {
GoBack()
}
type ItemSelecter interface {
SelectItem()
}
type TicketEditer interface {
EditTicket()
}
type TicketCommenter interface {
CommentTicket()
}
type PagePager interface {
NextLine(int)
PreviousLine(int)
NextPage()
PreviousPage()
Update()
}
type Navigable interface {
Create(...interface{})
Update()
PreviousLine(int)
NextLine(int)
PreviousPage()
NextPage()
}
var currentPage Navigable
var previousPage Navigable
var ticketQueryPage QueryPage
var ticketListPage TicketListPage
var labelListPage LabelListPage
var ticketShowPage TicketShowPage
func changePage(opts ...interface{}) {
newopts := make(map[string]string)
if len(opts) > 0 {
newopts = opts[0].(map[string]string)
}
switch currentPage.(type) {
case *QueryPage:
currentPage.Create(newopts)
case *TicketListPage:
currentPage.Create(newopts)
case *LabelListPage:
currentPage.Create(newopts)
case *TicketShowPage:
currentPage.Create(newopts)
}
}
var (
log = logging.MustGetLogger("jira")
format = "%{color}%{time:2006-01-02T15:04:05.000Z07:00} %{level:-5s} [%{shortfile}]%{color:reset} %{message}"
)
func main() {
var err error
logging.SetLevel(logging.NOTICE, "")
err = ensureLoggedIntoJira()
if err != nil {
log.Error("Login failed. Aborting")
os.Exit(2)
}
err = ui.Init()
if err != nil {
panic(err)
}
defer ui.Close()
registerKeyboardHandlers()
currentPage = &ticketQueryPage
for exitNow != true {
currentPage.Create()
ui.Loop()
}
}