diff --git a/interface/ui.go b/interface/ui.go index f08c9f3..43e214b 100644 --- a/interface/ui.go +++ b/interface/ui.go @@ -54,5 +54,4 @@ type MainView interface { } type LoginView interface { - } diff --git a/matrix/pushrules/action.go b/matrix/pushrules/action.go index 1de973f..acb97b9 100644 --- a/matrix/pushrules/action.go +++ b/matrix/pushrules/action.go @@ -46,9 +46,9 @@ type PushActionArrayShould struct { // Whether or not the array contained a Notify, DontNotify or Coalesce action type. NotifySpecified bool // Whether or not the event in question should trigger a notification. - Notify bool + Notify bool // Whether or not the event in question should be highlighted. - Highlight bool + Highlight bool // Whether or not the event in question should trigger a sound alert. PlaySound bool diff --git a/matrix/rooms/member.go b/matrix/rooms/member.go index 4af20a6..20c994b 100644 --- a/matrix/rooms/member.go +++ b/matrix/rooms/member.go @@ -35,11 +35,11 @@ type Member struct { // The MXID of the member. UserID string `json:"-"` // The membership status. Defaults to leave. - Membership Membership `json:"membership"` + Membership Membership `json:"membership"` // The display name of the user. Defaults to the user ID. - DisplayName string `json:"displayname"` + DisplayName string `json:"displayname"` // The avatar URL of the user. Defaults to an empty string. - AvatarURL string `json:"avatar_url"` + AvatarURL string `json:"avatar_url"` } // eventToRoomMember converts a m.room.member state event into a Member object. diff --git a/matrix/rooms/room.go b/matrix/rooms/room.go index 4166fd7..56614de 100644 --- a/matrix/rooms/room.go +++ b/matrix/rooms/room.go @@ -42,7 +42,7 @@ type Room struct { topicCache string // fetchHistoryLock is used to make sure multiple goroutines don't fetch history for this room at the same time. - fetchHistoryLock *sync.Mutex `json:"-"` + fetchHistoryLock *sync.Mutex } func (room *Room) LockHistory() { diff --git a/ui/debug/external.go b/ui/debug/external.go index 8122b2a..faabbcc 100644 --- a/ui/debug/external.go +++ b/ui/debug/external.go @@ -34,7 +34,7 @@ func EnableExternal() { func ExtPrintf(text string, args ...interface{}) { if writer != nil { - fmt.Fprintf(writer, text + "\n", args...) + fmt.Fprintf(writer, text+"\n", args...) } } diff --git a/ui/view-main.go b/ui/view-main.go index 9c0550c..844962d 100644 --- a/ui/view-main.go +++ b/ui/view-main.go @@ -386,7 +386,7 @@ func (view *MainView) LoadHistory(room string, initial bool) { } err = roomView.SaveHistory(view.config.HistoryDir) if err != nil { - debug.Printf("%Failed to save history of %s: %v", roomView.Room.GetTitle(), err) + debug.Printf("Failed to save history of %s: %v", roomView.Room.GetTitle(), err) } view.config.Session.Save() view.parent.Render() diff --git a/ui/widget/advanced-inputfield.go b/ui/widget/advanced-inputfield.go index 4948247..f74ce29 100644 --- a/ui/widget/advanced-inputfield.go +++ b/ui/widget/advanced-inputfield.go @@ -222,23 +222,9 @@ func (field *AdvancedInputField) SetFinishedFunc(handler func(key tcell.Key)) tv return field.SetDoneFunc(handler) } -// Draw draws this primitive onto the screen. -func (field *AdvancedInputField) Draw(screen tcell.Screen) { - field.Box.Draw(screen) - - // Prepare - x, y, width, height := field.GetInnerRect() - rightLimit := x + width - if height < 1 || rightLimit <= x { - return - } - - // Draw label. - _, drawnWidth := tview.Print(screen, field.label, x, y, rightLimit-x, tview.AlignLeft, field.labelColor) - x += drawnWidth - - // Draw input area. - fieldWidth := field.fieldWidth +// drawInput calculates the field width and draws the background. +func (field *AdvancedInputField) drawInput(screen tcell.Screen, rightLimit, x, y int) (fieldWidth int) { + fieldWidth = field.fieldWidth if fieldWidth == 0 { fieldWidth = math.MaxInt32 } @@ -249,13 +235,16 @@ func (field *AdvancedInputField) Draw(screen tcell.Screen) { for index := 0; index < fieldWidth; index++ { screen.SetContent(x+index, y, ' ', nil, fieldStyle) } + return +} - text := field.text +// prepareText prepares the text to be displayed and recalculates the view and cursor offsets. +func (field *AdvancedInputField) prepareText(screen tcell.Screen, fieldWidth, x, y int) (text string) { + text = field.text if text == "" && field.placeholder != "" { tview.Print(screen, field.placeholder, x, y, fieldWidth, tview.AlignLeft, field.placeholderTextColor) } - // Draw entered text. if field.maskCharacter > 0 { text = strings.Repeat(string(field.maskCharacter), utf8.RuneCountInString(field.text)) } @@ -264,7 +253,6 @@ func (field *AdvancedInputField) Draw(screen tcell.Screen) { fieldWidth-- } - // Recalculate view offset if field.cursorOffset < field.viewOffset { field.viewOffset = field.cursorOffset } else if field.cursorOffset > field.viewOffset+fieldWidth { @@ -272,12 +260,16 @@ func (field *AdvancedInputField) Draw(screen tcell.Screen) { } else if textWidth-field.viewOffset < fieldWidth { field.viewOffset = textWidth - fieldWidth } - // Make sure view offset didn't become negative + if field.viewOffset < 0 { field.viewOffset = 0 } - // Draw entered text. + return +} + +// drawText draws the text and the cursor. +func (field *AdvancedInputField) drawText(screen tcell.Screen, fieldWidth, x, y int, text string) { runes := []rune(text) relPos := 0 for pos := field.viewOffset; pos <= fieldWidth+field.viewOffset && pos < len(runes); pos++ { @@ -298,6 +290,24 @@ func (field *AdvancedInputField) Draw(screen tcell.Screen) { } } +// Draw draws this primitive onto the screen. +func (field *AdvancedInputField) Draw(screen tcell.Screen) { + field.Box.Draw(screen) + + x, y, width, height := field.GetInnerRect() + rightLimit := x + width + if height < 1 || rightLimit <= x { + return + } + + _, drawnWidth := tview.Print(screen, field.label, x, y, rightLimit-x, tview.AlignLeft, field.labelColor) + x += drawnWidth + + fieldWidth := field.drawInput(screen, rightLimit, x, y) + text := field.prepareText(screen, fieldWidth, x, y) + field.drawText(screen, fieldWidth, x, y, text) +} + func (field *AdvancedInputField) GetCursorOffset() int { return field.cursorOffset }