diff options
Diffstat (limited to 'cache/index.go')
-rw-r--r-- | cache/index.go | 56 |
1 files changed, 52 insertions, 4 deletions
diff --git a/cache/index.go b/cache/index.go index ee00479..a6ee7b6 100644 --- a/cache/index.go +++ b/cache/index.go @@ -52,11 +52,59 @@ func (index UserIndex) QueryUser(name string) []string { return users } +// QueryTag returns all the known statuses that +// contain the provided tag. +func (index UserIndex) QueryTag(tag string) []string { + var statusmap StatusMapSlice + i := 0 + for _, v := range index { + statusmap[i] = v.FindTag(tag) + i++ + } + + return statusmap.SortByTime() +} + // FindTag takes a user's tweets and looks for a given tag. // Returns the tweets with the tag as a []string. -func (userdata *Data) FindTag(tag string) { - //for _, e := range userdata.status { - //parts := strings.Split(e, "\t") +func (userdata *Data) FindTag(tag string) StatusMap { + var statuses StatusMap + for k, e := range userdata.status { + parts := strings.Split(e, "\t") + statusslice := strings.Split(parts[3], " ") + for _, v := range statusslice { + if v == tag { + statuses[k] = v + break + } + } + } + + return statuses +} + +// SortByTime returns a string slice of the statuses sorted by time +func (sm StatusMapSlice) SortByTime() []string { + var tagmap StatusMap + var times TimeSlice + var statuses []string + for _, e := range sm { + for k, v := range e { + tagmap[k] = v + } + } + for k := range tagmap { + times = append(times, k) + } + sort.Sort(times) + for _, e := range times { + statuses = append(statuses, tagmap[e]) + } + + return statuses +} - //} +// GetStatuses returns the string slice containing a user's statuses +func (index UserIndex) GetStatuses(url string) StatusMap { + return index[url].status } |