1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
|
diff --git a/prose/api.go b/prose/api.go
index 1d703d8..7643e0e 100644
--- a/prose/api.go
+++ b/prose/api.go
@@ -160,7 +160,7 @@ func blogHandler(w http.ResponseWriter, r *http.Request) {
}
tag := r.URL.Query().Get("tag")
- pager := &db.Pager{Num: 1000, Page: 0}
+ pager := &db.Pager{Num: 250, Page: 0}
var posts []*db.Post
var p *db.Paginate[*db.Post]
if tag == "" {
@@ -170,6 +170,13 @@ func blogHandler(w http.ResponseWriter, r *http.Request) {
}
posts = p.Data
+ byUpdated := strings.Contains(r.URL.Path, "live")
+ if byUpdated {
+ slices.SortFunc(posts, func(a *db.Post, b *db.Post) int {
+ return b.UpdatedAt.Compare(*a.UpdatedAt)
+ })
+ }
+
if err != nil {
logger.Error(err.Error())
http.Error(w, "could not fetch posts for blog", http.StatusInternalServerError)
@@ -653,6 +660,13 @@ func rssBlogHandler(w http.ResponseWriter, r *http.Request) {
curl := shared.CreateURLFromRequest(cfg, r)
blogUrl := cfg.FullBlogURL(curl, username)
+ byUpdated := strings.Contains(r.URL.Path, "live")
+ if byUpdated {
+ slices.SortFunc(posts, func(a *db.Post, b *db.Post) int {
+ return b.UpdatedAt.Compare(*a.UpdatedAt)
+ })
+ }
+
feed := &feeds.Feed{
Id: blogUrl,
Title: headerTxt.Title,
@@ -691,12 +705,18 @@ func rssBlogHandler(w http.ResponseWriter, r *http.Request) {
}
realUrl := cfg.FullPostURL(curl, post.Username, post.Slug)
+ feedId := realUrl
+
+ if byUpdated {
+ feedId = fmt.Sprintf("%s:%s", realUrl, post.UpdatedAt.Format(time.RFC3339))
+ }
item := &feeds.Item{
- Id: realUrl,
+ Id: feedId,
Title: shared.FilenameToTitle(post.Filename, post.Title),
Link: &feeds.Link{Href: realUrl},
Content: tpl.String(),
+ Updated: *post.UpdatedAt,
Created: *post.CreatedAt,
Description: post.Description,
}
@@ -849,36 +869,16 @@ func createMainRoutes(staticRoutes []shared.Route) []shared.Route {
staticRoutes...,
)
- routes = append(
- routes,
- shared.NewRoute("GET", "/rss", rssHandler),
- shared.NewRoute("GET", "/rss.xml", rssHandler),
- shared.NewRoute("GET", "/atom.xml", rssHandler),
- shared.NewRoute("GET", "/feed.xml", rssHandler),
-
- shared.NewRoute("GET", "/([^/]+)", blogHandler),
- shared.NewRoute("GET", "/([^/]+)/rss", rssBlogHandler),
- shared.NewRoute("GET", "/([^/]+)/rss.xml", rssBlogHandler),
- shared.NewRoute("GET", "/([^/]+)/atom.xml", rssBlogHandler),
- shared.NewRoute("GET", "/([^/]+)/atom", rssBlogHandler),
- shared.NewRoute("GET", "/([^/]+)/blog/index.xml", rssBlogHandler),
- shared.NewRoute("GET", "/([^/]+)/feed.xml", rssBlogHandler),
- shared.NewRoute("GET", "/([^/]+)/_styles.css", blogStyleHandler),
- shared.NewRoute("GET", "/raw/([^/]+)/(.+)", postRawHandler),
- shared.NewRoute("GET", "/([^/]+)/(.+)/(.+)", imgs.ImgRequest),
- shared.NewRoute("GET", "/([^/]+)/(.+.(?:jpg|jpeg|png|gif|webp|svg))$", imgs.ImgRequest),
- shared.NewRoute("GET", "/([^/]+)/i", imgs.ImgsListHandler),
- shared.NewRoute("GET", "/([^/]+)/(.+)", postHandler),
- )
-
return routes
}
func createSubdomainRoutes(staticRoutes []shared.Route) []shared.Route {
routes := []shared.Route{
shared.NewRoute("GET", "/", blogHandler),
+ shared.NewRoute("GET", "/live", blogHandler),
shared.NewRoute("GET", "/_styles.css", blogStyleHandler),
shared.NewRoute("GET", "/rss", rssBlogHandler),
+ shared.NewRoute("GET", "/live/rss", rssBlogHandler),
shared.NewRoute("GET", "/rss.xml", rssBlogHandler),
shared.NewRoute("GET", "/atom.xml", rssBlogHandler),
shared.NewRoute("GET", "/feed.xml", rssBlogHandler),
|