Strict use of local dates

This commit is contained in:
Jan-Lukas Else 2020-12-16 21:24:53 +01:00
parent 6256b2fdd9
commit 1025a726ef
6 changed files with 50 additions and 13 deletions

View File

@ -4,7 +4,7 @@ import (
"database/sql" "database/sql"
"sync" "sync"
_ "github.com/mattn/go-sqlite3" sqlite "github.com/mattn/go-sqlite3"
) )
var ( var (
@ -15,7 +15,15 @@ var (
) )
func initDatabase() (err error) { func initDatabase() (err error) {
appDb, err = sql.Open("sqlite3", appConfig.Db.File+"?cache=shared&mode=rwc&_journal_mode=WAL") sql.Register("goblog_db", &sqlite.SQLiteDriver{
ConnectHook: func(c *sqlite.SQLiteConn) error {
if err := c.RegisterFunc("tolocal", toLocalSafe, true); err != nil {
return err
}
return nil
},
})
appDb, err = sql.Open("goblog_db", appConfig.Db.File+"?cache=shared&mode=rwc&_journal_mode=WAL")
if err != nil { if err != nil {
return err return err
} }

View File

@ -87,6 +87,16 @@ func migrateDb() error {
return err return err
}, },
}, },
&migrator.Migration{
Name: "00007",
Func: func(tx *sql.Tx) error {
// Change all dates to local
_, err := tx.Exec(`
update posts set published = tolocal(published), updated = tolocal(updated);
`)
return err
},
},
), ),
) )
if err != nil { if err != nil {

View File

@ -398,7 +398,7 @@ func (p *post) computeExtraPostParameters() error {
} }
if p.Published == "" && p.Section != "" { if p.Published == "" && p.Section != "" {
// Has no published date, but section -> published now // Has no published date, but section -> published now
p.Published = time.Now().String() p.Published = time.Now().Local().String()
} }
// Add images not in content // Add images not in content
images := p.Parameters[appConfig.Micropub.PhotoParam] images := p.Parameters[appConfig.Micropub.PhotoParam]

View File

@ -12,7 +12,7 @@ import (
"github.com/araddon/dateparse" "github.com/araddon/dateparse"
) )
func (p *post) checkPost() error { func (p *post) checkPost() (err error) {
if p == nil { if p == nil {
return errors.New("no post") return errors.New("no post")
} }
@ -21,18 +21,16 @@ func (p *post) checkPost() error {
p.Content = strings.TrimSuffix(strings.TrimPrefix(p.Content, "\n"), "\n") p.Content = strings.TrimSuffix(strings.TrimPrefix(p.Content, "\n"), "\n")
// Fix date strings // Fix date strings
if p.Published != "" { if p.Published != "" {
d, err := dateparse.ParseLocal(p.Published) p.Published, err = toLocal(p.Published)
if err != nil { if err != nil {
return err return err
} }
p.Published = d.String()
} }
if p.Updated != "" { if p.Updated != "" {
d, err := dateparse.ParseLocal(p.Updated) p.Updated, err = toLocal(p.Updated)
if err != nil { if err != nil {
return err return err
} }
p.Updated = d.String()
} }
// Cleanup params // Cleanup params
for key, value := range p.Parameters { for key, value := range p.Parameters {
@ -315,6 +313,10 @@ func getPosts(config *postsRequestConfig) (posts []*post, err error) {
index := len(posts) index := len(posts)
paths[p.Path] = index + 1 paths[p.Path] = index + 1
p.Parameters = map[string][]string{} p.Parameters = map[string][]string{}
// Fix dates
p.Published = toLocalSafe(p.Published)
p.Updated = toLocalSafe(p.Updated)
// Append
posts = append(posts, p) posts = append(posts, p)
} }
if parameterName != "" && posts != nil { if parameterName != "" && posts != nil {

View File

@ -91,7 +91,7 @@ func initRendering() error {
if err != nil { if err != nil {
return "" return ""
} }
return d.Format(format) return d.Local().Format(format)
}, },
"longdate": func(date string, localeString string) string { "longdate": func(date string, localeString string) string {
d, err := dateparse.ParseLocal(date) d, err := dateparse.ParseLocal(date)
@ -99,20 +99,20 @@ func initRendering() error {
return "" return ""
} }
ml := monday.Locale(localeString) ml := monday.Locale(localeString)
return monday.Format(d, monday.LongFormatsByLocale[ml], ml) return monday.Format(d.Local(), monday.LongFormatsByLocale[ml], ml)
}, },
"unixtodate": func(unix int64) string { "unixtodate": func(unix int64) string {
return time.Unix(unix, 0).String() return time.Unix(unix, 0).Local().String()
}, },
"now": func() string { "now": func() string {
return time.Now().String() return time.Now().Local().String()
}, },
"dateadd": func(date string, years, months, days int) string { "dateadd": func(date string, years, months, days int) string {
d, err := dateparse.ParseLocal(date) d, err := dateparse.ParseLocal(date)
if err != nil { if err != nil {
return "" return ""
} }
return d.AddDate(years, months, days).String() return d.AddDate(years, months, days).Local().String()
}, },
"datebefore": func(date string, before string) bool { "datebefore": func(date string, before string) bool {
d, err := dateparse.ParseLocal(date) d, err := dateparse.ParseLocal(date)

View File

@ -10,6 +10,7 @@ import (
"time" "time"
"github.com/PuerkitoBio/goquery" "github.com/PuerkitoBio/goquery"
"github.com/araddon/dateparse"
) )
func urlize(str string) string { func urlize(str string) string {
@ -139,3 +140,19 @@ func groupStrings(toGroup []string) []stringGroup {
}) })
return stringGroups return stringGroups
} }
func toLocalSafe(s string) string {
d, _ := toLocal(s)
return d
}
func toLocal(s string) (string, error) {
if s == "" {
return "", nil
}
d, err := dateparse.ParseLocal(s)
if err != nil {
return "", err
}
return d.Local().String(), nil
}