2019-12-11 16:55:18 +01:00
|
|
|
package entity
|
2018-07-18 15:17:56 +02:00
|
|
|
|
|
|
|
import (
|
2019-05-14 18:16:35 +02:00
|
|
|
"fmt"
|
2019-05-16 04:03:55 +02:00
|
|
|
"strings"
|
2019-05-14 18:16:35 +02:00
|
|
|
|
|
|
|
"github.com/gosimple/slug"
|
2018-07-18 15:17:56 +02:00
|
|
|
"github.com/jinzhu/gorm"
|
2019-06-09 05:22:53 +02:00
|
|
|
uuid "github.com/satori/go.uuid"
|
2018-07-18 15:17:56 +02:00
|
|
|
)
|
|
|
|
|
2018-11-18 19:18:19 +01:00
|
|
|
// An image or sidecar file that belongs to a photo
|
2018-07-18 15:17:56 +02:00
|
|
|
type File struct {
|
2019-06-04 18:26:35 +02:00
|
|
|
Model
|
2019-12-13 07:54:05 +01:00
|
|
|
CreatedIn int64
|
|
|
|
UpdatedIn int64
|
2019-05-14 18:16:35 +02:00
|
|
|
Photo *Photo
|
2019-12-06 10:26:57 +01:00
|
|
|
PhotoID uint `gorm:"index;"`
|
|
|
|
PhotoUUID string `gorm:"index;"`
|
2019-06-04 18:26:35 +02:00
|
|
|
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 18:16:35 +02:00
|
|
|
FileOriginalName string
|
|
|
|
FileType string `gorm:"type:varchar(32)"`
|
|
|
|
FileMime string `gorm:"type:varchar(64)"`
|
2019-06-04 18:26:35 +02:00
|
|
|
FilePrimary bool
|
2019-12-12 16:31:55 +01:00
|
|
|
FileSidecar bool
|
|
|
|
FileVideo bool
|
2019-06-04 18:26:35 +02:00
|
|
|
FileMissing bool
|
|
|
|
FileDuplicate bool
|
|
|
|
FilePortrait bool
|
2019-05-14 18:16:35 +02:00
|
|
|
FileWidth int
|
|
|
|
FileHeight int
|
|
|
|
FileOrientation int
|
|
|
|
FileAspectRatio float64
|
2019-07-15 22:54:54 +02:00
|
|
|
FileMainColor string `gorm:"type:varchar(32);index;"`
|
2019-05-14 18:16:35 +02:00
|
|
|
FileColors string
|
|
|
|
FileLuminance string
|
2019-05-16 02:22:38 +02:00
|
|
|
FileChroma uint
|
2019-05-14 18:16:35 +02:00
|
|
|
FileNotes string `gorm:"type:text"`
|
|
|
|
}
|
|
|
|
|
2019-07-03 09:27:30 +02:00
|
|
|
func FindFileByHash(db *gorm.DB, fileHash string) (File, error) {
|
|
|
|
var file File
|
|
|
|
|
|
|
|
q := db.Unscoped().First(&file, "file_hash = ?", fileHash)
|
|
|
|
|
|
|
|
return file, q.Error
|
|
|
|
}
|
|
|
|
|
2019-06-04 18:26:35 +02:00
|
|
|
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-16 04:03:55 +02:00
|
|
|
}
|
2019-05-14 18:16:35 +02:00
|
|
|
|
2019-05-16 04:03:55 +02:00
|
|
|
var name string
|
2019-05-14 18:16:35 +02:00
|
|
|
|
2019-06-04 18:26:35 +02:00
|
|
|
if m.Photo.PhotoTitle != "" {
|
2019-12-05 21:06:53 +01:00
|
|
|
name = strings.Title(slug.MakeLang(m.Photo.PhotoTitle, "en"))
|
2019-05-16 04:03:55 +02:00
|
|
|
} else {
|
2019-12-06 16:47:30 +01:00
|
|
|
name = m.PhotoUUID
|
2019-05-16 04:03:55 +02:00
|
|
|
}
|
2019-05-14 18:16:35 +02:00
|
|
|
|
2019-06-04 18:26:35 +02:00
|
|
|
taken := m.Photo.TakenAt.Format("20060102-150405")
|
2019-05-16 04:03:55 +02:00
|
|
|
|
2019-06-04 18:26:35 +02:00
|
|
|
result := fmt.Sprintf("%s-%s.%s", taken, name, m.FileType)
|
2019-05-14 18:16:35 +02:00
|
|
|
|
|
|
|
return result
|
2018-07-18 15:17:56 +02:00
|
|
|
}
|