Properly configure face gallery

This commit is contained in:
viktorstrate
2021-02-20 14:45:43 +01:00
parent 5368b4bae0
commit a3e5346501
5 changed files with 48 additions and 30 deletions

View File

@@ -144,7 +144,7 @@ type ComplexityRoot struct {
DeleteUser func(childComplexity int, id int) int DeleteUser func(childComplexity int, id int) int
FavoriteMedia func(childComplexity int, mediaID int, favorite bool) int FavoriteMedia func(childComplexity int, mediaID int, favorite bool) int
InitialSetupWizard func(childComplexity int, username string, password string, rootPath string) int InitialSetupWizard func(childComplexity int, username string, password string, rootPath string) int
MoveImageFace func(childComplexity int, imageFaceID int, newFaceGroupID int) int MoveImageFaces func(childComplexity int, imageFaceIDs []int, destinationFaceGroupID int) int
ProtectShareToken func(childComplexity int, token string, password *string) int ProtectShareToken func(childComplexity int, token string, password *string) int
RecognizeUnlabeledFaces func(childComplexity int) int RecognizeUnlabeledFaces func(childComplexity int) int
ScanAll func(childComplexity int) int ScanAll func(childComplexity int) int
@@ -295,7 +295,7 @@ type MutationResolver interface {
SetScannerConcurrentWorkers(ctx context.Context, workers int) (int, error) SetScannerConcurrentWorkers(ctx context.Context, workers int) (int, error)
SetFaceGroupLabel(ctx context.Context, faceGroupID int, label *string) (*models.FaceGroup, error) SetFaceGroupLabel(ctx context.Context, faceGroupID int, label *string) (*models.FaceGroup, error)
CombineFaceGroups(ctx context.Context, destinationFaceGroupID int, sourceFaceGroupID int) (*models.FaceGroup, error) CombineFaceGroups(ctx context.Context, destinationFaceGroupID int, sourceFaceGroupID int) (*models.FaceGroup, error)
MoveImageFace(ctx context.Context, imageFaceID int, newFaceGroupID int) (*models.ImageFace, error) MoveImageFaces(ctx context.Context, imageFaceIDs []int, destinationFaceGroupID int) (*models.FaceGroup, error)
RecognizeUnlabeledFaces(ctx context.Context) ([]*models.ImageFace, error) RecognizeUnlabeledFaces(ctx context.Context) ([]*models.ImageFace, error)
} }
type QueryResolver interface { type QueryResolver interface {
@@ -827,17 +827,17 @@ func (e *executableSchema) Complexity(typeName, field string, childComplexity in
return e.complexity.Mutation.InitialSetupWizard(childComplexity, args["username"].(string), args["password"].(string), args["rootPath"].(string)), true return e.complexity.Mutation.InitialSetupWizard(childComplexity, args["username"].(string), args["password"].(string), args["rootPath"].(string)), true
case "Mutation.moveImageFace": case "Mutation.moveImageFaces":
if e.complexity.Mutation.MoveImageFace == nil { if e.complexity.Mutation.MoveImageFaces == nil {
break break
} }
args, err := ec.field_Mutation_moveImageFace_args(context.TODO(), rawArgs) args, err := ec.field_Mutation_moveImageFaces_args(context.TODO(), rawArgs)
if err != nil { if err != nil {
return 0, false return 0, false
} }
return e.complexity.Mutation.MoveImageFace(childComplexity, args["imageFaceID"].(int), args["newFaceGroupID"].(int)), true return e.complexity.Mutation.MoveImageFaces(childComplexity, args["imageFaceIDs"].([]int), args["destinationFaceGroupID"].(int)), true
case "Mutation.protectShareToken": case "Mutation.protectShareToken":
if e.complexity.Mutation.ProtectShareToken == nil { if e.complexity.Mutation.ProtectShareToken == nil {
@@ -1651,8 +1651,8 @@ type Mutation {
setFaceGroupLabel(faceGroupID: ID!, label: String): FaceGroup! setFaceGroupLabel(faceGroupID: ID!, label: String): FaceGroup!
"Merge two face groups into a single one, all ImageFaces from source will be moved to destination" "Merge two face groups into a single one, all ImageFaces from source will be moved to destination"
combineFaceGroups(destinationFaceGroupID: ID!, sourceFaceGroupID: ID!): FaceGroup! combineFaceGroups(destinationFaceGroupID: ID!, sourceFaceGroupID: ID!): FaceGroup!
"Move a single ImageFace to another face group" "Move a list of ImageFaces to another face group"
moveImageFace(imageFaceID: ID!, newFaceGroupID: ID!): ImageFace! moveImageFaces(imageFaceIDs: [ID!]!, destinationFaceGroupID: ID!): FaceGroup!
"Check all unlabeled faces to see if they match a labeled FaceGroup, and move them if they match" "Check all unlabeled faces to see if they match a labeled FaceGroup, and move them if they match"
recognizeUnlabeledFaces: [ImageFace!]! recognizeUnlabeledFaces: [ImageFace!]!
} }
@@ -2111,27 +2111,27 @@ func (ec *executionContext) field_Mutation_initialSetupWizard_args(ctx context.C
return args, nil return args, nil
} }
func (ec *executionContext) field_Mutation_moveImageFace_args(ctx context.Context, rawArgs map[string]interface{}) (map[string]interface{}, error) { func (ec *executionContext) field_Mutation_moveImageFaces_args(ctx context.Context, rawArgs map[string]interface{}) (map[string]interface{}, error) {
var err error var err error
args := map[string]interface{}{} args := map[string]interface{}{}
var arg0 int var arg0 []int
if tmp, ok := rawArgs["imageFaceID"]; ok { if tmp, ok := rawArgs["imageFaceIDs"]; ok {
ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("imageFaceID")) ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("imageFaceIDs"))
arg0, err = ec.unmarshalNID2int(ctx, tmp) arg0, err = ec.unmarshalNID2int(ctx, tmp)
if err != nil { if err != nil {
return nil, err return nil, err
} }
} }
args["imageFaceID"] = arg0 args["imageFaceIDs"] = arg0
var arg1 int var arg1 int
if tmp, ok := rawArgs["newFaceGroupID"]; ok { if tmp, ok := rawArgs["destinationFaceGroupID"]; ok {
ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("newFaceGroupID")) ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("destinationFaceGroupID"))
arg1, err = ec.unmarshalNID2int(ctx, tmp) arg1, err = ec.unmarshalNID2int(ctx, tmp)
if err != nil { if err != nil {
return nil, err return nil, err
} }
} }
args["newFaceGroupID"] = arg1 args["destinationFaceGroupID"] = arg1
return args, nil return args, nil
} }
@@ -5448,7 +5448,7 @@ func (ec *executionContext) _Mutation_combineFaceGroups(ctx context.Context, fie
return ec.marshalNFaceGroup2ᚖgithubᚗcomᚋphotoviewᚋphotoviewᚋapiᚋgraphqlᚋmodelsᚐFaceGroup(ctx, field.Selections, res) return ec.marshalNFaceGroup2ᚖgithubᚗcomᚋphotoviewᚋphotoviewᚋapiᚋgraphqlᚋmodelsᚐFaceGroup(ctx, field.Selections, res)
} }
func (ec *executionContext) _Mutation_moveImageFace(ctx context.Context, field graphql.CollectedField) (ret graphql.Marshaler) { func (ec *executionContext) _Mutation_moveImageFaces(ctx context.Context, field graphql.CollectedField) (ret graphql.Marshaler) {
defer func() { defer func() {
if r := recover(); r != nil { if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r)) ec.Error(ctx, ec.Recover(ctx, r))
@@ -5465,7 +5465,7 @@ func (ec *executionContext) _Mutation_moveImageFace(ctx context.Context, field g
ctx = graphql.WithFieldContext(ctx, fc) ctx = graphql.WithFieldContext(ctx, fc)
rawArgs := field.ArgumentMap(ec.Variables) rawArgs := field.ArgumentMap(ec.Variables)
args, err := ec.field_Mutation_moveImageFace_args(ctx, rawArgs) args, err := ec.field_Mutation_moveImageFaces_args(ctx, rawArgs)
if err != nil { if err != nil {
ec.Error(ctx, err) ec.Error(ctx, err)
return graphql.Null return graphql.Null
@@ -5473,7 +5473,7 @@ func (ec *executionContext) _Mutation_moveImageFace(ctx context.Context, field g
fc.Args = args fc.Args = args
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children ctx = rctx // use context from middleware stack in children
return ec.resolvers.Mutation().MoveImageFace(rctx, args["imageFaceID"].(int), args["newFaceGroupID"].(int)) return ec.resolvers.Mutation().MoveImageFaces(rctx, args["imageFaceIDs"].([]int), args["destinationFaceGroupID"].(int))
}) })
if err != nil { if err != nil {
ec.Error(ctx, err) ec.Error(ctx, err)
@@ -5485,9 +5485,9 @@ func (ec *executionContext) _Mutation_moveImageFace(ctx context.Context, field g
} }
return graphql.Null return graphql.Null
} }
res := resTmp.(*models.ImageFace) res := resTmp.(*models.FaceGroup)
fc.Result = res fc.Result = res
return ec.marshalNImageFace2ᚖgithubᚗcomᚋphotoviewᚋphotoviewᚋapiᚋgraphqlᚋmodelsᚐImageFace(ctx, field.Selections, res) return ec.marshalNFaceGroup2ᚖgithubᚗcomᚋphotoviewᚋphotoviewᚋapiᚋgraphqlᚋmodelsᚐFaceGroup(ctx, field.Selections, res)
} }
func (ec *executionContext) _Mutation_recognizeUnlabeledFaces(ctx context.Context, field graphql.CollectedField) (ret graphql.Marshaler) { func (ec *executionContext) _Mutation_recognizeUnlabeledFaces(ctx context.Context, field graphql.CollectedField) (ret graphql.Marshaler) {
@@ -9617,8 +9617,8 @@ func (ec *executionContext) _Mutation(ctx context.Context, sel ast.SelectionSet)
if out.Values[i] == graphql.Null { if out.Values[i] == graphql.Null {
invalids++ invalids++
} }
case "moveImageFace": case "moveImageFaces":
out.Values[i] = ec._Mutation_moveImageFace(ctx, field) out.Values[i] = ec._Mutation_moveImageFaces(ctx, field)
if out.Values[i] == graphql.Null { if out.Values[i] == graphql.Null {
invalids++ invalids++
} }

View File

@@ -149,7 +149,7 @@ func (r *mutationResolver) CombineFaceGroups(ctx context.Context, destinationFac
return destinationFaceGroup, nil return destinationFaceGroup, nil
} }
func (r *mutationResolver) MoveImageFace(ctx context.Context, imageFaceID int, newFaceGroupID int) (*models.ImageFace, error) { func (r *mutationResolver) MoveImageFaces(ctx context.Context, imageFaceIDs []int, destinationFaceGroupID int) (*models.FaceGroup, error) {
panic("not implemented") panic("not implemented")
} }

View File

@@ -120,8 +120,8 @@ type Mutation {
setFaceGroupLabel(faceGroupID: ID!, label: String): FaceGroup! setFaceGroupLabel(faceGroupID: ID!, label: String): FaceGroup!
"Merge two face groups into a single one, all ImageFaces from source will be moved to destination" "Merge two face groups into a single one, all ImageFaces from source will be moved to destination"
combineFaceGroups(destinationFaceGroupID: ID!, sourceFaceGroupID: ID!): FaceGroup! combineFaceGroups(destinationFaceGroupID: ID!, sourceFaceGroupID: ID!): FaceGroup!
"Move a single ImageFace to another face group" "Move a list of ImageFaces to another face group"
moveImageFace(imageFaceID: ID!, newFaceGroupID: ID!): ImageFace! moveImageFaces(imageFaceIDs: [ID!]!, destinationFaceGroupID: ID!): FaceGroup!
"Check all unlabeled faces to see if they match a labeled FaceGroup, and move them if they match" "Check all unlabeled faces to see if they match a labeled FaceGroup, and move them if they match"
recognizeUnlabeledFaces: [ImageFace!]! recognizeUnlabeledFaces: [ImageFace!]!
} }

