X-Git-Url: https://git.r.bdr.sh/rbdr/mobius/blobdiff_plain/08daa287cbbfc59c321e7f747fb4d92a9a129aef..71c56068adca18f76ebee86355f000a3e51d3127:/client.go?ds=sidebyside diff --git a/client.go b/client.go index a3147e8..940e6fe 100644 --- a/client.go +++ b/client.go @@ -220,7 +220,11 @@ func (ui *UI) renderSettingsForm() *tview.Flex { }, nil) settingsForm.AddInputField("Tracker", ui.HLClient.pref.Tracker, 0, nil, nil) settingsForm.AddButton("Save", func() { - ui.HLClient.pref.Username = settingsForm.GetFormItem(0).(*tview.InputField).GetText() + usernameInput := settingsForm.GetFormItem(0).(*tview.InputField).GetText() + if len(usernameInput) == 0 { + usernameInput = "unnamed" + } + ui.HLClient.pref.Username = usernameInput iconStr = settingsForm.GetFormItem(1).(*tview.InputField).GetText() ui.HLClient.pref.IconID, _ = strconv.Atoi(iconStr) ui.HLClient.pref.Tracker = settingsForm.GetFormItem(2).(*tview.InputField).GetText() @@ -410,9 +414,10 @@ func (ui *UI) renderServerUI() *tview.Flex { case tcell.KeyTab: ui.App.SetFocus(newsPostTextArea) case tcell.KeyEnter: + newsText := strings.ReplaceAll(newsPostTextArea.GetText(true), "\n", "\r") err := ui.HLClient.Send( *NewTransaction(tranOldPostNews, nil, - NewField(fieldData, []byte(newsPostTextArea.GetText(true))), + NewField(fieldData, []byte(newsText)), ), ) if err != nil { @@ -442,7 +447,7 @@ func (ui *UI) renderServerUI() *tview.Flex { fmt.Fprintf(newsPostTextArea, "\n") default: switch event.Rune() { - case 127: + case 127: // backspace curTxt := newsPostTextArea.GetText(true) if len(curTxt) > 0 { curTxt = curTxt[:len(curTxt)-1] @@ -490,7 +495,7 @@ func (ui *UI) Start() { home.AddItem( tview.NewFlex().AddItem(bannerItem, 0, 1, false), - 13, 1, false) + 14, 1, false) home.AddItem(tview.NewFlex(). AddItem(nil, 0, 1, false). AddItem(mainMenu, 0, 1, true). @@ -749,15 +754,16 @@ func (c *Client) GetTransactions() error { func handleClientGetUserNameList(c *Client, t *Transaction) (res []Transaction, err error) { var users []User for _, field := range t.Fields { - u, _ := ReadUser(field.Data) - //flagBitmap := big.NewInt(int64(binary.BigEndian.Uint16(u.Flags))) - //if flagBitmap.Bit(userFlagAdmin) == 1 { - // fmt.Fprintf(UserList, "[red::b]%s[-:-:-]\n", u.Name) - //} else { - // fmt.Fprintf(UserList, "%s\n", u.Name) - //} - - users = append(users, *u) + // The Hotline protocol docs say that ClientGetUserNameList should only return fieldUsernameWithInfo (300) + // fields, but shxd sneaks in fieldChatSubject (115) so it's important to filter explicitly for the expected + // field type. Probably a good idea to do everywhere. + if bytes.Equal(field.ID, []byte{0x01, 0x2c}) { + u, err := ReadUser(field.Data) + if err != nil { + return res, err + } + users = append(users, *u) + } } c.UserList = users