aboutsummaryrefslogtreecommitdiff
path: root/cmd
diff options
context:
space:
mode:
Diffstat (limited to 'cmd')
-rw-r--r--cmd/web/handlers/rss.go76
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"))