Skip to content

Commit

Permalink
Add changes atom feeds
Browse files Browse the repository at this point in the history
Signed-off-by: Max Magorsch <arzano@gentoo.org>
  • Loading branch information
arzano committed Apr 28, 2020
1 parent 625908f commit 39c3cc5
Show file tree
Hide file tree
Showing 9 changed files with 116 additions and 4 deletions.
15 changes: 15 additions & 0 deletions pkg/app/handler/arches/show.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package arches

import (
"net/http"
"soko/pkg/app/handler/feeds"
"soko/pkg/app/handler/packages"
"strings"
)
Expand All @@ -17,13 +18,27 @@ func Show(w http.ResponseWriter, r *http.Request) {
return
}
renderPackageTemplates("changedVersions", packages.GetFuncMap(), createFeedData(urlParts[0], "Newly Stable", "stable", stabilizedVersions), w)
} else if urlParts[1] == "stable.atom" {
stabilizedVersions, err := getStabilizedVersionsForArch(urlParts[0], 50)
if err != nil {
http.NotFound(w, r)
return
}
feeds.Changes(packages.GetTextFuncMap(), createFeedData(urlParts[0], "Newly Stable", "stable", stabilizedVersions), w)
} else if urlParts[1] == "keyworded" {
keywordedVersions, err := getKeywordedVersionsForArch(urlParts[0], 50)
if err != nil {
http.NotFound(w, r)
return
}
renderPackageTemplates("changedVersions", packages.GetFuncMap(), createFeedData(urlParts[0], "Keyworded", "keyworded", keywordedVersions), w)
} else if urlParts[1] == "keyworded.atom" {
keywordedVersions, err := getKeywordedVersionsForArch(urlParts[0], 50)
if err != nil {
http.NotFound(w, r)
return
}
feeds.Changes(packages.GetTextFuncMap(), createFeedData(urlParts[0], "Keyworded", "keyworded", keywordedVersions), w)
}
}
}
20 changes: 20 additions & 0 deletions pkg/app/handler/feeds/changes.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package feeds

import (
"text/template"
"net/http"
"soko/pkg/logger"
)

// Show renders a template to show a given package
func Changes(funcMap template.FuncMap, data interface{}, w http.ResponseWriter) {
logger.Info.Println("Changes atom template")
templates := template.Must(
template.New("changes.atom").
Funcs(funcMap).
ParseGlob("web/templates/feeds/changes.atom.tmpl"))

//w.Header().Set("Content-Type", "application/atom+xml")
templates.ExecuteTemplate(w, "changes.atom.tmpl", data)
}

10 changes: 9 additions & 1 deletion pkg/app/handler/packages/added.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,19 @@

package packages

import "net/http"
import (
"net/http"
"soko/pkg/app/handler/feeds"
)

// Added renders a template containing
// a list of 50 recently added versions
func Added(w http.ResponseWriter, r *http.Request) {
addedVersions := getAddedVersions(50)
RenderPackageTemplates("changedVersions", "changedVersions", "changedVersionRow", GetFuncMap(), CreateFeedData("Added", addedVersions), w)
}

func AddedFeed(w http.ResponseWriter, r *http.Request) {
addedVersions := getAddedVersions(50)
feeds.Changes(GetTextFuncMap(), CreateFeedData("Added", addedVersions), w)
}
10 changes: 9 additions & 1 deletion pkg/app/handler/packages/keyworded.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,19 @@

package packages

import "net/http"
import (
"net/http"
"soko/pkg/app/handler/feeds"
)

// Keyworded renders a template containing
// a list of 50 recently keyworded versions
func Keyworded(w http.ResponseWriter, r *http.Request) {
keywordedVersions := GetKeywordedVersions(50)
RenderPackageTemplates("changedVersions", "changedVersions", "changedVersionRow", GetFuncMap(), CreateFeedData("Keyworded", keywordedVersions), w)
}

func KeywordedFeed(w http.ResponseWriter, r *http.Request) {
keywordedVersions := GetKeywordedVersions(50)
feeds.Changes(GetTextFuncMap(), CreateFeedData("Keyworded", keywordedVersions), w)
}
10 changes: 9 additions & 1 deletion pkg/app/handler/packages/stabilized.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,19 @@

package packages

import "net/http"
import (
"net/http"
"soko/pkg/app/handler/feeds"
)

// Stabilized renders a template containing
// a list of 50 recently stabilized versions
func Stabilized(w http.ResponseWriter, r *http.Request) {
stabilizedVersions := GetStabilizedVersions(50)
RenderPackageTemplates("changedVersions", "changedVersions", "changedVersionRow", GetFuncMap(), CreateFeedData("Stabilized", stabilizedVersions), w)
}

