From 73d4a3658ca14527e8a749bb8850a2c8e4bfac88 Mon Sep 17 00:00:00 2001 From: SayaAndy Date: Tue, 12 Aug 2025 22:33:41 +0700 Subject: feat: integrate parallel execution refactor: simplify frontmatter parser feat: always check for '.md' extension feat: new timezone field --- internal/frontmatter/parser.go | 15 +++++++++------ internal/storage/b2.go | 7 ++++--- 2 files changed, 13 insertions(+), 9 deletions(-) (limited to 'internal') diff --git a/internal/frontmatter/parser.go b/internal/frontmatter/parser.go index 1a521c0..20512d9 100644 --- a/internal/frontmatter/parser.go +++ b/internal/frontmatter/parser.go @@ -1,8 +1,8 @@ package frontmatter import ( + "bytes" "fmt" - "regexp" "time" "gopkg.in/yaml.v3" @@ -16,18 +16,21 @@ type Metadata struct { Thumbnail string `yaml:"thumbnail"` Tags []string `yaml:"tags"` Geolocation string `yaml:"geolocation"` + Timezone string `yaml:"timezone"` } func ParseFrontmatter(content []byte) (metadata *Metadata, markdown []byte, err error) { - frontmatterRegex := regexp.MustCompile(`^---\s*\r?\n([\s\S]*?)\r?\n---\s*\r?\n([\s\S]*)$`) - matches := frontmatterRegex.FindSubmatch(content) + if !bytes.HasPrefix(content, []byte("---\n")) { + return nil, content, nil + } - if len(matches) != 3 { + end := bytes.Index(content[4:], []byte("\n---\n")) + if end == -1 { return nil, content, nil } - yamlContent := matches[1] - markdownContent := matches[2] + yamlContent := content[4 : end+4] + markdownContent := content[end+9:] metadata = &Metadata{} if err := yaml.Unmarshal([]byte(yamlContent), &metadata); err != nil { diff --git a/internal/storage/b2.go b/internal/storage/b2.go index 0c4b673..0d92707 100644 --- a/internal/storage/b2.go +++ b/internal/storage/b2.go @@ -60,9 +60,9 @@ func (sc *B2StorageClient) Scan() ([]string, error) { continue } - //if !strings.Contains(attrs.ContentType, "text/metadata") { - // continue - //} + if !strings.HasSuffix(obj.Name(), ".md") { + continue + } filePaths = append(filePaths, strings.TrimPrefix(obj.Name(), sc.prefix)) } @@ -125,6 +125,7 @@ func (sc *B2StorageClient) WriteMetadata(path string, metadata *frontmatter.Meta "thumbnail": metadata.Thumbnail, "tags": strings.Join(metadata.Tags, ","), "geolocation": metadata.Geolocation, + "timezone": metadata.Timezone, "metadata-last-update-sha1": oldAttrs.SHA1, }} -- cgit v1.3.1+13