diff --git a/graphql/documents/mutations/performer.graphql b/graphql/documents/mutations/performer.graphql index a74a3a5f7..ec785f5f2 100644 --- a/graphql/documents/mutations/performer.graphql +++ b/graphql/documents/mutations/performer.graphql @@ -15,7 +15,7 @@ mutation PerformerCreate( $twitter: String, $instagram: String, $favorite: Boolean, - $image: String!) { + $image: String) { performerCreate(input: { name: $name, diff --git a/graphql/schema/types/performer.graphql b/graphql/schema/types/performer.graphql index af52b704c..a1ba8e6f7 100644 --- a/graphql/schema/types/performer.graphql +++ b/graphql/schema/types/performer.graphql @@ -41,7 +41,7 @@ input PerformerCreateInput { instagram: String favorite: Boolean """This should be base64 encoded""" - image: String! + image: String } input PerformerUpdateInput { diff --git a/pkg/api/resolver_mutation_performer.go b/pkg/api/resolver_mutation_performer.go index 54a7693e4..854e012f9 100644 --- a/pkg/api/resolver_mutation_performer.go +++ b/pkg/api/resolver_mutation_performer.go @@ -3,16 +3,26 @@ package api import ( "context" "database/sql" + "strconv" + "time" + "github.com/stashapp/stash/pkg/database" "github.com/stashapp/stash/pkg/models" "github.com/stashapp/stash/pkg/utils" - "strconv" - "time" ) func (r *mutationResolver) PerformerCreate(ctx context.Context, input models.PerformerCreateInput) (*models.Performer, error) { - // Process the base 64 encoded image string - checksum, imageData, err := utils.ProcessBase64Image(input.Image) + // generate checksum from performer name rather than image + checksum := utils.MD5FromString(*input.Name) + + var imageData []byte + var err error + + if input.Image == nil { + input.Image = &models.DefaultPerformerImage + } + + _, imageData, err = utils.ProcessBase64Image(*input.Image) if err != nil { return nil, err } @@ -188,4 +198,3 @@ func (r *mutationResolver) PerformerDestroy(ctx context.Context, input models.Pe } return true, nil } - diff --git a/pkg/models/generated_exec.go b/pkg/models/generated_exec.go index 48627edc4..19254cb2c 100644 --- a/pkg/models/generated_exec.go +++ b/pkg/models/generated_exec.go @@ -2059,7 +2059,7 @@ input PerformerCreateInput { instagram: String favorite: Boolean """This should be base64 encoded""" - image: String! + image: String } input PerformerUpdateInput { @@ -8255,7 +8255,7 @@ func (ec *executionContext) unmarshalInputPerformerCreateInput(ctx context.Conte } case "image": var err error - it.Image, err = ec.unmarshalNString2string(ctx, v) + it.Image, err = ec.unmarshalOString2áš–string(ctx, v) if err != nil { return it, err } diff --git a/pkg/models/generated_models.go b/pkg/models/generated_models.go index 351270d16..311a8a843 100644 --- a/pkg/models/generated_models.go +++ b/pkg/models/generated_models.go @@ -106,7 +106,7 @@ type PerformerCreateInput struct { Instagram *string `json:"instagram"` Favorite *bool `json:"favorite"` // This should be base64 encoded - Image string `json:"image"` + Image *string `json:"image"` } type PerformerDestroyInput struct { diff --git a/pkg/models/model_performer.go b/pkg/models/model_performer.go index 8d3beb3db..95c3e4516 100644 --- a/pkg/models/model_performer.go +++ b/pkg/models/model_performer.go @@ -27,3 +27,5 @@ type Performer struct { CreatedAt SQLiteTimestamp `db:"created_at" json:"created_at"` UpdatedAt SQLiteTimestamp `db:"updated_at" json:"updated_at"` } + +var DefaultPerformerImage string = "data:image/jpeg;base64,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" diff --git a/pkg/utils/crypto.go b/pkg/utils/crypto.go index efa124a34..4fd911ccb 100644 --- a/pkg/utils/crypto.go +++ b/pkg/utils/crypto.go @@ -12,6 +12,11 @@ func MD5FromBytes(data []byte) string { return fmt.Sprintf("%x", result) } +func MD5FromString(str string) string { + data := []byte(str) + return MD5FromBytes(data) +} + func MD5FromFilePath(filePath string) (string, error) { f, err := os.Open(filePath) if err != nil { diff --git a/ui/v2/src/core/generated-graphql.tsx b/ui/v2/src/core/generated-graphql.tsx index d0239e0b2..57ee5ba2d 100644 --- a/ui/v2/src/core/generated-graphql.tsx +++ b/ui/v2/src/core/generated-graphql.tsx @@ -1,6 +1,6 @@ /* tslint:disable */ /* eslint-disable */ -// Generated in 2019-08-14T07:29:27+10:00 +// Generated in 2019-08-20T18:32:35+10:00 export type Maybe = T | undefined; export interface SceneFilterType { @@ -147,7 +147,7 @@ export interface PerformerCreateInput { favorite?: Maybe; /** This should be base64 encoded */ - image: string; + image?: Maybe; } export interface PerformerUpdateInput { @@ -294,7 +294,7 @@ export type PerformerCreateVariables = { twitter?: Maybe; instagram?: Maybe; favorite?: Maybe; - image: string; + image?: Maybe; }; export type PerformerCreateMutation = { @@ -1572,7 +1572,7 @@ export const PerformerCreateDocument = gql` $twitter: String $instagram: String $favorite: Boolean - $image: String! + $image: String ) { performerCreate( input: {