View File

@@ -23,11 +23,16 @@ export const MY_FACES_QUERY = gql`
} }
media { media {
id id
type
thumbnail { thumbnail {
url url
width width
height height
} }
highRes {
url
}
favorite
} }
} }
} }

View File

@@ -1,5 +1,5 @@
import PropTypes from 'prop-types' import PropTypes from 'prop-types'
import React from 'react' import React, { useState } from 'react'
import PhotoGallery from '../../../components/photoGallery/PhotoGallery' import PhotoGallery from '../../../components/photoGallery/PhotoGallery'
import { ProtectedImage } from '../../../components/photoGallery/ProtectedMedia' import { ProtectedImage } from '../../../components/photoGallery/ProtectedMedia'
import FaceGroupTitle from './FaceGroupTitle' import FaceGroupTitle from './FaceGroupTitle'
@@ -18,16 +18,29 @@ ImageFace.propTypes = {
} }
const SingleFaceGroup = ({ faceGroup }) => { const SingleFaceGroup = ({ faceGroup }) => {
const [presenting, setPresenting] = useState(false)
const [activeIndex, setActiveIndex] = useState(-1)
let mediaGallery = null let mediaGallery = null
if (faceGroup) { if (faceGroup) {
const media = faceGroup.imageFaces.map(x => x.media) const media = faceGroup.imageFaces.map(x => x.media)
const nextImage = () =>
setActiveIndex(i => Math.min(i + 1, media.length - 1))
const previousImage = () => setActiveIndex(i => Math.max(i - 1, 0))
mediaGallery = ( mediaGallery = (
<div> <div>
<PhotoGallery <PhotoGallery
media={media} media={media}
loading={false} loading={false}
setPresenting={() => {}} presenting={presenting}
onSelectImage={() => {}} setPresenting={setPresenting}
onSelectImage={setActiveIndex}
activeIndex={activeIndex}
nextImage={nextImage}
previousImage={previousImage}
/> />
</div> </div>
) )