diff --git a/irc/accounts.go b/irc/accounts.go index 70c0ce87..5b8a298e 100644 --- a/irc/accounts.go +++ b/irc/accounts.go @@ -578,18 +578,10 @@ type rawClientAccount struct { // LoginToAccount logs the client into the given account. func (client *Client) LoginToAccount(account string) { - casefoldedAccount, err := CasefoldName(account) - if err != nil { - return + changed := client.SetAccountName(account) + if changed { + client.nickTimer.Touch() } - - if client.Account() == casefoldedAccount { - // already logged into this acct, no changing necessary - return - } - - client.SetAccountName(casefoldedAccount) - client.nickTimer.Touch() } // LogoutOfAccount logs the client out of their current account. diff --git a/irc/getters.go b/irc/getters.go index ab5de049..4d37057d 100644 --- a/irc/getters.go +++ b/irc/getters.go @@ -125,15 +125,21 @@ func (client *Client) AccountName() string { return client.accountName } -func (client *Client) SetAccountName(account string) { +func (client *Client) SetAccountName(account string) (changed bool) { var casefoldedAccount string + var err error if account != "" { - casefoldedAccount, _ = CasefoldName(account) + if casefoldedAccount, err = CasefoldName(account); err != nil { + return + } } + client.stateMutex.Lock() defer client.stateMutex.Unlock() + changed = client.account != casefoldedAccount client.account = casefoldedAccount client.accountName = account + return } func (client *Client) HasMode(mode modes.Mode) bool {