diff options
| -rw-r--r-- | backend/home.go | 5 | ||||
| -rw-r--r-- | backend/logs.go | 32 |
2 files changed, 27 insertions, 10 deletions
diff --git a/backend/home.go b/backend/home.go index 43ace8a..d223cf5 100644 --- a/backend/home.go +++ b/backend/home.go @@ -6,7 +6,6 @@ import ( "net/http" "slices" "strconv" - "time" "github.com/go-chi/chi/v5" ) @@ -57,8 +56,8 @@ func HandleHome(r *chi.Mux) { func sortLogs() { sortedLogs = slices.SortedFunc(maps.Values(logs), func(l *logData, l2 *logData) int { - lt := l.pubDate.AsTime(time.UTC) - l2t := l2.pubDate.AsTime(time.UTC) + lt := l.ModAt + l2t := l2.ModAt // we want it reversed if lt.Before(l2t) { return 1 diff --git a/backend/logs.go b/backend/logs.go index ef44e0a..50caec1 100644 --- a/backend/logs.go +++ b/backend/logs.go @@ -4,12 +4,14 @@ import ( "errors" "fmt" "html/template" + "io/fs" "log/slog" "net/http" "os" "path/filepath" "strings" "sync" + "time" "git.anhgelus.world/anhgelus/small-world/markdown" "github.com/go-chi/chi/v5" @@ -28,6 +30,7 @@ type logData struct { pubDate toml.LocalDate `toml:"publication_date"` Content template.HTML `toml:"-"` Slug string `toml:"-"` + ModAt time.Time `toml:"-"` } func (d *logData) SetData(dt *data) { @@ -35,7 +38,7 @@ func (d *logData) SetData(dt *data) { } func (d *logData) PubDate() string { - return d.pubDate.String() + return d.ModAt.Format(time.DateOnly) } type image struct { @@ -90,16 +93,22 @@ func readLogDir(path string, dir []os.DirEntry) error { } dd := new(logData) dd.data = new(data) - go func() { - wg.Add(1) + + wg.Add(1) + go func(p string, d os.DirEntry) { defer wg.Done() - ok = parseLog(dd, slug, strings.TrimSuffix(d.Name(), ".md")) + fi, err := d.Info() + if err != nil { + slog.Warn("cannot get file info", "path", p) + return + } + ok = parseLog(dd, slug, strings.TrimSuffix(d.Name(), ".md"), fi) if ok { slog.Debug("log parsed", "path", p) } else { slog.Debug("log skipped", "path", p) } - }() + }(p, d) } } wg.Wait() @@ -125,7 +134,15 @@ func handleLog(w http.ResponseWriter, r *http.Request) { if !ok { d = new(logData) d.data = new(data) - if ok = parseLog(d, path, slug); !ok { + fi, err := os.Stat(path) + if err != nil { + if !os.IsNotExist(err) { + panic(err) + } + http.NotFoundHandler().ServeHTTP(w, r) + return + } + if ok = parseLog(d, path, slug, fi); !ok { http.NotFoundHandler().ServeHTTP(w, r) return } @@ -133,11 +150,12 @@ func handleLog(w http.ResponseWriter, r *http.Request) { d.handleGeneric(w, r, "log", d) } -func parseLog(d *logData, path, slug string) bool { +func parseLog(d *logData, path, slug string, fi fs.FileInfo) bool { d.Article = true d.LogTitle = slug d.title = slug d.Slug = slug + d.ModAt = fi.ModTime() b, err := os.ReadFile(path + ".md") if err != nil { if os.IsNotExist(err) { |
