diff options
Diffstat (limited to 'cmd/web/handlers')
| -rw-r--r-- | cmd/web/handlers/rss.go | 76 |
1 files changed, 56 insertions, 20 deletions
diff --git a/cmd/web/handlers/rss.go b/cmd/web/handlers/rss.go index 3e3019d..a1bfa92 100644 --- a/cmd/web/handlers/rss.go +++ b/cmd/web/handlers/rss.go @@ -12,6 +12,12 @@ import ( "paterissa.net/mblog/internal/models" ) +type written struct { + Title string + Published string + Link string +} + type video struct { Title string Description string @@ -23,10 +29,11 @@ type rssContext struct { err *log.Logger db *sql.DB - Feed models.Feed - Videos []video - Rows []models.Feed - IsAuth bool + Feed models.Feed + Written []written + Videos []video + Rows []models.Feed + IsAuth bool } func (ctx *rssContext) new(w http.ResponseWriter, r *http.Request) { @@ -52,6 +59,7 @@ func (ctx *rssContext) new(w http.ResponseWriter, r *http.Request) { name := r.Form.Get("name") url := r.Form.Get("url") + category := r.Form.Get("category") stmt, err := ctx.db.Prepare("SELECT * FROM cookies WHERE content = $1;") if err != nil { @@ -75,7 +83,7 @@ func (ctx *rssContext) new(w http.ResponseWriter, r *http.Request) { return } - insertStmt, err := ctx.db.Prepare("INSERT INTO feeds (name, user_id, url) VALUES ($1, $2, $3);") + insertStmt, err := ctx.db.Prepare("INSERT INTO feeds (name, user_id, url, category) VALUES ($1, $2, $3, $4);") if err != nil { w.WriteHeader(http.StatusInternalServerError) w.Write([]byte("Internal Error")) @@ -84,7 +92,17 @@ func (ctx *rssContext) new(w http.ResponseWriter, r *http.Request) { } defer insertStmt.Close() - _, err = insertStmt.Exec(name, userId, url) + var categoryInt int + switch category { + case "YouTube": + categoryInt = models.YoutubeFeed + case "Text": + fallthrough + default: + categoryInt = models.TextFeed + } + + _, err = insertStmt.Exec(name, userId, url, categoryInt) if err != nil { w.WriteHeader(http.StatusInternalServerError) w.Write([]byte("Internal Error")) @@ -114,7 +132,7 @@ func (ctx *rssContext) feed(w http.ResponseWriter, r *http.Request) { var f models.Feed row := stmt.QueryRow(id) - err = row.Scan(&f.Id, &f.Name, &f.User, &f.Url) + err = row.Scan(&f.Id, &f.Name, &f.User, &f.Url, &f.Category) ctx.Feed = f @@ -127,21 +145,39 @@ func (ctx *rssContext) feed(w http.ResponseWriter, r *http.Request) { return } - for _, raw := range feed.Items { - var v video - - v.Title = raw.Title - v.Description = raw.Extensions["media"]["group"][0].Children["description"][0].Value - v.Published = raw.Published - v.Link = strings.Replace(raw.Link, "watch?v=", "embed/", 1) - - ctx.Videos = append(ctx.Videos, v) - } - files := []string{ "ui/html/base.tmpl.html", "ui/html/music_player.tmpl.html", - "ui/html/pages/feed.tmpl.html", + } + + switch f.Category { + case models.YoutubeFeed: + files = append(files, "ui/html/pages/video_feed.tmpl.html") + + for _, raw := range feed.Items { + var v video + + v.Title = raw.Title + v.Description = raw.Extensions["media"]["group"][0].Children["description"][0].Value + v.Published = raw.Published + v.Link = strings.Replace(raw.Link, "watch?v=", "embed/", 1) + + ctx.Videos = append(ctx.Videos, v) + } + case models.TextFeed: + fallthrough + default: + files = append(files, "ui/html/pages/feed.tmpl.html") + + for _, raw := range feed.Items { + var t written + + t.Title = raw.Title + t.Published = raw.Published + t.Link = raw.Link + + ctx.Written = append(ctx.Written, t) + } } compiled, err := template.ParseFiles(files...) @@ -172,7 +208,7 @@ func (ctx *rssContext) index(w http.ResponseWriter, r *http.Request) { ctx.IsAuth = true } - rows, err := ctx.db.Query("SELECT f.id, f.name, u.name, f.url FROM feeds f INNER JOIN logins u ON f.user_id = u.id ORDER BY f.name DESC;") + rows, err := ctx.db.Query("SELECT f.id, f.name, u.name, f.url FROM feeds f INNER JOIN logins u ON f.user_id = u.id ORDER BY f.name ASC;") if err != nil { w.WriteHeader(http.StatusInternalServerError) w.Write([]byte("Internal Error")) |
