Movie select overhaul (#4563)

* Add ids to findMovies input
* Use ids for other find interfaces
* Update client side
* Fix gallery select function
* Replace movie select
* Re-add creatable
* Overhaul movie table
* Remove and deprecated unused code
This commit is contained in:
WithoutPants
2024-02-19 10:25:08 +11:00
committed by GitHub
parent e7f610ce18
commit e231812203
27 changed files with 696 additions and 437 deletions

View File

@@ -7,6 +7,7 @@ import (
"github.com/99designs/gqlgen/graphql"
"github.com/stashapp/stash/pkg/models"
"github.com/stashapp/stash/pkg/sliceutil"
"github.com/stashapp/stash/pkg/sliceutil/stringslice"
)
func (r *queryResolver) FindImage(ctx context.Context, id *string, checksum *string) (*models.Image, error) {
@@ -46,28 +47,63 @@ func (r *queryResolver) FindImage(ctx context.Context, id *string, checksum *str
return image, nil
}
func (r *queryResolver) FindImages(ctx context.Context, imageFilter *models.ImageFilterType, imageIds []int, filter *models.FindFilterType) (ret *FindImagesResultType, err error) {
func (r *queryResolver) FindImages(
ctx context.Context,
imageFilter *models.ImageFilterType,
imageIds []int,
ids []string,
filter *models.FindFilterType,
) (ret *FindImagesResultType, err error) {
if len(ids) > 0 {
imageIds, err = stringslice.StringSliceToIntSlice(ids)
if err != nil {
return nil, err
}
}
if err := r.withReadTxn(ctx, func(ctx context.Context) error {
qb := r.repository.Image
var images []*models.Image
fields := graphql.CollectAllFields(ctx)
result := &models.ImageQueryResult{}
result, err := qb.Query(ctx, models.ImageQueryOptions{
QueryOptions: models.QueryOptions{
FindFilter: filter,
Count: sliceutil.Contains(fields, "count"),
},
ImageFilter: imageFilter,
Megapixels: sliceutil.Contains(fields, "megapixels"),
TotalSize: sliceutil.Contains(fields, "filesize"),
})
if err != nil {
return err
}
if len(imageIds) > 0 {
images, err = r.repository.Image.FindMany(ctx, imageIds)
if err == nil {
result.Count = len(images)
for _, s := range images {
if err = s.LoadPrimaryFile(ctx, r.repository.File); err != nil {
break
}
images, err := result.Resolve(ctx)
if err != nil {
return err
f := s.Files.Primary()
if f == nil {
continue
}
imageFile, ok := f.(*models.ImageFile)
if !ok {
continue
}
result.Megapixels += float64(imageFile.Width*imageFile.Height) / float64(1000000)
result.TotalSize += float64(f.Base().Size)
}
}
} else {
result, err = qb.Query(ctx, models.ImageQueryOptions{
QueryOptions: models.QueryOptions{
FindFilter: filter,
Count: sliceutil.Contains(fields, "count"),
},
ImageFilter: imageFilter,
Megapixels: sliceutil.Contains(fields, "megapixels"),
TotalSize: sliceutil.Contains(fields, "filesize"),
})
if err == nil {
images, err = result.Resolve(ctx)
}
}
ret = &FindImagesResultType{