diff --git a/cmd/review/main.go b/cmd/review/main.go index 265c4a0..6649aad 100644 --- a/cmd/review/main.go +++ b/cmd/review/main.go @@ -2,12 +2,119 @@ package main import ( "fmt" + "math/rand" "os" + "strings" + "time" + + "github.com/gdamore/tcell/v2" + "github.com/rivo/tview" ) +func getTitle() string { + titles := []string{ + "yo bum rush the show", + "can i kick it?", + "super nintendo sega genesis", + "birthdays was the worst days", + "where were you when we were getting high?", + "it's real time, real time, time to get real", + } + return titles[rand.Intn(len(titles))] +} + +const ( + signupDir = "/town/signups" + acceptedDir = "/town/signups/accepted" + rejectedDir = "/town/signups/rejected" +) + +// TODO copypasta from signup cmd +type townApplication struct { + When time.Time + Answers map[string]string +} + +func (a townApplication) Render() string { + // TODO + return "TODO" +} + +func getApplications() ([]townApplication, error) { + entries, err := os.ReadDir(signupDir) + if err != nil { + return nil, fmt.Errorf("failed to read '%s': %w", signupDir, err) + } + out := []townApplication{} + for _, entry := range entries { + if !strings.HasSuffix(entry.Name(), "json") { + continue + } + // TODO read file + // TODO unmarshal + // TODO append + + } + + // TODO + return out, nil +} + func _main() error { - // TODO tview - return nil + rand.Seed(time.Now().Unix()) + + applications, err := getApplications() + if err != nil { + return fmt.Errorf("could not get applications: %w", err) + } + + pages := tview.NewPages() + mainFlex := tview.NewFlex() + + title := tview.NewTextView() + title.SetText(getTitle()) + + appView := tview.NewTextView() + if len(applications) == 0 { + appView.SetText("no applications found.") + } else { + appView.SetText(applications[0].Render()) + } + + legend := tview.NewTextView() + legend.SetText("TODO actions legend") + + mainFlex.SetDirection(tview.FlexRow) + mainFlex.AddItem(title, 1, -1, false) + mainFlex.AddItem(appView, 0, 1, true) + mainFlex.AddItem(legend, 1, -1, false) + + pages.AddPage("main", mainFlex, true, true) + // TODO page for textarea to notate + + app := tview.NewApplication() + app.SetRoot(pages, true) + + app.SetInputCapture(func(event *tcell.EventKey) *tcell.EventKey { + switch event.Rune() { + case 's': + // TODO skip + case 'r': + // TODO skip to random + case 'A': + // TODO approve + case 'R': + // TODO reject + case 'n': + // TODO notate + case 'Q': + app.Stop() + } + + return event + }) + + return app.Run() } func main() { diff --git a/cmd/signup/main.go b/cmd/signup/main.go index 0906066..71f74ca 100644 --- a/cmd/signup/main.go +++ b/cmd/signup/main.go @@ -16,9 +16,9 @@ import ( ) const ( - maxInputLength int = 10000 - signupDirectory string = "/town/signups" - logDir string = "/town/var/signup" + maxInputLength = 10000 + signupDirectory = "/town/signups" + logDir = "/town/var/signup" ) type scene struct {