From 48d36c04db07667774327ada27a39c8676ebad00 Mon Sep 17 00:00:00 2001 From: GeertJohan Date: Sat, 5 Apr 2014 13:59:28 +0200 Subject: [PATCH] Add package synopsis. --- page.go | 32 +++++++++++++++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) diff --git a/page.go b/page.go index c5eb832..b98c11e 100644 --- a/page.go +++ b/page.go @@ -1,10 +1,12 @@ package main import ( + "encoding/json" "fmt" "html/template" "log" "net/http" + "net/url" "os" "sort" "strings" @@ -132,6 +134,7 @@ const packageTemplateString = ` {{if .CleanPackageName}}

Refer to it as {{.CleanPackageName}}.{{end}}

+ {{if .Synopsis}}

{{.Synopsis}}

{{end}}

For more details, see the API documentation.

@@ -197,12 +200,22 @@ type packageData struct { LatestVersions VersionList // Contains only the latest version for each major FullVersion Version // Version that the major requested resolves to CleanPackageName string + Synopsis string +} + +type gddoApiSynopsisResult struct { + Results []struct { + Path string `json:"path"` + Synopsis string `json:"synopsis"` + } `json:"results"` } func renderPackagePage(resp http.ResponseWriter, req *http.Request, repo *Repo) { data := &packageData{ Repo: repo, } + + // calculate version mapping latestVersionsMap := make(map[int]Version) for _, v := range repo.AllVersions { v2, exists := latestVersionsMap[v.Major] @@ -217,6 +230,7 @@ func renderPackagePage(resp http.ResponseWriter, req *http.Request, repo *Repo) } sort.Sort(sort.Reverse(data.LatestVersions)) + // find clean package name data.CleanPackageName = repo.PackageName if strings.HasPrefix(data.CleanPackageName, "go-") { data.CleanPackageName = data.CleanPackageName[3:] @@ -235,7 +249,23 @@ func renderPackagePage(resp http.ResponseWriter, req *http.Request, repo *Repo) break } - err := packageTemplate.Execute(resp, data) + // retrieve synopsis + gddoResp, err := http.Get(`http://api.godoc.org/search?q=` + url.QueryEscape(repo.GopkgPath())) + if err == nil { + synopsisResult := &gddoApiSynopsisResult{} + err = json.NewDecoder(gddoResp.Body).Decode(&synopsisResult) + gddoResp.Body.Close() + if err == nil { + for _, apiPkg := range synopsisResult.Results { + if apiPkg.Path == repo.GopkgPath() { + data.Synopsis = apiPkg.Synopsis + break + } + } + } + } + + err = packageTemplate.Execute(resp, data) if err != nil { log.Printf("error executing tmplPackage: %s\n", err) }