website/pkg/models/backfill/backfill_filesize.go

65 lines
1.5 KiB
Go

package backfill
import (
"os"
"code.nonshy.com/nonshy/website/pkg/log"
"code.nonshy.com/nonshy/website/pkg/models"
"code.nonshy.com/nonshy/website/pkg/photo"
)
// BackfillFilesizes finds Photos and CommentPhotos which have a zero Filesize and recomputes them.
func BackfillFilesizes() error {
// Find Photos with a filesize of zero.
var (
photos []*models.Photo
commentPhotos []*models.CommentPhoto
)
// Query for photos w/ zero filesize.
result := models.DB.Model(&models.Photo{}).Where("filesize = 0").Find(&photos)
if result.Error != nil {
return result.Error
}
// And CommentPhotos too.
result = models.DB.Model(&models.CommentPhoto{}).Where("filesize = 0").Find(&commentPhotos)
if result.Error != nil {
return result.Error
}
// Do the Photos.
for i, row := range photos {
// Set the filesize from disk.
if stat, err := os.Stat(photo.DiskPath(row.Filename)); err == nil {
row.Filesize = stat.Size()
}
log.Info("[%d of %d] Update photo %d: %s filesize=%d",
i+1, len(photos), row.ID, row.Filename, row.Filesize,
)
if err := row.Save(); err != nil {
return err
}
}
// And same for the CommentPhotos.
for i, row := range commentPhotos {
// Set the filesize from disk.
if stat, err := os.Stat(photo.DiskPath(row.Filename)); err == nil {
row.Filesize = stat.Size()
}
log.Info("[%d of %d] Update comment_photo %d: %s filesize=%d",
i+1, len(photos), row.ID, row.Filename, row.Filesize,
)
if err := row.Save(); err != nil {
return err
}
}
return nil
}