Monorepo for Tangled tangled.org
2

Configure Feed

Select the types of activity you want to include in your feed.

appview/timeline: use embedFS for blogs

Signed-off-by: oppiliappan <me@oppi.li>

author
oppiliappan
date (Jun 9, 2026, 9:10 AM +0100) commit d3e93280 parent 011cd1c0 change-id zwuoourn
+12 -9
+2 -1
appview/state/router.go
··· 26 26 "tangled.org/core/appview/state/userutil" 27 27 avstrings "tangled.org/core/appview/strings" 28 28 avtimeline "tangled.org/core/appview/timeline" 29 + "tangled.org/core/blog" 29 30 "tangled.org/core/log" 30 31 ) 31 32 ··· 164 165 165 166 r.Handle("/static/*", s.pages.Static()) 166 167 167 - tl := avtimeline.New(s.oauth, s.db, s.config, s.pages, s.logger, "blog/posts") 168 + tl := avtimeline.New(s.oauth, s.db, s.config, s.pages, s.logger, blog.PostsFS) 168 169 r.Get("/", tl.HomeOrTimeline) 169 170 r.Get("/home", tl.Home) 170 171 r.Get("/timeline", tl.Timeline)
+6 -8
appview/timeline/router.go
··· 5 5 "io/fs" 6 6 "log/slog" 7 7 "net/http" 8 - "os" 9 8 "strings" 10 9 "time" 11 10 ··· 40 39 config *config.Config, 41 40 pages *pages.Pages, 42 41 logger *slog.Logger, 43 - postsDir string, 42 + postsFS fs.FS, 44 43 ) *Timeline { 45 44 t := &Timeline{ 46 45 oauth: oauth, ··· 49 48 pages: pages, 50 49 logger: logger, 51 50 } 52 - t.recentPosts = loadRecentPosts(postsDir, logger) 51 + t.recentPosts = loadRecentPosts(postsFS, logger) 53 52 return t 54 53 } 55 54 ··· 61 60 return r 62 61 } 63 62 64 - func loadRecentPosts(postsDir string, logger *slog.Logger) []pages.BlogPost { 65 - fsys := os.DirFS(postsDir) 66 - entries, err := fs.ReadDir(fsys, ".") 63 + func loadRecentPosts(postsFS fs.FS, logger *slog.Logger) []pages.BlogPost { 64 + entries, err := fs.ReadDir(postsFS, "posts") 67 65 if err != nil { 68 - logger.Warn("failed to read blog posts dir", "dir", postsDir, "err", err) 66 + logger.Warn("failed to read blog posts", "err", err) 69 67 return nil 70 68 } 71 69 ··· 74 72 if entry.IsDir() || !strings.HasSuffix(entry.Name(), ".md") { 75 73 continue 76 74 } 77 - data, err := fs.ReadFile(fsys, entry.Name()) 75 + data, err := fs.ReadFile(postsFS, "posts/"+entry.Name()) 78 76 if err != nil { 79 77 continue 80 78 }
+4
blog/blog.go
··· 3 3 import ( 4 4 "bytes" 5 5 "cmp" 6 + "embed" 6 7 "html/template" 7 8 "io" 8 9 "io/fs" ··· 18 19 "tangled.org/core/appview/pages/markup" 19 20 textension "tangled.org/core/appview/pages/markup/extension" 20 21 ) 22 + 23 + //go:embed posts 24 + var PostsFS embed.FS 21 25 22 26 type Author struct { 23 27 Name string `yaml:"name"`