diff options
Diffstat (limited to 'cache/index.go')
-rw-r--r-- | cache/index.go | 18 |
1 files changed, 14 insertions, 4 deletions
diff --git a/cache/index.go b/cache/index.go index 0cf8065..ee00479 100644 --- a/cache/index.go +++ b/cache/index.go @@ -2,6 +2,7 @@ package cache import ( "log" + "sort" "strings" "time" ) @@ -11,7 +12,8 @@ func NewUserIndex() *UserIndex { return &UserIndex{} } -// AddUser inserts a new user into the index. The *Data struct only contains the nickname.) +// AddUser inserts a new user into the index. The *Data struct +// contains the nickname and the time the user was added. func (index UserIndex) AddUser(nick string, url string) { rfc3339date, err := time.Now().MarshalText() if err != nil { @@ -29,15 +31,23 @@ func (index UserIndex) DelUser(url string) { imutex.Unlock() } +// QueryUser checks the user index for nicknames that contain the +// nickname provided as an argument. Entries are returned sorted +// by the date they were added to the index. func (index UserIndex) QueryUser(name string) []string { + var timekey = map[time.Time]string{} + var sortedkeys TimeSlice var users []string - var entry string for k, v := range index { if strings.Contains(v.nick, name) { - entry = v.nick + "\t" + k + "\t" + string(v.apidate) - users = append(users, entry) + timekey[v.date] = v.nick + "\t" + k + "\t" + string(v.apidate) + sortedkeys = append(sortedkeys, v.date) } } + sort.Sort(sortedkeys) + for _, e := range sortedkeys { + users = append(users, timekey[e]) + } return users } |