Add db resolver for media.exif

This commit is contained in:
viktorstrate
2021-01-19 16:46:15 +01:00
parent 46ae5115bb
commit de35a06014
3 changed files with 31 additions and 4 deletions

View File

@@ -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:

View File

@@ -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":

View File

@@ -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 {