mirror of https://github.com/stashapp/stash.git
Fix performer scraping (#1314)
This commit is contained in:
parent
e3fa8f7b24
commit
cd0a9a1d62
|
@ -146,7 +146,7 @@ export const PerformerEditPanel: React.FC<IPerformerDetails> = ({
|
|||
const formik = useFormik({
|
||||
initialValues,
|
||||
validationSchema: schema,
|
||||
onSubmit: (values) => onSave(getPerformerInput(values)),
|
||||
onSubmit: (values) => onSave(values),
|
||||
});
|
||||
|
||||
function translateScrapedGender(scrapedGender?: string) {
|
||||
|
@ -158,7 +158,7 @@ export const PerformerEditPanel: React.FC<IPerformerDetails> = ({
|
|||
|
||||
// try to translate from enum values first
|
||||
const upperGender = scrapedGender?.toUpperCase();
|
||||
const asEnum = genderToString(upperGender as GQL.GenderEnum);
|
||||
const asEnum = genderToString(upperGender);
|
||||
if (asEnum) {
|
||||
retEnum = stringToGender(asEnum);
|
||||
} else {
|
||||
|
@ -214,9 +214,14 @@ export const PerformerEditPanel: React.FC<IPerformerDetails> = ({
|
|||
variables: tagInput,
|
||||
});
|
||||
|
||||
if (!result.data?.tagCreate) {
|
||||
Toast.error(new Error("Failed to create tag"));
|
||||
return;
|
||||
}
|
||||
|
||||
// add the new tag to the new tags value
|
||||
const newTagIds = formik.values.tag_ids.concat([
|
||||
result.data!.tagCreate!.id,
|
||||
result.data.tagCreate.id,
|
||||
]);
|
||||
formik.setFieldValue("tag_ids", newTagIds);
|
||||
|
||||
|
@ -298,7 +303,7 @@ export const PerformerEditPanel: React.FC<IPerformerDetails> = ({
|
|||
if (state.tags) {
|
||||
// map tags to their ids and filter out those not found
|
||||
const newTagIds = state.tags.map((t) => t.stored_id).filter((t) => t);
|
||||
formik.setFieldValue("tag_ids", newTagIds as string[]);
|
||||
formik.setFieldValue("tag_ids", newTagIds);
|
||||
|
||||
setNewTags(state.tags.filter((t) => !t.stored_id));
|
||||
}
|
||||
|
@ -309,9 +314,9 @@ export const PerformerEditPanel: React.FC<IPerformerDetails> = ({
|
|||
// otherwise follow existing behaviour
|
||||
if (
|
||||
(!isNew || formik.values.image === undefined) &&
|
||||
(state as GQL.ScrapedPerformerDataFragment).image !== undefined
|
||||
state.image !== undefined
|
||||
) {
|
||||
const imageStr = (state as GQL.ScrapedPerformerDataFragment).image;
|
||||
const imageStr = state.image;
|
||||
formik.setFieldValue("image", imageStr ?? undefined);
|
||||
}
|
||||
if (state.details) {
|
||||
|
@ -332,29 +337,30 @@ export const PerformerEditPanel: React.FC<IPerformerDetails> = ({
|
|||
formik.setFieldValue("image", imageData);
|
||||
}
|
||||
|
||||
async function onSave(
|
||||
performerInput:
|
||||
| Partial<GQL.PerformerCreateInput>
|
||||
| Partial<GQL.PerformerUpdateInput>
|
||||
) {
|
||||
async function onSave(performerInput: InputValues) {
|
||||
setIsLoading(true);
|
||||
try {
|
||||
if (!isNew) {
|
||||
const input = getUpdateValues(performerInput);
|
||||
|
||||
await updatePerformer({
|
||||
variables: {
|
||||
input: {
|
||||
...performerInput,
|
||||
...input,
|
||||
stash_ids: performerInput?.stash_ids?.map((s) => ({
|
||||
endpoint: s.endpoint,
|
||||
stash_id: s.stash_id,
|
||||
})),
|
||||
} as GQL.PerformerUpdateInput,
|
||||
},
|
||||
},
|
||||
});
|
||||
history.push(`/performers/${performer.id}`);
|
||||
} else {
|
||||
const input = getCreateValues(performerInput);
|
||||
const result = await createPerformer({
|
||||
variables: { input: performerInput as GQL.PerformerCreateInput },
|
||||
variables: {
|
||||
input,
|
||||
},
|
||||
});
|
||||
if (result.data?.performerCreate) {
|
||||
history.push(`/performers/${result.data.performerCreate.id}`);
|
||||
|
@ -370,7 +376,7 @@ export const PerformerEditPanel: React.FC<IPerformerDetails> = ({
|
|||
useEffect(() => {
|
||||
if (isVisible) {
|
||||
Mousetrap.bind("s s", () => {
|
||||
onSave?.(getPerformerInput(formik.values));
|
||||
onSave?.(formik.values);
|
||||
});
|
||||
|
||||
if (!isNew) {
|
||||
|
@ -413,19 +419,21 @@ export const PerformerEditPanel: React.FC<IPerformerDetails> = ({
|
|||
|
||||
if (isLoading) return <LoadingIndicator />;
|
||||
|
||||
function getPerformerInput(values: InputValues) {
|
||||
const performerInput: Partial<
|
||||
GQL.PerformerCreateInput | GQL.PerformerUpdateInput
|
||||
> = {
|
||||
function getUpdateValues(values: InputValues): GQL.PerformerUpdateInput {
|
||||
return {
|
||||
...values,
|
||||
gender: stringToGender(values.gender),
|
||||
weight: Number(values.weight),
|
||||
id: performer.id ?? "",
|
||||
};
|
||||
}
|
||||
|
||||
function getCreateValues(values: InputValues): GQL.PerformerCreateInput {
|
||||
return {
|
||||
...values,
|
||||
gender: stringToGender(values.gender),
|
||||
weight: Number(values.weight),
|
||||
};
|
||||
|
||||
if (!isNew) {
|
||||
(performerInput as GQL.PerformerUpdateInput).id = performer.id!;
|
||||
}
|
||||
return performerInput;
|
||||
}
|
||||
|
||||
function onImageChangeHandler(event: React.FormEvent<HTMLInputElement>) {
|
||||
|
|
|
@ -16,9 +16,10 @@ import {
|
|||
usePerformerCreate,
|
||||
useMovieCreate,
|
||||
useTagCreate,
|
||||
stringToGender,
|
||||
} from "src/core/StashService";
|
||||
import { useToast } from "src/hooks";
|
||||
import { DurationUtils } from "src/utils";
|
||||
import { DurationUtils, filterData } from "src/utils";
|
||||
|
||||
function renderScrapedStudio(
|
||||
result: ScrapeResult<string>,
|
||||
|
@ -360,11 +361,37 @@ export const SceneScrapeDialog: React.FC<ISceneScrapeDialogProps> = (
|
|||
}
|
||||
|
||||
async function createNewPerformer(toCreate: GQL.ScrapedScenePerformer) {
|
||||
let performerInput: GQL.PerformerCreateInput = { name: "" };
|
||||
const input: GQL.PerformerCreateInput = {
|
||||
name: toCreate.name,
|
||||
url: toCreate.url,
|
||||
gender: stringToGender(toCreate.gender),
|
||||
birthdate: toCreate.birthdate,
|
||||
ethnicity: toCreate.ethnicity,
|
||||
country: toCreate.country,
|
||||
eye_color: toCreate.eye_color,
|
||||
height: toCreate.height,
|
||||
measurements: toCreate.measurements,
|
||||
fake_tits: toCreate.fake_tits,
|
||||
career_length: toCreate.career_length,
|
||||
tattoos: toCreate.tattoos,
|
||||
piercings: toCreate.piercings,
|
||||
aliases: toCreate.aliases,
|
||||
twitter: toCreate.twitter,
|
||||
instagram: toCreate.instagram,
|
||||
tag_ids: filterData((toCreate.tags ?? []).map((t) => t.stored_id)),
|
||||
image:
|
||||
(toCreate.images ?? []).length > 0
|
||||
? (toCreate.images ?? [])[0]
|
||||
: undefined,
|
||||
details: toCreate.details,
|
||||
death_date: toCreate.death_date,
|
||||
hair_color: toCreate.hair_color,
|
||||
weight: toCreate.weight ? Number(toCreate.weight) : undefined,
|
||||
};
|
||||
|
||||
try {
|
||||
performerInput = Object.assign(performerInput, toCreate);
|
||||
const result = await createPerformer({
|
||||
variables: { input: performerInput },
|
||||
variables: { input },
|
||||
});
|
||||
|
||||
// add the new performer to the new performers value
|
||||
|
|
|
@ -933,7 +933,7 @@ export const stringGenderMap = new Map<string, GQL.GenderEnum>([
|
|||
["Non-Binary", GQL.GenderEnum.NonBinary],
|
||||
]);
|
||||
|
||||
export const genderToString = (value?: GQL.GenderEnum) => {
|
||||
export const genderToString = (value?: GQL.GenderEnum | string) => {
|
||||
if (!value) {
|
||||
return undefined;
|
||||
}
|
||||
|
@ -947,7 +947,10 @@ export const genderToString = (value?: GQL.GenderEnum) => {
|
|||
}
|
||||
};
|
||||
|
||||
export const stringToGender = (value?: string, caseInsensitive?: boolean) => {
|
||||
export const stringToGender = (
|
||||
value?: string | null,
|
||||
caseInsensitive?: boolean
|
||||
) => {
|
||||
if (!value) {
|
||||
return undefined;
|
||||
}
|
||||
|
|
|
@ -0,0 +1,2 @@
|
|||
export const filterData = <T>(data?: (T | null | undefined)[] | null) =>
|
||||
data ? (data.filter((item) => item) as T[]) : [];
|
|
@ -11,3 +11,4 @@ export { default as flattenMessages } from "./flattenMessages";
|
|||
export { default as getISOCountry } from "./country";
|
||||
export { default as useFocus } from "./focus";
|
||||
export { default as downloadFile } from "./download";
|
||||
export * from "./data";
|
||||
|
|
Loading…
Reference in New Issue