File storage rewrite (#2676)

* Restructure data layer part 2 (#2599)
* Refactor and separate image model
* Refactor image query builder
* Handle relationships in image query builder
* Remove relationship management methods
* Refactor gallery model/query builder
* Add scenes to gallery model
* Convert scene model
* Refactor scene models
* Remove unused methods
* Add unit tests for gallery
* Add image tests
* Add scene tests
* Convert unnecessary scene value pointers to values
* Convert unnecessary pointer values to values
* Refactor scene partial
* Add scene partial tests
* Refactor ImagePartial
* Add image partial tests
* Refactor gallery partial update
* Add partial gallery update tests
* Use zero/null package for null values
* Add files and scan system
* Add sqlite implementation for files/folders
* Add unit tests for files/folders
* Image refactors
* Update image data layer
* Refactor gallery model and creation
* Refactor scene model
* Refactor scenes
* Don't set title from filename
* Allow galleries to freely add/remove images
* Add multiple scene file support to graphql and UI
* Add multiple file support for images in graphql/UI
* Add multiple file for galleries in graphql/UI
* Remove use of some deprecated fields
* Remove scene path usage
* Remove gallery path usage
* Remove path from image
* Move funscript to video file
* Refactor caption detection
* Migrate existing data
* Add post commit/rollback hook system
* Lint. Comment out import/export tests
* Add WithDatabase read only wrapper
* Prepend tasks to list
* Add 32 pre-migration
* Add warnings in release and migration notes
This commit is contained in:
WithoutPants
2022-07-13 16:30:54 +10:00
parent 30877c75fb
commit 5495d72849
359 changed files with 43690 additions and 16000 deletions

View File

@@ -14,17 +14,14 @@ import (
// of cover image.
func ToBasicJSON(image *models.Image) *jsonschema.Image {
newImageJSON := jsonschema.Image{
Checksum: image.Checksum,
CreatedAt: json.JSONTime{Time: image.CreatedAt.Timestamp},
UpdatedAt: json.JSONTime{Time: image.UpdatedAt.Timestamp},
Checksum: image.Checksum(),
Title: image.Title,
CreatedAt: json.JSONTime{Time: image.CreatedAt},
UpdatedAt: json.JSONTime{Time: image.UpdatedAt},
}
if image.Title.Valid {
newImageJSON.Title = image.Title.String
}
if image.Rating.Valid {
newImageJSON.Rating = int(image.Rating.Int64)
if image.Rating != nil {
newImageJSON.Rating = *image.Rating
}
newImageJSON.Organized = image.Organized
@@ -38,21 +35,12 @@ func ToBasicJSON(image *models.Image) *jsonschema.Image {
func getImageFileJSON(image *models.Image) *jsonschema.ImageFile {
ret := &jsonschema.ImageFile{}
if image.FileModTime.Valid {
ret.ModTime = json.JSONTime{Time: image.FileModTime.Timestamp}
}
f := image.PrimaryFile()
if image.Size.Valid {
ret.Size = int(image.Size.Int64)
}
if image.Width.Valid {
ret.Width = int(image.Width.Int64)
}
if image.Height.Valid {
ret.Height = int(image.Height.Int64)
}
ret.ModTime = json.JSONTime{Time: f.ModTime}
ret.Size = f.Size
ret.Width = f.Width
ret.Height = f.Height
return ret
}
@@ -60,8 +48,8 @@ func getImageFileJSON(image *models.Image) *jsonschema.ImageFile {
// GetStudioName returns the name of the provided image's studio. It returns an
// empty string if there is no studio assigned to the image.
func GetStudioName(ctx context.Context, reader studio.Finder, image *models.Image) (string, error) {
if image.StudioID.Valid {
studio, err := reader.Find(ctx, int(image.StudioID.Int64))
if image.StudioID != nil {
studio, err := reader.Find(ctx, *image.StudioID)
if err != nil {
return "", err
}