| 84 | } |
| 85 | |
| 86 | func (client *Client) GetPackages(packages ...string) (PackagePopularityList, error) { |
| 87 | ppl := PackagePopularityList{} |
| 88 | ppl.PackagePopularities = make([]PackagePopularity, len(packages)) |
| 89 | |
| 90 | ch := make(chan (packagePopularityResult)) |
| 91 | |
| 92 | for _, p := range packages { |
| 93 | go func(p string, ch chan (packagePopularityResult)) { |
| 94 | res, err := client.GetPackage(p) |
| 95 | ch <- packagePopularityResult{res, err} |
| 96 | }(p, ch) |
| 97 | } |
| 98 | |
| 99 | for i := range packages { |
| 100 | res := <-ch |
| 101 | if res.err != nil { |
| 102 | return PackagePopularityList{}, res.err |
| 103 | } |
| 104 | ppl.PackagePopularities[i] = res.pp |
| 105 | } |
| 106 | |
| 107 | sort.Slice(ppl.PackagePopularities, func(i, j int) bool { |
| 108 | return ppl.PackagePopularities[i].Popularity > ppl.PackagePopularities[j].Popularity |
| 109 | }) |
| 110 | |
| 111 | return ppl, nil |
| 112 | } |
| 113 | |
| 114 | func (client *Client) GetPackage(p string) (PackagePopularity, error) { |
| 115 | response, err := client.query("/api/packages/"+url.PathEscape(p), url.Values{}) |