Added fallback if renaming cant move an upload

This commit is contained in:
Leon Mika 2026-03-05 22:48:38 +11:00
parent 891d904d9c
commit 76ed54f119
3 changed files with 40 additions and 4 deletions

View file

@ -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++

View file

@ -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)

View file

@ -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{}