Add new fields to scene tagger (#3094)

* Add new fields to scene tagger
* Update scraper docs with new fields
* Set code and director in identify
* Add new fields to identify dialog
This commit is contained in:
WithoutPants
2022-11-10 12:51:49 +11:00
committed by GitHub
parent a2ca266cb3
commit eb795ff9ab
5 changed files with 66 additions and 3 deletions

View File

@@ -280,6 +280,16 @@ func getScenePartial(scene *models.Scene, scraped *scraper.ScrapedScene, fieldOp
partial.URL = models.NewOptionalString(*scraped.URL)
}
}
if scraped.Director != nil && (scene.Director != *scraped.Director) {
if shouldSetSingleValueField(fieldOptions["director"], scene.Director != "") {
partial.Director = models.NewOptionalString(*scraped.Director)
}
}
if scraped.Code != nil && (scene.Code != *scraped.Code) {
if shouldSetSingleValueField(fieldOptions["code"], scene.Code != "") {
partial.Code = models.NewOptionalString(*scraped.Code)
}
}
if setOrganized && !scene.Organized {
// just reuse the boolean since we know it's true

View File

@@ -3,7 +3,12 @@ import { Form, Button, Table } from "react-bootstrap";
import { Icon } from "src/components/Shared";
import * as GQL from "src/core/generated-graphql";
import { FormattedMessage, useIntl } from "react-intl";
import { multiValueSceneFields, SceneField, sceneFields } from "./constants";
import {
multiValueSceneFields,
SceneField,
sceneFieldMessageID,
sceneFields,
} from "./constants";
import { ThreeStateBoolean } from "./ThreeStateBoolean";
import {
faCheck,
@@ -13,7 +18,7 @@ import {
interface IFieldOptionsEditor {
options: GQL.IdentifyFieldOptions | undefined;
field: string;
field: SceneField;
editField: () => void;
editOptions: (o?: GQL.IdentifyFieldOptions | null) => void;
editing: boolean;
@@ -64,7 +69,7 @@ const FieldOptionsEditor: React.FC<IFieldOptionsEditor> = ({
}, [resetOptions]);
function renderField() {
return intl.formatMessage({ id: field });
return intl.formatMessage({ id: sceneFieldMessageID(field) });
}
function renderStrategy() {

View File

@@ -13,6 +13,8 @@ export const sceneFields = [
"date",
"details",
"url",
"code",
"director",
"studio",
"performers",
"tags",
@@ -25,3 +27,11 @@ export const multiValueSceneFields: SceneField[] = [
"performers",
"tags",
];
export function sceneFieldMessageID(field: SceneField) {
if (field === "code") {
return "scene_code";
}
return field;
}

View File

@@ -365,6 +365,8 @@ const StashSearchResult: React.FC<IStashSearchResultProps> = ({
url: resolveField("url", stashScene.url, scene.url),
tag_ids: tagIDs,
stash_ids: stashScene.stash_ids ?? [],
code: resolveField("code", stashScene.code, scene.code),
director: resolveField("director", stashScene.director, scene.director),
};
const includeStashID = !excludedFieldList.includes("stash_ids");
@@ -427,6 +429,8 @@ const StashSearchResult: React.FC<IStashSearchResultProps> = ({
details: "details",
studio: "studio",
stash_ids: "stash_ids",
code: "code",
director: "director",
};
const maybeRenderCoverImage = () => {
@@ -510,6 +514,21 @@ const StashSearchResult: React.FC<IStashSearchResultProps> = ({
}
};
const maybeRenderStudioCode = () => {
if (isActive && scene.code) {
return (
<h5>
<OptionalField
exclude={excludedFields[fields.code]}
setExclude={(v) => setExcludedField(fields.code, v)}
>
{scene.code}
</OptionalField>
</h5>
);
}
};
const maybeRenderDateField = () => {
if (isActive && scene.date) {
return (
@@ -525,6 +544,21 @@ const StashSearchResult: React.FC<IStashSearchResultProps> = ({
}
};
const maybeRenderDirector = () => {
if (scene.director) {
return (
<h5>
<OptionalField
exclude={excludedFields[fields.director]}
setExclude={(v) => setExcludedField(fields.director, v)}
>
<FormattedMessage id="director" />: {scene.director}
</OptionalField>
</h5>
);
}
};
const maybeRenderURL = () => {
if (scene.url) {
return (
@@ -688,6 +722,7 @@ const StashSearchResult: React.FC<IStashSearchResultProps> = ({
</>
)}
{maybeRenderStudioCode()}
{maybeRenderDateField()}
{getDurationStatus(scene, stashSceneFile?.duration)}
{getFingerprintStatus(scene, stashScene)}
@@ -696,6 +731,7 @@ const StashSearchResult: React.FC<IStashSearchResultProps> = ({
{isActive && (
<div className="d-flex flex-column">
{maybeRenderStashBoxID()}
{maybeRenderDirector()}
{maybeRenderURL()}
{maybeRenderDetails()}
</div>

View File

@@ -800,6 +800,8 @@ Details
```
Title
Details
Code
Director
URL
Date
Image