summaryrefslogtreecommitdiff
path: root/app/feed.go
diff options
context:
space:
mode:
Diffstat (limited to 'app/feed.go')
-rw-r--r--app/feed.go71
1 files changed, 71 insertions, 0 deletions
diff --git a/app/feed.go b/app/feed.go
new file mode 100644
index 0000000..4dd7813
--- /dev/null
+++ b/app/feed.go
@@ -0,0 +1,71 @@
+package app
+
+import (
+ "fmt"
+ "net/url"
+ "os"
+ "path"
+ "strconv"
+ "time"
+
+ "github.com/wybiral/feeds"
+)
+
+// buildFeed creates RSS feed attribute for App based on Library contents.
+func buildFeed(a *App) {
+ cfg := a.Config.Feed
+ now := time.Now()
+ f := &feeds.Feed{
+ Title: cfg.Title,
+ Link: &feeds.Link{Href: cfg.Link},
+ Description: cfg.Description,
+ Author: &feeds.Author{
+ Name: cfg.Author.Name,
+ Email: cfg.Author.Email,
+ },
+ Created: now,
+ Copyright: cfg.Copyright,
+ }
+ var externalURL string
+ if len(cfg.ExternalURL) > 0 {
+ externalURL = cfg.ExternalURL
+ } else {
+ hostname, err := os.Hostname()
+ if err != nil {
+ host := a.Config.Server.Host
+ port := a.Config.Server.Port
+ externalURL = fmt.Sprintf("http://%s:%d", host, port)
+ } else {
+ externalURL = fmt.Sprintf("http://%s", hostname)
+ }
+ }
+ for _, v := range a.Library.Playlist() {
+ u, err := url.Parse(externalURL)
+ if err != nil {
+ return
+ }
+ u.Path = path.Join(u.Path, "v", v.ID)
+ id := u.String()
+ f.Items = append(f.Items, &feeds.Item{
+ Id: id,
+ Title: v.Title,
+ Link: &feeds.Link{Href: id},
+ Description: v.Description,
+ Enclosure: &feeds.Enclosure{
+ Url: id + ".mp4",
+ Length: strconv.FormatInt(v.Size, 10),
+ Type: "video/mp4",
+ },
+ Author: &feeds.Author{
+ Name: cfg.Author.Name,
+ Email: cfg.Author.Email,
+ },
+ Created: v.Timestamp,
+ })
+ }
+ feed, err := f.ToRss()
+ if err != nil {
+ return
+ }
+ a.Feed = []byte(feed)
+}