Made some changes to how index pages are made

This commit is contained in:
Leon Mika 2025-02-16 14:06:45 +11:00
parent ba12398d2f
commit 573517565d
14 changed files with 259 additions and 56 deletions

View file

@ -27,7 +27,17 @@ func (s *Service) WritePage(site models.Site, bundle models.Bundle, page models.
return fmt.Errorf("theme %s not found in themes", site.Theme)
}
if err := s.writePage(site, themeMeta, bundle, page); err != nil {
bundleInfo, err := s.db.GetSiteBundleInfo(ctx, site.ID)
if err != nil {
return err
}
if err := s.writePage(pageBuildInfo{
site: site,
themeMeta: themeMeta,
bundle: bundle,
bundleInfo: bundleInfo,
}, page); err != nil {
return err
}
return s.publish(ctx, site)
@ -45,8 +55,23 @@ func (s *Service) DeletePage(site models.Site, page models.Page) models.Job {
if err != nil {
return err
}
themeMeta, ok := s.themes.Lookup(site.Theme)
if !ok {
return fmt.Errorf("theme %s not found in themes", site.Theme)
}
postFilename := s.pageFilename(site, bundle, page)
bundleInfo, err := s.db.GetSiteBundleInfo(ctx, site.ID)
if err != nil {
return err
}
postFilename := s.pageFilename(pageBuildInfo{
site: site,
themeMeta: themeMeta,
bundle: bundle,
bundleInfo: bundleInfo,
}, page)
if os.Remove(postFilename) != nil {
return nil
@ -71,6 +96,11 @@ func (s *Service) writeAllPages(ctx context.Context, site models.Site) error {
bundlesByID := momap.FromSlice(bundles, func(b models.Bundle) (int64, models.Bundle) { return b.ID, b })
bundleInfo, err := s.db.GetSiteBundleInfo(ctx, site.ID)
if err != nil {
return err
}
var startId int64
for {
pages, err := s.db.ListPublishablePages(ctx, int64(startId), site.ID)
@ -81,7 +111,12 @@ func (s *Service) writeAllPages(ctx context.Context, site models.Site) error {
}
for _, page := range pages {
if err := s.writePage(site, themeMeta, bundlesByID[page.BundleID], page); err != nil {
if err := s.writePage(pageBuildInfo{
site: site,
themeMeta: themeMeta,
bundle: bundlesByID[page.BundleID],
bundleInfo: bundleInfo,
}, page); err != nil {
return err
}
}
@ -89,17 +124,24 @@ func (s *Service) writeAllPages(ctx context.Context, site models.Site) error {
}
}
func (s *Service) writePage(site models.Site, themeMeta models.ThemeMeta, bundle models.Bundle, page models.Page) error {
postFilename := s.pageFilename(site, bundle, page)
func (s *Service) writePage(bi pageBuildInfo, page models.Page) error {
postFilename := s.pageFilename(bi, page)
frontMatter := map[string]any{
"date": page.PublishDate.Format(time.RFC3339),
}
if page.Title != "" {
frontMatter["title"] = page.Title
} else if themeMeta.PreferTitle {
} else if bi.themeMeta.PreferTitle {
frontMatter["title"] = page.PublishDate.Format(time.ANSIC)
}
return s.writeMarkdownFile(postFilename, frontMatter, page.Body)
}
type pageBuildInfo struct {
site models.Site
themeMeta models.ThemeMeta
bundle models.Bundle
bundleInfo map[int64]models.BundleInfo
}

View file

@ -151,12 +151,32 @@ func (s *Service) postFilename(site models.Site, themeMeta models.ThemeMeta, pos
return filepath.Join(s.hugo.SiteStagingDir(site, hugo.ContentSiteDir), themeMeta.BlogPostBundle, post.CreatedAt.Format("2006-01-02-150405.md"))
}
func (s *Service) pageFilename(site models.Site, bundle models.Bundle, page models.Page) string {
bundleDir := ""
if bundle.Name != models.RootBundleName {
bundleDir = bundle.Name
func (s *Service) pageFilename(bi pageBuildInfo, page models.Page) string {
isIndex := false
isLeafBundle := true
thisBundleInfo := bi.bundleInfo[bi.bundle.ID]
if thisBundleInfo.PageCount > 1 {
isLeafBundle = false
isIndex = thisBundleInfo.IndexPageID == page.ID
} else {
isIndex = true
}
pageName := page.Name + ".md"
return filepath.Join(s.hugo.SiteStagingDir(site, hugo.ContentSiteDir), bundleDir, pageName)
bundleDir := ""
if bi.bundle.Name != models.RootBundleName {
bundleDir = bi.bundle.Name
}
pageName := page.Name
if isIndex {
if isLeafBundle {
pageName = "index"
} else {
pageName = "_index"
}
}
pageName += ".md"
return filepath.Join(s.hugo.SiteStagingDir(bi.site, hugo.ContentSiteDir), bundleDir, pageName)
}