mirror of
https://github.com/taigrr/wtf
synced 2025-01-18 04:03:14 -08:00
A modest number of disjointed improvements
This commit is contained in:
parent
3a3efbd59f
commit
06d4d2c2f7
@ -10,39 +10,6 @@ import (
|
|||||||
"os"
|
"os"
|
||||||
)
|
)
|
||||||
|
|
||||||
type SearchResult struct {
|
|
||||||
StartAt int `json:"startAt"`
|
|
||||||
MaxResults int `json:"maxResults"`
|
|
||||||
Total int `json:"total"`
|
|
||||||
Issues []Issue `json:"issues"`
|
|
||||||
}
|
|
||||||
|
|
||||||
type Issue struct {
|
|
||||||
Expand string `json:"expand"`
|
|
||||||
ID string `json:"id"`
|
|
||||||
Self string `json:"self"`
|
|
||||||
Key string `json:"key"`
|
|
||||||
|
|
||||||
IssueFields *IssueFields `json:"fields"`
|
|
||||||
}
|
|
||||||
|
|
||||||
type IssueFields struct {
|
|
||||||
Summary string `json:"summary"`
|
|
||||||
|
|
||||||
IssueType *IssueType `json:"issuetype"`
|
|
||||||
}
|
|
||||||
|
|
||||||
type IssueType struct {
|
|
||||||
Self string `json:"self"`
|
|
||||||
ID string `json:"id"`
|
|
||||||
Description string `json:"description"`
|
|
||||||
IconURL string `json:"iconUrl"`
|
|
||||||
Name string `json:"name"`
|
|
||||||
Subtask bool `json:"subtask"`
|
|
||||||
}
|
|
||||||
|
|
||||||
/* -------------------- -------------------- */
|
|
||||||
|
|
||||||
func IssuesFor(username string) (*SearchResult, error) {
|
func IssuesFor(username string) (*SearchResult, error) {
|
||||||
url := fmt.Sprintf("/rest/api/2/search?jql=assignee=%s", username)
|
url := fmt.Sprintf("/rest/api/2/search?jql=assignee=%s", username)
|
||||||
|
|
||||||
|
28
jira/issues.go
Normal file
28
jira/issues.go
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
package jira
|
||||||
|
|
||||||
|
import (
|
||||||
|
)
|
||||||
|
|
||||||
|
type Issue struct {
|
||||||
|
Expand string `json:"expand"`
|
||||||
|
ID string `json:"id"`
|
||||||
|
Self string `json:"self"`
|
||||||
|
Key string `json:"key"`
|
||||||
|
|
||||||
|
IssueFields *IssueFields `json:"fields"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type IssueFields struct {
|
||||||
|
Summary string `json:"summary"`
|
||||||
|
|
||||||
|
IssueType *IssueType `json:"issuetype"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type IssueType struct {
|
||||||
|
Self string `json:"self"`
|
||||||
|
ID string `json:"id"`
|
||||||
|
Description string `json:"description"`
|
||||||
|
IconURL string `json:"iconUrl"`
|
||||||
|
Name string `json:"name"`
|
||||||
|
Subtask bool `json:"subtask"`
|
||||||
|
}
|
10
jira/search_result.go
Normal file
10
jira/search_result.go
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
package jira
|
||||||
|
|
||||||
|
import ()
|
||||||
|
|
||||||
|
type SearchResult struct {
|
||||||
|
StartAt int `json:"startAt"`
|
||||||
|
MaxResults int `json:"maxResults"`
|
||||||
|
Total int `json:"total"`
|
||||||
|
Issues []Issue `json:"issues"`
|
||||||
|
}
|
61
wtf.go
61
wtf.go
@ -37,15 +37,22 @@ func addToGrid(grid *tview.Grid, widget wtf.TextViewer) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Grid stores all the widgets onscreen (like an HTML table)
|
// Grid stores all the widgets onscreen (like an HTML table)
|
||||||
func buildGrid() *tview.Grid {
|
func buildGrid(modules []wtf.TextViewer) *tview.Grid {
|
||||||
grid := tview.NewGrid()
|
grid := tview.NewGrid()
|
||||||
grid.SetColumns(wtf.ToInts(Config.UList("wtf.grid.columns"))...)
|
grid.SetColumns(wtf.ToInts(Config.UList("wtf.grid.columns"))...)
|
||||||
grid.SetRows(wtf.ToInts(Config.UList("wtf.grid.rows"))...)
|
grid.SetRows(wtf.ToInts(Config.UList("wtf.grid.rows"))...)
|
||||||
grid.SetBorder(false)
|
grid.SetBorder(false)
|
||||||
|
|
||||||
|
for _, module := range modules {
|
||||||
|
addToGrid(grid, module)
|
||||||
|
go wtf.Schedule(module)
|
||||||
|
}
|
||||||
|
|
||||||
return grid
|
return grid
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// FIXME: Not a fan of how this function has to reach outside itself, grab
|
||||||
|
// Modules, and then operate on them. Should be able to pass that in instead
|
||||||
func keyboardIntercept(event *tcell.EventKey) *tcell.EventKey {
|
func keyboardIntercept(event *tcell.EventKey) *tcell.EventKey {
|
||||||
// Ctrl-R: force-refreshes every widget
|
// Ctrl-R: force-refreshes every widget
|
||||||
if event.Key() == tcell.KeyCtrlR {
|
if event.Key() == tcell.KeyCtrlR {
|
||||||
@ -57,7 +64,7 @@ func keyboardIntercept(event *tcell.EventKey) *tcell.EventKey {
|
|||||||
return event
|
return event
|
||||||
}
|
}
|
||||||
|
|
||||||
func refresher(stat *status.Widget, app *tview.Application) {
|
func refresher(app *tview.Application) {
|
||||||
tick := time.NewTicker(time.Duration(Config.UInt("wtf.refreshInterval", 1)) * time.Second)
|
tick := time.NewTicker(time.Duration(Config.UInt("wtf.refreshInterval", 1)) * time.Second)
|
||||||
quit := make(chan struct{})
|
quit := make(chan struct{})
|
||||||
|
|
||||||
@ -82,63 +89,37 @@ var Modules []wtf.TextViewer
|
|||||||
func main() {
|
func main() {
|
||||||
wtf.Config = Config
|
wtf.Config = Config
|
||||||
|
|
||||||
// TODO: Really need to generalize all of these. This don't scale
|
|
||||||
bamboohr.Config = Config
|
bamboohr.Config = Config
|
||||||
bamboo := bamboohr.NewWidget()
|
|
||||||
|
|
||||||
gcal.Config = Config
|
gcal.Config = Config
|
||||||
cal := gcal.NewWidget()
|
|
||||||
|
|
||||||
git.Config = Config
|
git.Config = Config
|
||||||
git := git.NewWidget()
|
|
||||||
|
|
||||||
github.Config = Config
|
github.Config = Config
|
||||||
github := github.NewWidget()
|
|
||||||
|
|
||||||
jira.Config = Config
|
jira.Config = Config
|
||||||
jira := jira.NewWidget()
|
|
||||||
|
|
||||||
newrelic.Config = Config
|
newrelic.Config = Config
|
||||||
newrelic := newrelic.NewWidget()
|
|
||||||
|
|
||||||
opsgenie.Config = Config
|
opsgenie.Config = Config
|
||||||
opsgenie := opsgenie.NewWidget()
|
|
||||||
|
|
||||||
security.Config = Config
|
security.Config = Config
|
||||||
sec := security.NewWidget()
|
|
||||||
|
|
||||||
status.Config = Config
|
status.Config = Config
|
||||||
stat := status.NewWidget()
|
|
||||||
|
|
||||||
weather.Config = Config
|
weather.Config = Config
|
||||||
weather := weather.NewWidget()
|
|
||||||
|
|
||||||
Modules = []wtf.TextViewer{
|
Modules = []wtf.TextViewer{
|
||||||
bamboo,
|
bamboohr.NewWidget(),
|
||||||
cal,
|
gcal.NewWidget(),
|
||||||
git,
|
git.NewWidget(),
|
||||||
github,
|
github.NewWidget(),
|
||||||
jira,
|
jira.NewWidget(),
|
||||||
newrelic,
|
newrelic.NewWidget(),
|
||||||
opsgenie,
|
opsgenie.NewWidget(),
|
||||||
sec,
|
security.NewWidget(),
|
||||||
stat,
|
status.NewWidget(),
|
||||||
weather,
|
weather.NewWidget(),
|
||||||
}
|
|
||||||
|
|
||||||
grid := buildGrid()
|
|
||||||
|
|
||||||
for _, module := range Modules {
|
|
||||||
addToGrid(grid, module)
|
|
||||||
go wtf.Schedule(module)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
app := tview.NewApplication()
|
app := tview.NewApplication()
|
||||||
app.SetInputCapture(keyboardIntercept)
|
app.SetInputCapture(keyboardIntercept)
|
||||||
|
|
||||||
// Loop in a routine to redraw the screen
|
// Loop in a routine to redraw the screen
|
||||||
go refresher(stat, app)
|
go refresher(app)
|
||||||
|
|
||||||
|
grid := buildGrid(Modules)
|
||||||
if err := app.SetRoot(grid, true).Run(); err != nil {
|
if err := app.SetRoot(grid, true).Run(); err != nil {
|
||||||
os.Exit(1)
|
os.Exit(1)
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user