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

@@ -1,6 +1,10 @@
package models
import "context"
import (
"context"
"github.com/stashapp/stash/pkg/file"
)
type PHashDuplicationCriterionInput struct {
Duplicated *bool `json:"duplicated"`
@@ -121,9 +125,9 @@ type SceneReader interface {
SceneFinder
// TODO - remove this in another PR
Find(ctx context.Context, id int) (*Scene, error)
FindByChecksum(ctx context.Context, checksum string) (*Scene, error)
FindByOSHash(ctx context.Context, oshash string) (*Scene, error)
FindByPath(ctx context.Context, path string) (*Scene, error)
FindByChecksum(ctx context.Context, checksum string) ([]*Scene, error)
FindByOSHash(ctx context.Context, oshash string) ([]*Scene, error)
FindByPath(ctx context.Context, path string) ([]*Scene, error)
FindByPerformerID(ctx context.Context, performerID int) ([]*Scene, error)
FindByGalleryID(ctx context.Context, performerID int) ([]*Scene, error)
FindDuplicates(ctx context.Context, distance int) ([][]*Scene, error)
@@ -142,32 +146,19 @@ type SceneReader interface {
Wall(ctx context.Context, q *string) ([]*Scene, error)
All(ctx context.Context) ([]*Scene, error)
Query(ctx context.Context, options SceneQueryOptions) (*SceneQueryResult, error)
GetCaptions(ctx context.Context, sceneID int) ([]*SceneCaption, error)
GetCover(ctx context.Context, sceneID int) ([]byte, error)
GetMovies(ctx context.Context, sceneID int) ([]MoviesScenes, error)
GetTagIDs(ctx context.Context, sceneID int) ([]int, error)
GetGalleryIDs(ctx context.Context, sceneID int) ([]int, error)
GetPerformerIDs(ctx context.Context, sceneID int) ([]int, error)
GetStashIDs(ctx context.Context, sceneID int) ([]*StashID, error)
}
type SceneWriter interface {
Create(ctx context.Context, newScene Scene) (*Scene, error)
Update(ctx context.Context, updatedScene ScenePartial) (*Scene, error)
UpdateFull(ctx context.Context, updatedScene Scene) (*Scene, error)
Create(ctx context.Context, newScene *Scene, fileIDs []file.ID) error
Update(ctx context.Context, updatedScene *Scene) error
UpdatePartial(ctx context.Context, id int, updatedScene ScenePartial) (*Scene, error)
IncrementOCounter(ctx context.Context, id int) (int, error)
DecrementOCounter(ctx context.Context, id int) (int, error)
ResetOCounter(ctx context.Context, id int) (int, error)
UpdateFileModTime(ctx context.Context, id int, modTime NullSQLiteTimestamp) error
Destroy(ctx context.Context, id int) error
UpdateCaptions(ctx context.Context, id int, captions []*SceneCaption) error
UpdateCover(ctx context.Context, sceneID int, cover []byte) error
DestroyCover(ctx context.Context, sceneID int) error
UpdatePerformers(ctx context.Context, sceneID int, performerIDs []int) error
UpdateTags(ctx context.Context, sceneID int, tagIDs []int) error
UpdateGalleries(ctx context.Context, sceneID int, galleryIDs []int) error
UpdateMovies(ctx context.Context, sceneID int, movies []MoviesScenes) error
UpdateStashIDs(ctx context.Context, sceneID int, stashIDs []StashID) error
}
type SceneReaderWriter interface {