chat/message: Fix highlighting and BEL, fix race condition.

Fixes #169
This commit is contained in:
Andrey Petrov 2016-08-11 15:35:50 -04:00
parent 92d821387b
commit f6e022548c

View File

@ -21,7 +21,6 @@ var ErrUserClosed = errors.New("user closed")
// User definition, implemented set Item interface and io.Writer // User definition, implemented set Item interface and io.Writer
type User struct { type User struct {
Identifier Identifier
Config UserConfig
colorIdx int colorIdx int
joined time.Time joined time.Time
msg chan Message msg chan Message
@ -32,6 +31,7 @@ type User struct {
closeOnce sync.Once closeOnce sync.Once
mu sync.Mutex mu sync.Mutex
Config UserConfig
replyTo *User // Set when user gets a /msg, for replying. replyTo *User // Set when user gets a /msg, for replying.
} }
@ -78,6 +78,8 @@ func (u *User) SetReplyTo(user *User) {
// ToggleQuietMode will toggle whether or not quiet mode is enabled // ToggleQuietMode will toggle whether or not quiet mode is enabled
func (u *User) ToggleQuietMode() { func (u *User) ToggleQuietMode() {
u.mu.Lock()
defer u.mu.Unlock()
u.Config.Quiet = !u.Config.Quiet u.Config.Quiet = !u.Config.Quiet
} }
@ -141,19 +143,24 @@ func (u *User) SetHighlight(s string) error {
if err != nil { if err != nil {
return err return err
} }
u.mu.Lock()
u.Config.Highlight = re u.Config.Highlight = re
u.mu.Unlock()
return nil return nil
} }
func (u *User) render(m Message) string { func (u *User) render(m Message) string {
u.mu.Lock()
cfg := u.Config
u.mu.Unlock()
switch m := m.(type) { switch m := m.(type) {
case *PublicMsg: case PublicMsg:
return m.RenderFor(u.Config) + Newline return m.RenderFor(cfg) + Newline
case *PrivateMsg: case PrivateMsg:
u.SetReplyTo(m.From()) u.SetReplyTo(m.From())
return m.Render(u.Config.Theme) + Newline return m.Render(cfg.Theme) + Newline
default: default:
return m.Render(u.Config.Theme) + Newline return m.Render(cfg.Theme) + Newline
} }
} }