Bläddra i källkod

Read account names and additional nicknames from the db to avoid casefolding issues.

tags/v2.1.0-rc1
Alex Jaspersen 4 år sedan
förälder
incheckning
73bea0168d
1 ändrade filer med 31 tillägg och 8 borttagningar
  1. 31
    8
      irc/accounts.go

+ 31
- 8
irc/accounts.go Visa fil

@@ -7,6 +7,7 @@ import (
7 7
 	"bytes"
8 8
 	"encoding/json"
9 9
 	"fmt"
10
+	"sort"
10 11
 	"strconv"
11 12
 	"strings"
12 13
 	"sync"
@@ -1047,15 +1048,37 @@ func (am *AccountManager) AuthenticateByPassphrase(client *Client, accountName s
1047 1048
 	return err
1048 1049
 }
1049 1050
 
1050
-func (am *AccountManager) AllNicks() []string {
1051
-	am.RLock()
1052
-	defer am.RUnlock()
1051
+// AllNicks returns the uncasefolded nicknames for all accounts, including additional (grouped) nicks.
1052
+func (am *AccountManager) AllNicks() (result []string) {
1053
+	// Account names
1054
+	accountNamePrefix := fmt.Sprintf(keyAccountName, "")
1055
+	am.server.store.View(func(tx *buntdb.Tx) error {
1056
+		return tx.AscendGreaterOrEqual("", accountNamePrefix, func(key, value string) bool {
1057
+			if !strings.HasPrefix(key, accountNamePrefix) {
1058
+				return false
1059
+			}
1060
+			result = append(result, value)
1061
+			return true
1062
+		})
1063
+	})
1053 1064
 
1054
-	nicks := make([]string, 0, len(am.nickToAccount))
1055
-	for nick := range am.nickToAccount {
1056
-		nicks = append(nicks, nick)
1057
-	}
1058
-	return nicks
1065
+	// Additional nicknames
1066
+	accountAdditionalNicksPrefix := fmt.Sprintf(keyAccountAdditionalNicks, "")
1067
+	am.server.store.View(func(tx *buntdb.Tx) error {
1068
+		return tx.AscendGreaterOrEqual("", accountAdditionalNicksPrefix, func(key, value string) bool {
1069
+			if !strings.HasPrefix(key, accountAdditionalNicksPrefix) {
1070
+				return false
1071
+			}
1072
+			additionalNicks := unmarshalReservedNicks(value)
1073
+			for _, additionalNick := range additionalNicks {
1074
+				result = append(result, additionalNick)
1075
+			}
1076
+			return true
1077
+		})
1078
+	})
1079
+
1080
+	sort.Strings(result)
1081
+	return
1059 1082
 }
1060 1083
 
1061 1084
 func (am *AccountManager) LoadAccount(accountName string) (result ClientAccount, err error) {

Laddar…
Avbryt
Spara