package siteexporter import ( "fmt" "os" "path/filepath" "gopkg.in/yaml.v3" "lmika.dev/lmika/weiro/handlers/importexport" "lmika.dev/lmika/weiro/models" ) type SiteExporter struct { site models.Site baseURL string baseDir string } func New(site models.Site, baseURL, baseDir string) *SiteExporter { return &SiteExporter{ site: site, baseDir: baseDir, baseURL: baseURL, } } func (s *SiteExporter) WriteSiteYAML() error { siteYAML := importexport.Site{ Title: s.site.Title, Tagline: s.site.Tagline, BaseURL: s.baseURL, } bytes, err := yaml.Marshal(siteYAML) if err != nil { return err } return os.WriteFile(filepath.Join(s.baseDir, "site.yaml"), bytes, 0644) } func (s *SiteExporter) WritePost(post *models.Post) error { postMeta := importexport.Post{ ID: post.GUID, Title: post.Title, Date: post.PublishedAt, Slug: post.Slug, } frontMatter, err := yaml.Marshal(postMeta) slugBasePath := filepath.Base(post.Slug) postFilename := filepath.Join(s.baseDir, fmt.Sprintf("posts/%04d/%02d/%02d-%s.md", post.PublishedAt.Year(), post.PublishedAt.Month(), post.PublishedAt.Day(), slugBasePath)) if err := os.MkdirAll(filepath.Dir(postFilename), 0755); err != nil { return err } f, err := os.Create(postFilename) if err != nil { return err } defer f.Close() if _, err := f.WriteString("---\n"); err != nil { return err } if _, err = f.Write(frontMatter); err != nil { return err } _, err = f.WriteString("---\n") if err != nil { return err } _, err = f.WriteString(post.Body) return err }