2020-01-05 13:18:40 +00:00
package query
2019-12-11 06:37:39 +00:00
2020-04-21 08:23:27 +00:00
import (
2020-05-07 19:46:00 +00:00
"strings"
2020-04-21 08:23:27 +00:00
"github.com/photoprism/photoprism/internal/entity"
)
2019-12-11 06:37:39 +00:00
2020-05-07 19:55:34 +00:00
// ExistingFiles returns not-missing and not-deleted file entities in the range of limit and offset sorted by id.
2020-05-08 13:41:01 +00:00
func ExistingFiles ( limit int , offset int , filePath string ) ( files [ ] entity . File , err error ) {
2020-05-07 19:46:00 +00:00
if strings . HasPrefix ( filePath , "/" ) {
filePath = filePath [ 1 : ]
}
2020-05-08 13:41:01 +00:00
stmt := Db ( ) . Unscoped ( ) . Where ( "file_missing = 0 AND deleted_at IS NULL" )
2020-05-07 19:46:00 +00:00
if filePath != "" {
2020-05-07 19:55:34 +00:00
stmt = stmt . Where ( "file_name LIKE ?" , filePath + "/%" )
2020-05-07 19:46:00 +00:00
}
err = stmt . Order ( "id" ) . Limit ( limit ) . Offset ( offset ) . Find ( & files ) . Error
2019-12-11 06:37:39 +00:00
2020-05-07 17:42:04 +00:00
return files , err
2019-12-11 06:37:39 +00:00
}
2020-05-23 18:58:58 +00:00
// FilesByUID
func FilesByUID ( u [ ] string , limit int , offset int ) ( files [ ] entity . File , err error ) {
if err := Db ( ) . Where ( "(photo_uid IN (?) AND file_primary = 1) OR file_uid IN (?)" , u , u ) . Preload ( "Photo" ) . Limit ( limit ) . Offset ( offset ) . Find ( & files ) . Error ; err != nil {
2019-12-11 06:37:39 +00:00
return files , err
}
return files , nil
}
2020-05-23 18:58:58 +00:00
// FileByPhotoUID
func FileByPhotoUID ( u string ) ( file entity . File , err error ) {
if err := Db ( ) . Where ( "photo_uid = ? AND file_primary = 1" , u ) . Preload ( "Links" ) . Preload ( "Photo" ) . First ( & file ) . Error ; err != nil {
2019-12-11 06:37:39 +00:00
return file , err
}
return file , nil
}
2020-05-23 18:58:58 +00:00
// VideoByPhotoUID
func VideoByPhotoUID ( u string ) ( file entity . File , err error ) {
if err := Db ( ) . Where ( "photo_uid = ? AND file_video = 1" , u ) . Preload ( "Links" ) . Preload ( "Photo" ) . First ( & file ) . Error ; err != nil {
2020-05-20 08:42:48 +00:00
return file , err
}
return file , nil
}
2020-05-23 18:58:58 +00:00
// FileByUID returns the file entity for a given UID.
func FileByUID ( uid string ) ( file entity . File , err error ) {
if err := Db ( ) . Where ( "file_uid = ?" , uid ) . Preload ( "Links" ) . Preload ( "Photo" ) . First ( & file ) . Error ; err != nil {
2019-12-11 06:37:39 +00:00
return file , err
}
return file , nil
}
2020-05-20 08:42:48 +00:00
// FileByHash finds a file with a given hash string.
2020-05-08 13:41:01 +00:00
func FileByHash ( fileHash string ) ( file entity . File , err error ) {
if err := Db ( ) . Where ( "file_hash = ?" , fileHash ) . Preload ( "Links" ) . Preload ( "Photo" ) . First ( & file ) . Error ; err != nil {
2019-12-11 06:37:39 +00:00
return file , err
}
return file , nil
}
2020-04-21 08:23:27 +00:00
// SetPhotoPrimary sets a new primary image file for a photo.
2020-05-23 18:58:58 +00:00
func SetPhotoPrimary ( photoUID , fileUID string ) error {
Db ( ) . Model ( entity . File { } ) . Where ( "photo_uid = ? AND file_uid <> ?" , photoUID , fileUID ) . UpdateColumn ( "file_primary" , false )
return Db ( ) . Model ( entity . File { } ) . Where ( "photo_uid = ? AND file_uid = ?" , photoUID , fileUID ) . UpdateColumn ( "file_primary" , true ) . Error
2020-04-21 08:23:27 +00:00
}
2020-05-18 13:45:55 +00:00
// SetFileError updates the file error column.
2020-05-23 18:58:58 +00:00
func SetFileError ( fileUID , errorString string ) {
if err := Db ( ) . Model ( entity . File { } ) . Where ( "file_uid = ?" , fileUID ) . UpdateColumn ( "file_error" , errorString ) . Error ; err != nil {
2020-05-18 13:45:55 +00:00
log . Errorf ( "query: %s" , err . Error ( ) )
}
}