about summary refs log tree commit diff stats
path: root/prototypes
Commit message (Expand)AuthorAgeFilesLines
* 6646 - in-progress prototype: tree editorKartik Agaram2020-07-141-0/+111
* 6623Kartik Agaram2020-07-081-0/+56
* 6622 - new syscalls: time and ntimeKartik Agaram2020-07-082-1/+75
* 6616Kartik Agaram2020-07-051-0/+7
* 6613 - first word of vocabulary implemented in MuKartik Agaram2020-07-052-44/+0
* 6609Kartik Agaram2020-07-052-1/+100
* 6607 - new prototype dir for spreadsheet ideasKartik Agaram2020-07-051-0/+69
* 6601Kartik Agaram2020-06-2931-150/+150
* 6600Kartik Agaram2020-06-2941-61/+61
* 6599Kartik Agaram2020-06-2912-12/+12
* 6570 - error on use of a clobbered varKartik Agaram2020-06-216-26/+42
* 6510Kartik Agaram2020-06-117-7/+7
* 6501Kartik Agaram2020-06-072-2/+2
* 6500Kartik Agaram2020-06-073-174/+174
* 6497Kartik Agaram2020-06-061-19/+29
* 6496Kartik Agaram2020-06-065-1/+474
* 6495Kartik Agaram2020-06-062-89/+91
* 6494Kartik Agaram2020-06-064-0/+471
* 6493 - browse: '#'s inside lines aren't headingsKartik Agaram2020-06-064-11/+18
* 6492Kartik Agaram2020-06-061-2/+0
* 6491Kartik Agaram2020-06-064-0/+466
* 6490 - browse: some manual testsKartik Agaram2020-06-062-0/+16293
* 6489 - browse app: headersKartik Agaram2020-06-062-2/+94
* 6488Kartik Agaram2020-06-054-0/+377
* 6487 - browse: support soft newlinesKartik Agaram2020-06-053-6/+55
* 6486Kartik Agaram2020-06-054-0/+332
* 6485Kartik Agaram2020-06-051-5/+9
* 6484Kartik Agaram2020-06-051-16/+6
* 6483 - finally, bold markup in the paginatorKartik Agaram2020-06-051-1/+75
* 6482Kartik Agaram2020-06-054-0/+261
* 6481Kartik Agaram2020-06-054-0/+0
* 6480Kartik Agaram2020-06-052-6/+9
* 6476Kartik Agaram2020-06-054-0/+258
* 6475Kartik Agaram2020-06-054-0/+258
* 6474Kartik Agaram2020-06-0515-41/+41
* 6473Kartik Agaram2020-06-054-0/+238
* 6472Kartik Agaram2020-06-051-1/+10
* 6471Kartik Agaram2020-06-054-0/+230
* 6470Kartik Agaram2020-06-056-229/+13
* 6469Kartik Agaram2020-06-053-0/+222
* 6468Kartik Agaram2020-06-055-2/+227
* 6467Kartik Agaram2020-06-043-0/+86
* 6456 - new directory for live-blogging prototypesKartik Agaram2020-05-3122-0/+2220
error) *AccountView { statusbar := ui.NewStack() statusline := NewStatusLine() statusbar.Push(statusline) grid := ui.NewGrid().Rows([]ui.GridSpec{ {ui.SIZE_WEIGHT, 1}, {ui.SIZE_EXACT, 1}, }).Columns([]ui.GridSpec{ {ui.SIZE_EXACT, 20}, {ui.SIZE_WEIGHT, 1}, }) spinner := NewSpinner() spinner.Start() grid.AddChild(spinner).At(0, 1) grid.AddChild(statusbar).At(1, 1) worker, err := worker.NewWorker(conf.Source, logger) if err != nil { statusline.Set(fmt.Sprintf("%s", err)) return &AccountView{ conf: conf, grid: grid, logger: logger, statusline: statusline, } } dirlist := NewDirectoryList(conf, logger, worker) grid.AddChild(ui.NewBordered(dirlist, ui.BORDER_RIGHT)).Span(2, 1) acct := &AccountView{ conf: conf, dirlist: dirlist, grid: grid, logger: logger, runCmd: runCmd, statusline: statusline, statusbar: statusbar, worker: worker, } go worker.Backend.Run() go func() { for { msg := <-worker.Messages msg = worker.ProcessMessage(msg) acct.onMessage(msg) } }() worker.PostAction(&types.Configure{Config: conf}, nil) worker.PostAction(&types.Connect{}, acct.connected) statusline.Set("Connecting...") return acct } func (acct *AccountView) Children() []ui.Drawable { return acct.grid.Children() } func (acct *AccountView) OnInvalidate(onInvalidate func(d ui.Drawable)) { acct.grid.OnInvalidate(func(_ ui.Drawable) { onInvalidate(acct) }) } func (acct *AccountView) Invalidate() { acct.grid.Invalidate() } func (acct *AccountView) Draw(ctx *ui.Context) { acct.grid.Draw(ctx) } func (acct *AccountView) Event(event tcell.Event) bool { if acct.interactive != nil { return acct.interactive.Event(event) } switch event := event.(type) { case *tcell.EventKey: if event.Rune() == ':' { exline := NewExLine(func(command string) { err := acct.runCmd(command) if err != nil { acct.statusline.Push( fmt.Sprintf("Error: %v", err), 10*time.Second). Color(tcell.ColorRed, tcell.ColorDefault) } acct.statusbar.Pop() acct.interactive = nil }, func() { acct.statusbar.Pop() acct.interactive = nil }) acct.interactive = exline acct.statusbar.Push(exline) return true } } return false } func (acct *AccountView) connected(msg types.WorkerMessage) { switch msg := msg.(type) { case *types.Done: acct.statusline.Set("Listing mailboxes...") acct.logger.Println("Listing mailboxes...") acct.dirlist.UpdateList(func(dirs []string) { var dir string for _, _dir := range dirs { if _dir == "INBOX" { dir = _dir break } } if dir == "" { dir = dirs[0] } acct.dirlist.Select(dir) acct.logger.Println("Connected.") acct.statusline.Set("Connected.") }) case *types.CertificateApprovalRequest: // TODO: Ask the user acct.worker.PostAction(&types.ApproveCertificate{ Message: types.RespondTo(msg), Approved: true, }, acct.connected) case *types.Error: acct.logger.Printf("%v", msg.Error) acct.statusline.Set(fmt.Sprintf("%v", msg.Error)). Color(tcell.ColorRed, tcell.ColorDefault) } } func (acct *AccountView) Directories() *DirectoryList { return acct.dirlist } func (acct *AccountView) onMessage(msg types.WorkerMessage) { // TODO }