X-Git-Url: https://git.r.bdr.sh/rbdr/mobius/blobdiff_plain/67d1f7231b807771b57c8f0e63dd796a03130eaf..6e4c02b1b9793776a52cf8b1f914eeadd2bbb4b5:/hotline/ui.go?ds=sidebyside diff --git a/hotline/ui.go b/hotline/ui.go index c005fb4..c5a0dbd 100644 --- a/hotline/ui.go +++ b/hotline/ui.go @@ -5,7 +5,6 @@ import ( "github.com/gdamore/tcell/v2" "github.com/rivo/tview" "gopkg.in/yaml.v3" - "io/ioutil" "os" "strconv" "strings" @@ -103,12 +102,7 @@ func (ui *UI) showBookmarks() *tview.List { return list } -func (ui *UI) getTrackerList() *tview.List { - listing, err := GetListing(ui.HLClient.Pref.Tracker) - if err != nil { - // TODO - } - +func (ui *UI) getTrackerList(servers []ServerRecord) *tview.List { list := tview.NewList() list.SetInputCapture(func(event *tcell.EventKey) *tcell.EventKey { if event.Key() == tcell.KeyEsc { @@ -118,14 +112,13 @@ func (ui *UI) getTrackerList() *tview.List { }) list.Box.SetBorder(true).SetTitle("| Servers |") - shortcut := 97 // rune for "a" - for i, srv := range listing { - addr := srv.Addr() - srvName := srv.Name + const shortcut = 97 // rune for "a" + for i, _ := range servers { + srv := servers[i] list.AddItem(string(srv.Name), string(srv.Description), rune(shortcut+i), func() { ui.Pages.RemovePage("joinServer") - newJS := ui.renderJoinServerForm(string(srvName), addr, GuestAccount, "", trackerListPage, false, true) + newJS := ui.renderJoinServerForm(string(srv.Name), srv.Addr(), GuestAccount, "", trackerListPage, false, true) ui.Pages.AddPage("joinServer", newJS, true, true) ui.Pages.ShowPage("joinServer") @@ -161,7 +154,7 @@ func (ui *UI) renderSettingsForm() *tview.Flex { // TODO: handle err } // TODO: handle err - err = ioutil.WriteFile(ui.HLClient.cfgPath, out, 0666) + err = os.WriteFile(ui.HLClient.cfgPath, out, 0666) if err != nil { println(ui.HLClient.cfgPath) panic(err) @@ -220,27 +213,26 @@ func (ui *UI) joinServer(addr, login, password string) error { func (ui *UI) renderJoinServerForm(name, server, login, password, backPage string, save, defaultConnect bool) *tview.Flex { joinServerForm := tview.NewForm() joinServerForm. - // AddInputField("Name", server, 0, func(textToCheck string, lastChar rune) bool { - // return false - // }, nil). AddInputField("Server", server, 0, nil, nil). AddInputField("Login", login, 0, nil, nil). AddPasswordField("Password", password, 0, '*', nil). AddCheckbox("Save", save, func(checked bool) { - ui.HLClient.Logger.Infow("saving bookmark") - // TODO: Implement bookmark saving + ui.HLClient.Pref.AddBookmark( + joinServerForm.GetFormItem(0).(*tview.InputField).GetText(), + joinServerForm.GetFormItem(0).(*tview.InputField).GetText(), + joinServerForm.GetFormItem(1).(*tview.InputField).GetText(), + joinServerForm.GetFormItem(2).(*tview.InputField).GetText(), + ) - ui.HLClient.Pref.AddBookmark(joinServerForm.GetFormItem(0).(*tview.InputField).GetText(), joinServerForm.GetFormItem(0).(*tview.InputField).GetText(), joinServerForm.GetFormItem(1).(*tview.InputField).GetText(), joinServerForm.GetFormItem(2).(*tview.InputField).GetText()) out, err := yaml.Marshal(ui.HLClient.Pref) if err != nil { panic(err) } - err = ioutil.WriteFile(ui.HLClient.cfgPath, out, 0666) + err = os.WriteFile(ui.HLClient.cfgPath, out, 0666) if err != nil { panic(err) } - // Pref := ui.HLClient.Pref }). AddButton("Cancel", func() { ui.Pages.SwitchToPage(backPage) @@ -351,7 +343,6 @@ func (ui *UI) renderServerUI() *tview.Flex { // Post news if event.Key() == tcell.KeyCtrlP { - newsFlex := tview.NewFlex() newsFlex.SetBorderPadding(0, 0, 1, 1) newsPostTextArea := tview.NewTextView() @@ -414,7 +405,7 @@ func (ui *UI) renderServerUI() *tview.Flex { newsPostTextArea.SetText(curTxt) } default: - _, _ = fmt.Fprintf(newsPostTextArea, string(event.Rune())) + _, _ = fmt.Fprint(newsPostTextArea, string(event.Rune())) } } @@ -471,7 +462,20 @@ func (ui *UI) Start() { ui.Pages.AddAndSwitchToPage("bookmarks", ui.showBookmarks(), true) }). AddItem("Browse Tracker", "", 't', func() { - ui.trackerList = ui.getTrackerList() + listing, err := GetListing(ui.HLClient.Pref.Tracker) + if err != nil { + errMsg := fmt.Sprintf("Error fetching tracker results:\n%v", err) + errModal := tview.NewModal() + errModal.SetText(errMsg) + errModal.AddButtons([]string{"Cancel"}) + errModal.SetDoneFunc(func(buttonIndex int, buttonLabel string) { + ui.Pages.RemovePage("errModal") + }) + ui.Pages.RemovePage("joinServer") + ui.Pages.AddPage("errModal", errModal, false, true) + return + } + ui.trackerList = ui.getTrackerList(listing) ui.Pages.AddAndSwitchToPage("trackerList", ui.trackerList, true) }). AddItem("Settings", "", 's', func() {