func StabilizedFeed(w http.ResponseWriter, r *http.Request) {
stabilizedVersions := GetStabilizedVersions(50)
feeds.Changes(GetTextFuncMap(), CreateFeedData("Stabilized", stabilizedVersions), w)
}
10 changes: 9 additions & 1 deletion pkg/app/handler/packages/updated.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,19 @@

package packages

import "net/http"
import (
"net/http"
"soko/pkg/app/handler/feeds"
)

// Updated renders a template containing
// a list of 50 recently updated versions
func Updated(w http.ResponseWriter, r *http.Request) {
updatedVersions := GetUpdatedVersions(50)
RenderPackageTemplates("changedVersions", "changedVersions", "changedVersionRow", GetFuncMap(), CreateFeedData("Updated", updatedVersions), w)
}

func UpdatedFeed(w http.ResponseWriter, r *http.Request) {
updatedVersions := GetUpdatedVersions(50)
feeds.Changes(GetTextFuncMap(), CreateFeedData("Updated", updatedVersions), w)
}
17 changes: 17 additions & 0 deletions pkg/app/handler/packages/utils.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import (
"github.com/go-pg/pg/v9/orm"
"github.com/mcuadros/go-version"
"html/template"
textTemplate "text/template"
"net/http"
"soko/pkg/app/utils"
"soko/pkg/database"
Expand Down Expand Up @@ -202,6 +203,22 @@ func GetFuncMap() template.FuncMap {
}
}

// GetFuncMap returns the FuncMap used in templates
func GetTextFuncMap() textTemplate.FuncMap {
return textTemplate.FuncMap{
"contains": strings.Contains,
"replaceall": strings.ReplaceAll,
"gravatar": gravatar,
"mkSlice": mkSlice,
"getReverse": getReverse,
"tolower": strings.ToLower,
"formatRestricts": FormatRestricts,
"isMasked": isMasked,
"getMask": getMask,
"showRemovalNotice": showRemovalNotice,
}
}

// gravatar creates a link to the gravatar
// based on the email
func gravatar(email string) string {
Expand Down
5 changes: 5 additions & 0 deletions pkg/app/serve.go
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,11 @@ func Serve() {
setRoute("/packages/", packages.Show)
setRoute("/", index.Show)

setRoute("/packages/added.atom", packages.AddedFeed)
setRoute("/packages/updated.atom", packages.UpdatedFeed)
setRoute("/packages/keyworded.atom", packages.KeywordedFeed)
setRoute("/packages/stable.atom", packages.StabilizedFeed)

fs := http.StripPrefix("/assets/", http.FileServer(http.Dir("/go/src/soko/assets")))
http.Handle("/assets/", fs)

Expand Down
23 changes: 23 additions & 0 deletions web/templates/feeds/changes.atom.tmpl
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
<?xml version="1.0" encoding="UTF-8"?>
<feed xml:lang="en-US" xmlns="http://www.w3.org/2005/Atom">
<id>tag:packages.gentoo.org,2015-10-03:added:feed</id>
<link rel="alternate" type="text/html" href="https://packages.gentoo.org"/>
<link rel="self" type="application/atom+xml" href="https://packages.gentoo.org/packages/{{tolower .Name}}.atom"/>
<title>Gentoo Packages: {{.Name}} packages</title>
<updated>{{if ge (len .Versions) 1 }}{{if ge (len (index .Versions 0).Commits) 1 }}{{(index (index .Versions 0).Commits 0).CommitterDate}}{{else}}unknown{{end}}{{else}}unknown{{end}}</updated>
<author>
<name>Gentoo Packages Database</name>
</author>
{{range .Versions}}
<entry>
<id>tag:packages.gentoo.org,{{if ge (len .Commits) 1 }}{{(index .Commits 0).CommitterDate}}{{else}}unknown{{end}}:{{tolower $.Name}}:{{.Atom}}</id>
<published>{{if ge (len .Commits) 1 }}{{(index .Commits 0).CommitterDate}}{{else}}unknown{{end}}</published>
<link rel="alternate" type="text/html" href="https://packages.gentoo.org/packages/{{.Atom}}"/>
<updated>{{if ge (len .Commits) 1 }}{{(index .Commits 0).CommitterDate}}{{else}}unknown{{end}}</updated>
<title>{{.Atom}} ({{.Description}})</title>
<content>{{.Atom}} is now available in Gentoo on these architectures: {{.Keywords}}</content>
</entry>
{{end}}
</feed>


0 comments on commit 39c3cc5

Please sign in to comment.