From 064610519c06c368adea235ebb55ad697d35b905 Mon Sep 17 00:00:00 2001 From: WithoutPants <53250216+WithoutPants@users.noreply.github.com> Date: Mon, 26 Aug 2024 10:39:18 +1000 Subject: [PATCH 1/3] Persist tagger settings in UIConfig --- ui/v2.5/src/components/Tagger/config.ts | 20 +++++++++++++++++++ ui/v2.5/src/components/Tagger/constants.ts | 1 - ui/v2.5/src/components/Tagger/context.tsx | 15 ++++---------- .../Tagger/performers/PerformerTagger.tsx | 9 +++------ .../Tagger/studios/StudioTagger.tsx | 9 +++------ ui/v2.5/src/core/config.ts | 3 +++ 6 files changed, 33 insertions(+), 24 deletions(-) create mode 100644 ui/v2.5/src/components/Tagger/config.ts diff --git a/ui/v2.5/src/components/Tagger/config.ts b/ui/v2.5/src/components/Tagger/config.ts new file mode 100644 index 00000000000..78515f550f6 --- /dev/null +++ b/ui/v2.5/src/components/Tagger/config.ts @@ -0,0 +1,20 @@ +import { useCallback, useContext } from "react"; +import { ConfigurationContext } from "src/hooks/Config"; +import { initialConfig, ITaggerConfig } from "./constants"; +import { useConfigureUISetting } from "src/core/StashService"; + +export function useTaggerConfig() { + const { configuration: stashConfig } = useContext(ConfigurationContext); + const [saveUISetting] = useConfigureUISetting(); + + const config = stashConfig?.ui.taggerConfig ?? initialConfig; + + const setConfig = useCallback( + (c: ITaggerConfig) => { + saveUISetting({ variables: { key: "taggerConfig", value: c } }); + }, + [saveUISetting] + ); + + return { config, setConfig }; +} diff --git a/ui/v2.5/src/components/Tagger/constants.ts b/ui/v2.5/src/components/Tagger/constants.ts index cecbdeb1b81..b142316ce14 100644 --- a/ui/v2.5/src/components/Tagger/constants.ts +++ b/ui/v2.5/src/components/Tagger/constants.ts @@ -11,7 +11,6 @@ export interface ITaggerSource { supportSceneFragment?: boolean; } -export const LOCAL_FORAGE_KEY = "tagger"; export const DEFAULT_BLACKLIST = [ "\\sXXX\\s", "1080p", diff --git a/ui/v2.5/src/components/Tagger/context.tsx b/ui/v2.5/src/components/Tagger/context.tsx index 832d9335999..dc35208c5f2 100644 --- a/ui/v2.5/src/components/Tagger/context.tsx +++ b/ui/v2.5/src/components/Tagger/context.tsx @@ -1,9 +1,5 @@ import React, { useState, useEffect, useRef } from "react"; -import { - initialConfig, - ITaggerConfig, - LOCAL_FORAGE_KEY, -} from "src/components/Tagger/constants"; +import { initialConfig, ITaggerConfig } from "src/components/Tagger/constants"; import * as GQL from "src/core/generated-graphql"; import { queryFindPerformer, @@ -20,12 +16,12 @@ import { useStudioUpdate, useTagCreate, } from "src/core/StashService"; -import { useLocalForage } from "src/hooks/LocalForage"; import { useToast } from "src/hooks/Toast"; import { ConfigurationContext } from "src/hooks/Config"; import { ITaggerSource, SCRAPER_PREFIX, STASH_BOX_PREFIX } from "./constants"; import { errorToString } from "src/utils"; import { mergeStudioStashIDs } from "./utils"; +import { useTaggerConfig } from "./config"; export interface ITaggerContextState { config: ITaggerConfig; @@ -110,11 +106,6 @@ export interface ISceneQueryResult { } export const TaggerContext: React.FC = ({ children }) => { - const [{ data: config }, setConfig] = useLocalForage( - LOCAL_FORAGE_KEY, - initialConfig - ); - const [loading, setLoading] = useState(false); const [loadingMulti, setLoadingMulti] = useState(false); const [sources, setSources] = useState([]); @@ -127,6 +118,8 @@ export const TaggerContext: React.FC = ({ children }) => { const stopping = useRef(false); const { configuration: stashConfig } = React.useContext(ConfigurationContext); + const { config, setConfig } = useTaggerConfig(); + const Scrapers = useListSceneScrapers(); const Toast = useToast(); diff --git a/ui/v2.5/src/components/Tagger/performers/PerformerTagger.tsx b/ui/v2.5/src/components/Tagger/performers/PerformerTagger.tsx index 311d8007ad3..f0c87ff5723 100755 --- a/ui/v2.5/src/components/Tagger/performers/PerformerTagger.tsx +++ b/ui/v2.5/src/components/Tagger/performers/PerformerTagger.tsx @@ -3,7 +3,6 @@ import { Button, Card, Form, InputGroup, ProgressBar } from "react-bootstrap"; import { FormattedMessage, useIntl } from "react-intl"; import { Link } from "react-router-dom"; import { HashLink } from "react-router-hash-link"; -import { useLocalForage } from "src/hooks/LocalForage"; import * as GQL from "src/core/generated-graphql"; import { LoadingIndicator } from "src/components/Shared/LoadingIndicator"; @@ -21,12 +20,13 @@ import { ConfigurationContext } from "src/hooks/Config"; import StashSearchResult from "./StashSearchResult"; import PerformerConfig from "./Config"; -import { LOCAL_FORAGE_KEY, ITaggerConfig, initialConfig } from "../constants"; +import { ITaggerConfig } from "../constants"; import PerformerModal from "../PerformerModal"; import { useUpdatePerformer } from "../queries"; import { faStar, faTags } from "@fortawesome/free-solid-svg-icons"; import { mergeStashIDs } from "src/utils/stashbox"; import { ExternalLink } from "src/components/Shared/ExternalLink"; +import { useTaggerConfig } from "../config"; type JobFragment = Pick< GQL.Job, @@ -621,10 +621,7 @@ export const PerformerTagger: React.FC = ({ performers }) => { const jobsSubscribe = useJobsSubscribe(); const intl = useIntl(); const { configuration: stashConfig } = React.useContext(ConfigurationContext); - const [{ data: config }, setConfig] = useLocalForage( - LOCAL_FORAGE_KEY, - initialConfig - ); + const { config, setConfig } = useTaggerConfig(); const [showConfig, setShowConfig] = useState(false); const [showManual, setShowManual] = useState(false); diff --git a/ui/v2.5/src/components/Tagger/studios/StudioTagger.tsx b/ui/v2.5/src/components/Tagger/studios/StudioTagger.tsx index 41a5250c986..b8fbefdb57a 100644 --- a/ui/v2.5/src/components/Tagger/studios/StudioTagger.tsx +++ b/ui/v2.5/src/components/Tagger/studios/StudioTagger.tsx @@ -3,7 +3,6 @@ import { Button, Card, Form, InputGroup, ProgressBar } from "react-bootstrap"; import { FormattedMessage, useIntl } from "react-intl"; import { Link } from "react-router-dom"; import { HashLink } from "react-router-hash-link"; -import { useLocalForage } from "src/hooks/LocalForage"; import * as GQL from "src/core/generated-graphql"; import { LoadingIndicator } from "src/components/Shared/LoadingIndicator"; @@ -22,13 +21,14 @@ import { ConfigurationContext } from "src/hooks/Config"; import StashSearchResult from "./StashSearchResult"; import StudioConfig from "./Config"; -import { LOCAL_FORAGE_KEY, ITaggerConfig, initialConfig } from "../constants"; +import { ITaggerConfig } from "../constants"; import StudioModal from "../scenes/StudioModal"; import { useUpdateStudio } from "../queries"; import { apolloError } from "src/utils"; import { faStar, faTags } from "@fortawesome/free-solid-svg-icons"; import { ExternalLink } from "src/components/Shared/ExternalLink"; import { mergeStudioStashIDs } from "../utils"; +import { useTaggerConfig } from "../config"; type JobFragment = Pick< GQL.Job, @@ -670,10 +670,7 @@ export const StudioTagger: React.FC = ({ studios }) => { const jobsSubscribe = useJobsSubscribe(); const intl = useIntl(); const { configuration: stashConfig } = React.useContext(ConfigurationContext); - const [{ data: config }, setConfig] = useLocalForage( - LOCAL_FORAGE_KEY, - initialConfig - ); + const { config, setConfig } = useTaggerConfig(); const [showConfig, setShowConfig] = useState(false); const [showManual, setShowManual] = useState(false); diff --git a/ui/v2.5/src/core/config.ts b/ui/v2.5/src/core/config.ts index 213d8c11340..1b85ebe6dcb 100644 --- a/ui/v2.5/src/core/config.ts +++ b/ui/v2.5/src/core/config.ts @@ -8,6 +8,7 @@ import { SortDirectionEnum, } from "./generated-graphql"; import { View } from "src/components/List/views"; +import { ITaggerConfig } from "src/components/Tagger/constants"; // NOTE: double capitals aren't converted correctly in the backend @@ -97,6 +98,8 @@ export interface IUIConfig { taskDefaults?: Record; defaultFilters?: DefaultFilters; + + taggerConfig?: ITaggerConfig; } export function getFrontPageContent( From 78f5acab3132dbdb3f0e4f8086b07140b2918135 Mon Sep 17 00:00:00 2001 From: WithoutPants <53250216+WithoutPants@users.noreply.github.com> Date: Mon, 26 Aug 2024 10:39:35 +1000 Subject: [PATCH 2/3] Show males and set tags by default --- ui/v2.5/src/components/Tagger/constants.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ui/v2.5/src/components/Tagger/constants.ts b/ui/v2.5/src/components/Tagger/constants.ts index b142316ce14..55cc5cb1c5d 100644 --- a/ui/v2.5/src/components/Tagger/constants.ts +++ b/ui/v2.5/src/components/Tagger/constants.ts @@ -27,10 +27,10 @@ export const DEFAULT_EXCLUDED_STUDIO_FIELDS = ["name"]; export const initialConfig: ITaggerConfig = { blacklist: DEFAULT_BLACKLIST, - showMales: false, + showMales: true, mode: "auto", setCoverImage: true, - setTags: false, + setTags: true, tagOperation: "merge", fingerprintQueue: {}, excludedPerformerFields: DEFAULT_EXCLUDED_PERFORMER_FIELDS, From 4dc2ad307aeae4d153dc8ef353d3876587ee39e5 Mon Sep 17 00:00:00 2001 From: WithoutPants <53250216+WithoutPants@users.noreply.github.com> Date: Mon, 26 Aug 2024 10:52:52 +1000 Subject: [PATCH 3/3] Add release note --- ui/v2.5/src/docs/en/ReleaseNotes/index.ts | 6 ++++++ ui/v2.5/src/docs/en/ReleaseNotes/v0270.md | 1 + 2 files changed, 7 insertions(+) create mode 100644 ui/v2.5/src/docs/en/ReleaseNotes/v0270.md diff --git a/ui/v2.5/src/docs/en/ReleaseNotes/index.ts b/ui/v2.5/src/docs/en/ReleaseNotes/index.ts index c3018eb1546..8e2f503d4dc 100644 --- a/ui/v2.5/src/docs/en/ReleaseNotes/index.ts +++ b/ui/v2.5/src/docs/en/ReleaseNotes/index.ts @@ -3,6 +3,7 @@ import v0200 from "./v0200.md"; import v0240 from "./v0240.md"; import v0250 from "./v0250.md"; import v0260 from "./v0260.md"; +import v0270 from "./v0270.md"; export interface IReleaseNotes { // handle should be in the form of YYYYMMDD @@ -12,6 +13,11 @@ export interface IReleaseNotes { } export const releaseNotes: IReleaseNotes[] = [ + { + date: 20240826, + version: "v0.27.0", + content: v0270, + }, { date: 20240510, version: "v0.26.0", diff --git a/ui/v2.5/src/docs/en/ReleaseNotes/v0270.md b/ui/v2.5/src/docs/en/ReleaseNotes/v0270.md new file mode 100644 index 00000000000..a8e45a47b18 --- /dev/null +++ b/ui/v2.5/src/docs/en/ReleaseNotes/v0270.md @@ -0,0 +1 @@ +Tagger settings have been reset, but are now persisted between browser sessions. `Show male performers` and `Set Tags` are now defaulted to true. Please verify your settings before using the Tagger. \ No newline at end of file