aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--backend/home.go5
-rw-r--r--backend/logs.go32
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) {