photoprism/internal/models/file.go

70 lines
1.7 KiB
Go
Raw Normal View History

2018-09-16 17:09:40 +00:00
package models
2018-07-18 13:17:56 +00:00
import (
2019-05-14 16:16:35 +00:00
"fmt"
"strings"
2019-05-14 16:16:35 +00:00
"github.com/gosimple/slug"
2018-07-18 13:17:56 +00:00
"github.com/jinzhu/gorm"
uuid "github.com/satori/go.uuid"
2018-07-18 13:17:56 +00:00
)
2018-11-18 18:18:19 +00:00
// An image or sidecar file that belongs to a photo
2018-07-18 13:17:56 +00:00
type File struct {
Model
2019-05-14 16:16:35 +00:00
Photo *Photo
PhotoID uint `gorm:"index;"`
PhotoUUID string `gorm:"index;"`
FileUUID string `gorm:"unique_index;"`
FileName string `gorm:"type:varchar(512);unique_index"` // max 3072 bytes / 4 bytes for utf8mb4 = 768 chars
FileHash string `gorm:"type:varchar(128);unique_index"`
2019-05-14 16:16:35 +00:00
FileOriginalName string
FileType string `gorm:"type:varchar(32)"`
FileMime string `gorm:"type:varchar(64)"`
FilePrimary bool
FileMissing bool
FileDuplicate bool
FilePortrait bool
2019-05-14 16:16:35 +00:00
FileWidth int
FileHeight int
FileOrientation int
FileAspectRatio float64
FileMainColor string `gorm:"type:varchar(32);index;"`
2019-05-14 16:16:35 +00:00
FileColors string
FileLuminance string
FileChroma uint
2019-05-14 16:16:35 +00:00
FileNotes string `gorm:"type:text"`
}
func FindFileByHash(db *gorm.DB, fileHash string) (File, error) {
var file File
q := db.Unscoped().First(&file, "file_hash = ?", fileHash)
return file, q.Error
}
func (m *File) BeforeCreate(scope *gorm.Scope) error {
return scope.SetColumn("FileUUID", uuid.NewV4().String())
}
func (m *File) DownloadFileName() string {
if m.Photo == nil {
return fmt.Sprintf("%s.%s", m.FileHash, m.FileType)
}
2019-05-14 16:16:35 +00:00
var name string
2019-05-14 16:16:35 +00:00
if m.Photo.PhotoTitle != "" {
name = strings.Title(slug.MakeLang(m.Photo.PhotoTitle, "en"))
} else {
name = m.PhotoUUID
}
2019-05-14 16:16:35 +00:00
taken := m.Photo.TakenAt.Format("20060102-150405")
result := fmt.Sprintf("%s-%s.%s", taken, name, m.FileType)
2019-05-14 16:16:35 +00:00
return result
2018-07-18 13:17:56 +00:00
}