diff --git a/api/gqlgen.yml b/api/gqlgen.yml index 89eff49b..4d2c5743 100644 --- a/api/gqlgen.yml +++ b/api/gqlgen.yml @@ -29,6 +29,9 @@ models: resolver: true Media: model: github.com/photoview/photoview/api/graphql/models.Media + fields: + exif: + resolver: true MediaURL: model: github.com/photoview/photoview/api/graphql/models.MediaURL MediaEXIF: diff --git a/api/graphql/generated.go b/api/graphql/generated.go index 9d7744ae..774810ef 100644 --- a/api/graphql/generated.go +++ b/api/graphql/generated.go @@ -230,6 +230,8 @@ type MediaResolver interface { HighRes(ctx context.Context, obj *models.Media) (*models.MediaURL, error) VideoWeb(ctx context.Context, obj *models.Media) (*models.MediaURL, error) + Exif(ctx context.Context, obj *models.Media) (*models.MediaEXIF, error) + Favorite(ctx context.Context, obj *models.Media) (bool, error) Shares(ctx context.Context, obj *models.Media) ([]*models.ShareToken, error) @@ -2973,14 +2975,14 @@ func (ec *executionContext) _Media_exif(ctx context.Context, field graphql.Colle Object: "Media", Field: field, Args: nil, - IsMethod: false, - IsResolver: false, + IsMethod: true, + IsResolver: true, } ctx = graphql.WithFieldContext(ctx, fc) resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { ctx = rctx // use context from middleware stack in children - return obj.Exif, nil + return ec.resolvers.Media().Exif(rctx, obj) }) if err != nil { ec.Error(ctx, err) @@ -7971,7 +7973,16 @@ func (ec *executionContext) _Media(ctx context.Context, sel ast.SelectionSet, ob atomic.AddUint32(&invalids, 1) } case "exif": - out.Values[i] = ec._Media_exif(ctx, field, obj) + field := field + out.Concurrently(i, func() (res graphql.Marshaler) { + defer func() { + if r := recover(); r != nil { + ec.Error(ctx, ec.Recover(ctx, r)) + } + }() + res = ec._Media_exif(ctx, field, obj) + return res + }) case "videoMetadata": out.Values[i] = ec._Media_videoMetadata(ctx, field, obj) case "favorite": diff --git a/api/graphql/resolvers/media.go b/api/graphql/resolvers/media.go index 21482d27..0b1a2e97 100644 --- a/api/graphql/resolvers/media.go +++ b/api/graphql/resolvers/media.go @@ -192,6 +192,19 @@ func (r *mediaResolver) VideoWeb(ctx context.Context, media *models.Media) (*mod return &url, nil } +func (r *mediaResolver) Exif(ctx context.Context, media *models.Media) (*models.MediaEXIF, error) { + if media.Exif != nil { + return media.Exif, nil + } + + var exif models.MediaEXIF + if err := r.Database.Model(&media).Association("Exif").Find(&exif); err != nil { + return nil, err + } + + return &exif, nil +} + func (r *mediaResolver) Favorite(ctx context.Context, media *models.Media) (bool, error) { user := auth.UserFromContext(ctx) if user == nil {