refactor: User.Config -> User.Config() and User.SetConfig(UserConfig)
authorAndrey Petrov <andrey.petrov@shazow.net>
Mon, 29 Aug 2016 14:11:39 +0000 (10:11 -0400)
committerAndrey Petrov <andrey.petrov@shazow.net>
Mon, 29 Aug 2016 14:11:39 +0000 (10:11 -0400)
chat/command.go
chat/message/user.go
chat/room.go
chat/room_test.go
host.go
host_test.go

index a36e9d11bb84b58fdd672c761f417dac38b008f1..df403dc25887e5435a8fea89fc78d06a34aaad6e 100644 (file)
@@ -184,10 +184,11 @@ func InitCommands(c *Commands) {
                Handler: func(room *Room, msg message.CommandMsg) error {
                        user := msg.From()
                        args := msg.Args()
+                       cfg := user.Config()
                        if len(args) == 0 {
                                theme := "plain"
-                               if user.Config.Theme != nil {
-                                       theme = user.Config.Theme.ID()
+                               if cfg.Theme != nil {
+                                       theme = cfg.Theme.ID()
                                }
                                body := fmt.Sprintf("Current theme: %s", theme)
                                room.Send(message.NewSystemMsg(body, user))
@@ -197,7 +198,8 @@ func InitCommands(c *Commands) {
                        id := args[0]
                        for _, t := range message.Themes {
                                if t.ID() == id {
-                                       user.Config.Theme = &t
+                                       cfg.Theme = &t
+                                       user.SetConfig(cfg)
                                        body := fmt.Sprintf("Set theme: %s", id)
                                        room.Send(message.NewSystemMsg(body, user))
                                        return nil
@@ -212,10 +214,12 @@ func InitCommands(c *Commands) {
                Help:   "Silence room announcements.",
                Handler: func(room *Room, msg message.CommandMsg) error {
                        u := msg.From()
-                       u.ToggleQuietMode()
+                       cfg := u.Config()
+                       cfg.Quiet = !cfg.Quiet
+                       u.SetConfig(cfg)
 
                        var body string
-                       if u.Config.Quiet {
+                       if cfg.Quiet {
                                body = "Quiet mode is toggled ON"
                        } else {
                                body = "Quiet mode is toggled OFF"
index 189ec81fa661adbe0dc6ce59a9d020f5f0010ccd..0cd700c3f3f1b43ba60012f879fef06c56b0f24b 100644 (file)
@@ -31,14 +31,14 @@ type User struct {
        closeOnce sync.Once
 
        mu      sync.Mutex
-       Config  UserConfig
+       config  UserConfig
        replyTo *User // Set when user gets a /msg, for replying.
 }
 
 func NewUser(identity Identifier) *User {
        u := User{
                Identifier: identity,
-               Config:     DefaultUserConfig,
+               config:     DefaultUserConfig,
                joined:     time.Now(),
                msg:        make(chan Message, messageBuffer),
                done:       make(chan struct{}),
@@ -56,6 +56,18 @@ func NewUserScreen(identity Identifier, screen io.WriteCloser) *User {
        return u
 }
 
+func (u *User) Config() UserConfig {
+       u.mu.Lock()
+       defer u.mu.Unlock()
+       return u.config
+}
+
+func (u *User) SetConfig(cfg UserConfig) {
+       u.mu.Lock()
+       u.config = cfg
+       u.mu.Unlock()
+}
+
 // Rename the user with a new Identifier.
 func (u *User) SetID(id string) {
        u.Identifier.SetID(id)
@@ -76,24 +88,12 @@ func (u *User) SetReplyTo(user *User) {
        u.replyTo = user
 }
 
-// ToggleQuietMode will toggle whether or not quiet mode is enabled
-func (u *User) ToggleQuietMode() {
-       u.mu.Lock()
-       defer u.mu.Unlock()
-       u.Config.Quiet = !u.Config.Quiet
-}
-
 // setColorIdx will set the colorIdx to a specific value, primarily used for
 // testing.
 func (u *User) setColorIdx(idx int) {
        u.colorIdx = idx
 }
 
-// Block until user is closed
-func (u *User) Wait() {
-       <-u.done
-}
-
 // Disconnect user, stop accepting messages
 func (u *User) Close() {
        u.closeOnce.Do(func() {
@@ -144,15 +144,13 @@ func (u *User) SetHighlight(s string) error {
                return err
        }
        u.mu.Lock()
-       u.Config.Highlight = re
+       u.config.Highlight = re
        u.mu.Unlock()
        return nil
 }
 
 func (u *User) render(m Message) string {
-       u.mu.Lock()
-       cfg := u.Config
-       u.mu.Unlock()
+       cfg := u.Config()
        switch m := m.(type) {
        case PublicMsg:
                return m.RenderFor(cfg) + Newline
index 8ebb11dd07afa554edd73cbb6f66fe7bf732fa7a..7ce6de1e3709e7e4e7e81d7b33b3c1113fa066ba 100644 (file)
@@ -110,7 +110,7 @@ func (r *Room) HandleMsg(m message.Message) {
                                return
                        }
                        if _, ok := m.(*message.AnnounceMsg); ok {
-                               if user.Config.Quiet {
+                               if user.Config().Quiet {
                                        // Skip announcements
                                        return
                                }
index 71224fd0d8475a59f61c96cc17c6911364a92065..e30c170a1db17ea16176377aca408099b08d23e7 100644 (file)
@@ -213,9 +213,9 @@ func TestRoomJoin(t *testing.T) {
 
 func TestRoomDoesntBroadcastAnnounceMessagesWhenQuiet(t *testing.T) {
        u := message.NewUser(message.SimpleID("foo"))
-       u.Config = message.UserConfig{
+       u.SetConfig(message.UserConfig{
                Quiet: true,
-       }
+       })
 
        ch := NewRoom()
        defer ch.Close()
@@ -252,9 +252,9 @@ func TestRoomDoesntBroadcastAnnounceMessagesWhenQuiet(t *testing.T) {
 
 func TestRoomQuietToggleBroadcasts(t *testing.T) {
        u := message.NewUser(message.SimpleID("foo"))
-       u.Config = message.UserConfig{
+       u.SetConfig(message.UserConfig{
                Quiet: true,
-       }
+       })
 
        ch := NewRoom()
        defer ch.Close()
@@ -267,7 +267,9 @@ func TestRoomQuietToggleBroadcasts(t *testing.T) {
        // Drain the initial Join message
        <-ch.broadcast
 
-       u.ToggleQuietMode()
+       u.SetConfig(message.UserConfig{
+               Quiet: false,
+       })
 
        expectedMsg := message.NewAnnounceMsg("Ignored")
        ch.HandleMsg(expectedMsg)
@@ -276,7 +278,9 @@ func TestRoomQuietToggleBroadcasts(t *testing.T) {
                t.Errorf("Got: `%T`; Expected: `%T`", msg, expectedMsg)
        }
 
-       u.ToggleQuietMode()
+       u.SetConfig(message.UserConfig{
+               Quiet: true,
+       })
 
        ch.HandleMsg(message.NewAnnounceMsg("Ignored"))
        ch.HandleMsg(message.NewSystemMsg("hello", u))
diff --git a/host.go b/host.go
index 738a565e8c22f573fbaedfa6508edfe86526a9a6..39c38cf4140b7f800dce2faa6c78c5fb35eb45f5 100644 (file)
--- a/host.go
+++ b/host.go
@@ -21,8 +21,9 @@ const maxInputLength int = 1024
 // GetPrompt will render the terminal prompt string based on the user.
 func GetPrompt(user *message.User) string {
        name := user.Name()
-       if user.Config.Theme != nil {
-               name = user.Config.Theme.ColorName(user)
+       cfg := user.Config()
+       if cfg.Theme != nil {
+               name = cfg.Theme.ColorName(user)
        }
        return fmt.Sprintf("[%s] ", name)
 }
@@ -91,7 +92,9 @@ func (h *Host) isOp(conn sshd.Connection) bool {
 func (h *Host) Connect(term *sshd.Terminal) {
        id := NewIdentity(term.Conn)
        user := message.NewUserScreen(id, term)
-       user.Config.Theme = &h.theme
+       cfg := user.Config()
+       cfg.Theme = &h.theme
+       user.SetConfig(cfg)
        go user.Consume()
 
        // Close term once user is closed.
index c959ceb113c5a71f93aa4edc8ec1fdf9724f9d48..7c2f976410591830551c6f5f312e480cbc01afd6 100644 (file)
@@ -35,7 +35,9 @@ func TestHostGetPrompt(t *testing.T) {
                t.Errorf("Got: %q; Expected: %q", actual, expected)
        }
 
-       u.Config.Theme = &message.Themes[0]
+       u.SetConfig(message.UserConfig{
+               Theme: &message.Themes[0],
+       })
        actual = GetPrompt(u)
        expected = "[\033[38;05;88mfoo\033[0m] "
        if actual != expected {