Parse date title to actual date
All checks were successful
continuous-integration/drone/push Build is passing
All checks were successful
continuous-integration/drone/push Build is passing
This commit is contained in:
parent
35b8c45169
commit
05539ff687
21
file.go
21
file.go
|
@ -131,7 +131,6 @@ type titleOption struct {
|
||||||
timeObj time.Time
|
timeObj time.Time
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// 1_januari_2021
|
// 1_januari_2021
|
||||||
// 2021-01-01
|
// 2021-01-01
|
||||||
|
|
||||||
|
@ -139,29 +138,33 @@ func (fp *FilePages) Get(name string) Page {
|
||||||
var sw stopwatch
|
var sw stopwatch
|
||||||
sw.Start("Get " + name)
|
sw.Start("Get " + name)
|
||||||
defer sw.Stop()
|
defer sw.Stop()
|
||||||
|
|
||||||
var names []string
|
var names []string
|
||||||
date := false
|
|
||||||
t, err := time.Parse("2006-01-02", name)
|
var to titleOption
|
||||||
|
pageNameDate, err := ParseDatePageName(name)
|
||||||
if err == nil {
|
if err == nil {
|
||||||
date = true
|
to.date = true
|
||||||
names = append(names, formatDatePageName(t), name)
|
to.timeObj = pageNameDate
|
||||||
|
names = append(names, name, pageNameDate.Format("2006-01-02"))
|
||||||
|
} else if t, err := time.Parse("2006-01-02", name); err == nil {
|
||||||
|
to.date = true
|
||||||
|
to.timeObj = t
|
||||||
|
names = append(names, formatDatePageName(to.timeObj), name)
|
||||||
} else {
|
} else {
|
||||||
names = append(names, name)
|
names = append(names, name)
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, name := range names {
|
for _, name := range names {
|
||||||
log.Printf("Trying %q", name)
|
|
||||||
blocks, err := loadBlocks(fp.dirname, name)
|
blocks, err := loadBlocks(fp.dirname, name)
|
||||||
if err != nil && errors.Is(err, BlockNotFound) {
|
if err != nil && errors.Is(err, BlockNotFound) {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
return fp.blocksBackendGet(name, blocks, titleOption{date, t})
|
return fp.blocksBackendGet(name, blocks, to)
|
||||||
}
|
}
|
||||||
|
|
||||||
page, err := fp.oldPagesBackend(name)
|
page, err := fp.oldPagesBackend(name)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fp.blocksBackendGet(name, BlockResponse{ParentID: "root", PageID: name}, titleOption{date, t})
|
return fp.blocksBackendGet(name, BlockResponse{ParentID: "root", PageID: name}, to)
|
||||||
}
|
}
|
||||||
|
|
||||||
return page
|
return page
|
||||||
|
|
83
util.go
83
util.go
|
@ -3,16 +3,35 @@ package main
|
||||||
import (
|
import (
|
||||||
"bufio"
|
"bufio"
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"log"
|
"log"
|
||||||
"math/rand"
|
"math/rand"
|
||||||
"regexp"
|
"regexp"
|
||||||
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
MetaKV = regexp.MustCompile(`(\w+)::\s+(.*)`)
|
MetaKV = regexp.MustCompile(`(\w+)::\s+(.*)`)
|
||||||
|
niceDateParseRE = regexp.MustCompile(`^(\d{1,2})_([a-z]+)_(\d{4})$`)
|
||||||
|
ParseFailed = errors.New("parse failed")
|
||||||
|
Months = []string{
|
||||||
|
"",
|
||||||
|
"januari",
|
||||||
|
"februari",
|
||||||
|
"maart",
|
||||||
|
"april",
|
||||||
|
"mei",
|
||||||
|
"juni",
|
||||||
|
"juli",
|
||||||
|
"augustus",
|
||||||
|
"september",
|
||||||
|
"oktober",
|
||||||
|
"november",
|
||||||
|
"december",
|
||||||
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
type ParsedLink struct {
|
type ParsedLink struct {
|
||||||
|
@ -103,40 +122,10 @@ func todayPage() string {
|
||||||
}
|
}
|
||||||
|
|
||||||
func formatDateTitle(date time.Time) string {
|
func formatDateTitle(date time.Time) string {
|
||||||
months := []string{
|
return fmt.Sprintf("%d %s %d", date.Day(), Months[date.Month()], date.Year())
|
||||||
"",
|
|
||||||
"januari",
|
|
||||||
"februari",
|
|
||||||
"maart",
|
|
||||||
"april",
|
|
||||||
"mei",
|
|
||||||
"juni",
|
|
||||||
"juli",
|
|
||||||
"augustus",
|
|
||||||
"september",
|
|
||||||
"oktober",
|
|
||||||
"november",
|
|
||||||
"december",
|
|
||||||
}
|
|
||||||
return fmt.Sprintf("%d %s %d", date.Day(), months[date.Month()], date.Year())
|
|
||||||
}
|
}
|
||||||
func formatDatePageName(date time.Time) string {
|
func formatDatePageName(date time.Time) string {
|
||||||
months := []string{
|
return fmt.Sprintf("%d_%s_%d", date.Day(), Months[date.Month()], date.Year())
|
||||||
"",
|
|
||||||
"januari",
|
|
||||||
"februari",
|
|
||||||
"maart",
|
|
||||||
"april",
|
|
||||||
"mei",
|
|
||||||
"juni",
|
|
||||||
"juli",
|
|
||||||
"augustus",
|
|
||||||
"september",
|
|
||||||
"oktober",
|
|
||||||
"november",
|
|
||||||
"december",
|
|
||||||
}
|
|
||||||
return fmt.Sprintf("%d_%s_%d", date.Day(), months[date.Month()], date.Year())
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func PageTitle(pageText string) (string, error) {
|
func PageTitle(pageText string) (string, error) {
|
||||||
|
@ -158,3 +147,31 @@ func PageTitle(pageText string) (string, error) {
|
||||||
}
|
}
|
||||||
return "", fmt.Errorf("no meta title found in page text")
|
return "", fmt.Errorf("no meta title found in page text")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func parseMonth(month string) (time.Month, error) {
|
||||||
|
for i, m := range Months {
|
||||||
|
if m == month {
|
||||||
|
return time.Month(i), nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return time.Month(0), fmt.Errorf("parseMonth: %q is not a recognized month", month)
|
||||||
|
}
|
||||||
|
|
||||||
|
func ParseDatePageName(name string) (time.Time, error) {
|
||||||
|
if matches := niceDateParseRE.FindStringSubmatch(name); matches != nil {
|
||||||
|
day, err := strconv.Atoi(matches[1])
|
||||||
|
if err != nil {
|
||||||
|
return time.Time{}, fmt.Errorf("%q: %s: %w", name, err, ParseFailed)
|
||||||
|
}
|
||||||
|
month, err := parseMonth(matches[2])
|
||||||
|
if err != nil {
|
||||||
|
return time.Time{}, fmt.Errorf("%q: %s: %w", name, err, ParseFailed)
|
||||||
|
}
|
||||||
|
year, err := strconv.Atoi(matches[3])
|
||||||
|
if err != nil {
|
||||||
|
return time.Time{}, fmt.Errorf("%q: %s: %w", name, err, ParseFailed)
|
||||||
|
}
|
||||||
|
return time.Date(year, month, day, 0, 0, 0, 0, time.Local), nil
|
||||||
|
}
|
||||||
|
return time.Time{}, fmt.Errorf("%q: invalid syntax: %w", name, ParseFailed)
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user