diff --git a/providers/sitebuilder/builder.go b/providers/sitebuilder/builder.go index 16d4fa6..3417fba 100644 --- a/providers/sitebuilder/builder.go +++ b/providers/sitebuilder/builder.go @@ -148,7 +148,7 @@ func (b *Builder) renderFeeds(ctx buildContext, postIter iter.Seq[models.Maybe[* Content: string(renderedPost.HTML), // TO FIX: Created should be first published Created: post.PublishedAt, - Updated: post.PublishedAt, + Updated: post.UpdatedAt, }) items++ diff --git a/providers/uploadfiles/provider.go b/providers/uploadfiles/provider.go index eb7d5de..2eb84e4 100644 --- a/providers/uploadfiles/provider.go +++ b/providers/uploadfiles/provider.go @@ -26,12 +26,46 @@ func (p *Provider) AdoptFile(site models.Site, up models.Upload, filename string return err } - if err := os.Rename(filename, fullPath); err != nil { + if err := os.Rename(filename, fullPath); err == nil { + return nil + } + + // Can't rename, possibly because of a cross-link device issue. So copy instead + if err := moveFile(filename, fullPath); err != nil { return err } + return nil } +func moveFile(src, dst string) error { + if err := copyFile(src, dst); err != nil { + _ = os.Remove(dst) + return err + } + _ = os.Remove(src) + return nil +} + +func copyFile(src, dst string) error { + in, err := os.Open(src) + if err != nil { + return err + } + defer in.Close() + + out, err := os.Create(dst) + if err != nil { + return err + } + defer out.Close() + + if _, err = io.Copy(out, in); err != nil { + return err + } + return err +} + func (p *Provider) OpenUpload(site models.Site, up models.Upload) (io.ReadCloser, error) { fullPath := p.uploadFileName(site, up) return os.Open(fullPath) diff --git a/services/posts/create.go b/services/posts/create.go index 1dc69a1..4c99b82 100644 --- a/services/posts/create.go +++ b/services/posts/create.go @@ -17,6 +17,8 @@ type CreatePostParams struct { } func (s *Service) UpdatePost(ctx context.Context, params CreatePostParams) (*models.Post, error) { + now := time.Now() + site, ok := models.GetSite(ctx) if !ok { return nil, models.SiteRequiredError @@ -29,14 +31,14 @@ func (s *Service) UpdatePost(ctx context.Context, params CreatePostParams) (*mod post.Title = params.Title post.Body = params.Body - post.UpdatedAt = time.Now() + post.UpdatedAt = now post.Slug = post.BestSlug() oldState := post.State switch strings.ToLower(params.Action) { case "publish": post.State = models.StatePublished - post.PublishedAt = time.Now() + post.PublishedAt = now case "save draft": post.State = models.StateDraft post.PublishedAt = time.Time{}