From 86b140120a53999e508a5c7c8dc0ae152b920f71 Mon Sep 17 00:00:00 2001 From: KennyG Date: Wed, 8 Apr 2026 11:48:20 -0400 Subject: [PATCH 1/3] Add SmartResolve plugin for duplicate-checker workflow. Introduce SmartResolve with rule-based scene selection, protection/sync safeguards, in-row sync tooling, and documented settings for tuning Smart Resolve behavior. Made-with: Cursor --- plugins/SmartResolve/README.md | 107 + plugins/SmartResolve/SmartResolve.css | 387 ++++ plugins/SmartResolve/SmartResolve.js | 2863 +++++++++++++++++++++++++ plugins/SmartResolve/SmartResolve.yml | 96 + plugins/SmartResolve/about.png | Bin 0 -> 227832 bytes 5 files changed, 3453 insertions(+) create mode 100644 plugins/SmartResolve/README.md create mode 100644 plugins/SmartResolve/SmartResolve.css create mode 100644 plugins/SmartResolve/SmartResolve.js create mode 100644 plugins/SmartResolve/SmartResolve.yml create mode 100644 plugins/SmartResolve/about.png diff --git a/plugins/SmartResolve/README.md b/plugins/SmartResolve/README.md new file mode 100644 index 00000000..d5263644 --- /dev/null +++ b/plugins/SmartResolve/README.md @@ -0,0 +1,107 @@ +# Smart Resolve + +UI plugin for Stash’s **Scene Duplicate Checker** (`Settings → Tools → Scene Duplicate Checker`). + +## What it does + +1. **Smart Resolve analysis/tagging** — Adds `Select Smart Resolve` to Stash’s native **Select Options** menu and annotates duplicate rows with reason text plus sync recommendations. +2. **Row tools** — Adds per-row **Sync data** / **Sync rec.** buttons and stash ID badges in the scene details icon row. +3. **Safe selection** — Auto-selects delete candidates only when rules say it is safe; unresolved/sync-required sets are left unchecked. + +## Smart Resolve rule flow + +*Goal:* Identify a single candidate keeper regardless of initial candidate scene count. + +Rules run per each duplicate group on the page. + +1. **Determine a primary keep candidate** + - Process each rule in order. + - Any scene which is deficient of the identified criteria level is eliminated from being the potential keeper and any remaining tied survivors are evaluated as the next sub-step. + - When a sub-step leaves only one file as the potential keeper, move to step 2. + - For any step where the value is not known or null, assume 0 for this phase + - Store step result as selection reason. + - Rules 1-13 are toggleable via plugin settings; rule 14 remains always-on, deterministic fallback. + 1) Prefer the scene with the greatest total pixel resolution (product of x and y, 1920x1080=2073600) + - Apply a 1% pixel-area tolerance: candidates within 1% of the top area are treated as tied for this step. + 2) Prefer the scene with the greatest framerate + 3) Prefer the scene with the better codec (AV1 > H265 > H264 > Others) + 3b) Prefer candidates whose primary file path includes `upgrade` (toggleable) + 4) Prefer the scene with greater duration + 5) Prefer the scene with smaller size (unless file name includes `upgrade`) + - Files with the word `upgrade` cannot be eliminated from candidacy as per having a larger file size. + - Apply file-size tolerance when eliminating larger files: allow `max(1MB, 1% of min file size)` above the smallest file size. + - In a multi-file scenario, files larger than `min + tolerance` may be eliminated (unless `upgrade` token applies). + 6) Prefer the scene with an older scene date (2 day tollerance) + 7) Prefer the scene with more groups + 8) Prefer the scene with stashID + 9) Prefer the scene with more performers + 10) Prefer the scene with markers + 11) Prefer the scene with more tags + 12) Prefer the scene with LESS associated files + 13) Prefer the scene with more non-null metadata elements (title, studio_code, urls, date, director, galleries, studio, performers, groups, tags, details) + 14) Final deterministic tiebreaker, the scene with a lower scene_id +2. **Evaluate each non-keeper iteratively to prevent data loss** + Process each scene and each rule to determine status: + ``` + markForDeletion: (boolean) + markParentForSync: (boolean) + exceptions: ([array](string)) + ``` + Exception rules (any of these will trigger markForDeletion=false) + - Protection rules a-f are toggleable via plugin settings. + a) Protect O-count: O-count scenes should never be marked for deletion + b) Protect Group associations: Only mark for deletion if the same or more group information is attached to the primary candidate (i.e. k.groups{id,index} contains all (n.groups{id,index}) + - null allows a match with only other null + - null does not match a non-null + - Scenes may be members of multiple groups. A primary source (k) must replicate all non-keeper (n) sources to not have an exception + - Miss-matched scenes should be flagged according to reason message and marked for manual resolution + c) Protect performer mismatch by ID (markParentForSync=true) + - If non-keeper has any performer ID not present on keeper, trigger exception + - Only identical performer ID sets avoid this exception + d) Protect tag loss >1 for non-stash'd scenes (markParentForSync=true) + e) Protect older dates + if K.date > n.date (markParentForSync=true) + if K.date == null && n.date != null (markParentForSync=true) + if K.date != null && n.date == null (no action) + f) Protect scenes tagged with "Ignore:Smart Resolve" (case-insensitive); never auto-delete these scenes + +3. **Generate decision reason (`reasonAgainst`)** + - Generate message from decision code + - If exception code array is not empty, expand message. Block marking, recommend sync. + - row button becomes **Sync rec.** + - unresolved count increments + - smart auto-selection skips that set + +Notes: +A primary file is determined, then we determine if non-primary needs to be protected from loss. The primary file is never changed mid-analysis. Exceptions do not change the primary file, only protect loss. + +## Usage + +1. Install the plugin folder under your Stash plugins directory and enable it in **Settings → Plugins**. +2. Open the **Scene Duplicate Checker**. +3. Open **Select Options** and click **Select Smart Resolve**. +4. Review unresolved/sync-rec rows (`Sync rec.` buttons and unresolved counter). +5. Use row **Sync data** where recommended, then re-run Smart Resolve. +6. Use Stash’s native Delete/Merge actions on remaining selected rows. + +Optional setting: **After Sync, mark source scenes for deletion** — default for the “check sources after sync” checkbox in the Sync modal. + +## Settings UI + +![Smart Resolve settings](about.png) + +## Limits + +- Rules evaluate **only visible duplicate groups on the current page**. Pagination and page size can change outcomes seen in a single run. +- Any missing/unknown criterion values are normalized to `0` during candidate selection (line 20 behavior). This preserves determinism but can favor records with more populated metadata fields. +- Step 1 is a strict elimination pipeline. Once a scene is eliminated by an earlier criterion, later criteria do not reintroduce it. +- The `upgrade` filename exception is a string heuristic. It is not case-sensitive. This step is not expected to be a major factor, but creates an easy way to work around the plugin. +- Group protection depends on `{group.id, scene_index}` containment semantics; mismatches are expected to force manual/sync resolution. +- Date protection assumes parseable comparable date values. Stash provides some date parse semantics. However all null dates should be assumed to be the last date of any incomplete window. (i.e. 2020 -> 2020-12-31, 2020-06 -> 2020-06-30) Null, Invalid, or unparseable values should be treated as 2999-12-31 by implementation. +- `markParentForSync` and `exceptions` are structured outputs in this spec, but UI sync-rec indicators must be wired to those flags in implementation. +- This flow is designed for deterministic outcomes, not probabilistic ranking; tie-break behavior is intentionally resolved by lower `scene_id`. +- Sync actions are `sceneUpdate`-based (metadata transfer), not full `sceneMerge`; scene IDs remain separate after sync. + +## Repository + +Maintained in [Stash-KennyG/CommunityScripts](https://github.com/Stash-KennyG/CommunityScripts). diff --git a/plugins/SmartResolve/SmartResolve.css b/plugins/SmartResolve/SmartResolve.css new file mode 100644 index 00000000..06e7e782 --- /dev/null +++ b/plugins/SmartResolve/SmartResolve.css @@ -0,0 +1,387 @@ +#duplicate-resolver-toolbar { + margin: 0.75rem 0 1rem; + padding: 0.75rem 1rem; + background: var(--bs-secondary-bg, rgba(0, 0, 0, 0.15)); + border-radius: 0.25rem; + border: 1px solid var(--bs-border-color, rgba(255, 255, 255, 0.12)); +} + +#duplicate-resolver-toolbar .dr-toolbar-title { + font-weight: 600; + margin-bottom: 0.5rem; +} + +#duplicate-resolver-toolbar .dr-btn-row { + display: flex; + flex-wrap: wrap; + gap: 0.5rem; + align-items: center; + margin-bottom: 0.35rem; +} + +#duplicate-resolver-toolbar .dr-btn-row:empty { + display: none; + margin: 0; +} + +#scene-duplicate-checker .dr-core-actions { + display: inline-flex; + gap: 0.35rem; + align-items: center; + margin-left: 0.4rem; +} + +#scene-duplicate-checker .dr-processing-indicator { + display: inline-flex; + align-items: center; + gap: 0.35rem; + color: var(--bs-body-color, #d7dbe0); + font-size: 0.75rem; + line-height: 1; +} + +#scene-duplicate-checker .dr-processing-spinner { + width: 0.85rem; + height: 0.85rem; + border: 2px solid rgba(255, 255, 255, 0.25); + border-top-color: var(--bs-info, #7cc7ff); + border-radius: 50%; + animation: dr-spin 0.8s linear infinite; +} + +#scene-duplicate-checker .dr-processing-bar { + width: 80px; + height: 8px; + overflow: hidden; + border-radius: 999px; + background: rgba(255, 255, 255, 0.18); +} + +#scene-duplicate-checker .dr-processing-bar-fill { + display: block; + width: 40px; + height: 100%; + border-radius: 999px; + background: linear-gradient( + 90deg, + rgba(124, 199, 255, 0.2) 0%, + rgba(124, 199, 255, 0.95) 50%, + rgba(124, 199, 255, 0.2) 100% + ); + animation: dr-progress-slide 1s ease-in-out infinite; +} + +@keyframes dr-spin { + from { + transform: rotate(0deg); + } + to { + transform: rotate(360deg); + } +} + +@keyframes dr-progress-slide { + 0% { + transform: translateX(-40px); + } + 100% { + transform: translateX(80px); + } +} + +/* Keep duplicate rows compact and prevent action/icon wrapping. */ +#scene-duplicate-checker table.duplicate-checker-table td.scene-details .btn-group { + flex-wrap: nowrap !important; +} + +#scene-duplicate-checker table.duplicate-checker-table td.scene-details, +#scene-duplicate-checker table.duplicate-checker-table td:last-child { + white-space: nowrap; +} + +#scene-duplicate-checker .dr-inline-reason { + font-size: calc(1em + 2pt); + color: var(--bs-warning, #ffd54a); +} + +#scene-duplicate-checker table.duplicate-checker-table tbody tr.dr-unresolved-highlight { + background: rgba(255, 0, 0, 0.08) !important; +} + +#scene-duplicate-checker .dr-stashid-btn { + display: inline-flex !important; + align-items: center; + gap: 0.3rem; +} + +#scene-duplicate-checker .dr-stashid-btn.dr-stashid-btn-link { + cursor: pointer; +} + +#scene-duplicate-checker .dr-stashid-box-icon { + width: 0.95em; + height: 0.95em; + display: inline-block; + vertical-align: middle; +} + +#duplicate-resolver-toolbar .dr-drawer { + margin-top: 0.15rem; +} + +#duplicate-resolver-toolbar .dr-drawer-toggle { + display: inline-flex; + align-items: center; + gap: 0.35rem; + padding: 0.15rem 0 !important; + font-size: 0.875rem; + text-decoration: none; + border: 0; + box-shadow: none; +} + +#duplicate-resolver-toolbar .dr-drawer-toggle:hover, +#duplicate-resolver-toolbar .dr-drawer-toggle:focus { + text-decoration: underline; +} + +#duplicate-resolver-toolbar .dr-drawer-panel { + margin-top: 0.5rem; + padding-top: 0.5rem; + border-top: 1px solid var(--bs-border-color, rgba(255, 255, 255, 0.12)); +} + +#duplicate-resolver-toolbar .dr-drawer-toolbar { + margin-bottom: 0.5rem; +} + +#duplicate-resolver-toolbar .dr-preview { + font-size: 0.875rem; + max-height: 14rem; + overflow: auto; + white-space: pre-wrap; + margin: 0; + padding: 0.5rem; + background: var(--bs-body-bg, #1a1a1a); + border-radius: 0.25rem; +} + +#duplicate-resolver-toolbar .dr-preview .dr-match-link { + color: var(--bs-info, #7cc7ff); + text-decoration: underline; + cursor: pointer; +} + +.duplicate-resolver-sync-btn { + margin-left: 0.35rem !important; +} + +#duplicate-resolver-modal-overlay { + position: fixed; + inset: 0; + background: rgba(0, 0, 0, 0.6); + z-index: 1050; + display: flex; + align-items: center; + justify-content: center; + padding: 1rem; +} + +#duplicate-resolver-modal-overlay .dr-modal { + background: var(--bs-secondary-bg, #30404d); + color: var(--bs-body-color, #eee); + border: 1px solid var(--bs-border-color, rgba(255, 255, 255, 0.18)); + border-radius: 0.35rem; + max-width: 60rem; + width: 100%; + max-height: 90vh; + overflow: auto; + padding: 1rem 1.25rem; +} + +#duplicate-resolver-modal-overlay h3 { + margin-top: 0; + font-size: 1.1rem; +} + +#duplicate-resolver-modal-overlay .dr-modal-header { + align-items: center; + display: flex; + gap: 0.45rem; + margin: -1rem -1.25rem 0.75rem; + padding: 0.7rem 1rem; +} + +#duplicate-resolver-modal-overlay .dr-modal-options { + margin: 0.75rem 0; +} + +#duplicate-resolver-modal-overlay .dr-modal-options label { + display: block; + margin: 0.25rem 0; + cursor: pointer; +} + +#duplicate-resolver-modal-overlay .dr-field-title { + display: block; + margin: 0.1rem 0 0.35rem; + font-size: 0.88rem; + font-weight: 600; + line-height: 1.15; +} + +#duplicate-resolver-modal-overlay .dr-opt-hint { + font-size: 0.82rem; + opacity: 0.9; + font-weight: 400; +} + +#duplicate-resolver-modal-overlay .dr-sync-compare { + display: grid; + grid-template-columns: 1fr 1fr; + gap: 0.75rem; + margin: 0.75rem 0 1rem; +} + +#duplicate-resolver-modal-overlay .dr-sync-compare .dr-col { + background: var(--bs-secondary-bg, rgba(255, 255, 255, 0.03)); + border: 1px solid var(--bs-border-color, rgba(255, 255, 255, 0.08)); + border-radius: 0.25rem; + padding: 0.5rem 0.6rem; +} + +#duplicate-resolver-modal-overlay .dr-sync-compare h4 { + margin: 0 0 0.4rem; + font-size: 1rem; + font-weight: 700; + letter-spacing: 0.01em; +} + +#duplicate-resolver-modal-overlay .dr-sync-compare p { + margin: 0; + font-size: 0.82rem; + opacity: 0.9; +} + +#duplicate-resolver-modal-overlay .dr-field-row { + border-top: 1px solid var(--bs-border-color, rgba(255, 255, 255, 0.08)); + padding-top: 0.55rem; + margin-top: 0.55rem; +} + +#duplicate-resolver-modal-overlay .dr-field-desc { + font-size: 0.78rem; + opacity: 0.85; + margin: 0.15rem 0 0.35rem; +} + +#duplicate-resolver-modal-overlay .dr-field-grid { + display: grid; + grid-template-columns: 1fr 1fr; + gap: 0.6rem; +} + +#duplicate-resolver-modal-overlay .dr-field-col { + background: transparent; + border-radius: 0.18rem; + padding: 0.35rem 0.45rem; + min-height: 3rem; + height: auto; +} + +#duplicate-resolver-modal-overlay .dr-list-control { + width: 100%; +} + +#duplicate-resolver-modal-overlay .dr-list-control .input-group + .input-group { + margin-top: 0.3rem; +} + +#duplicate-resolver-modal-overlay .dr-chip-list { + display: flex; + flex-wrap: wrap; + gap: 0.28rem; +} + +#duplicate-resolver-modal-overlay .dr-chip { + max-width: 100%; + padding: 0.10rem 0.35rem; + border-radius: 0.14rem; + line-height: 1.15; + font-size: 0.84rem; + font-weight: 400; + border: 0; + background-color: #b9c4cd; + color: #21313f; + white-space: nowrap; + text-overflow: ellipsis; + overflow: hidden; +} + +#duplicate-resolver-modal-overlay .dr-field-col .input-group { + align-items: stretch; +} + +#duplicate-resolver-modal-overlay .dr-field-col .input-group .dr-list-control { + flex: 1 1 auto; +} + +#duplicate-resolver-modal-overlay .dr-field-col .form-control, +#duplicate-resolver-modal-overlay .dr-field-col .scene-description { + min-height: calc(1.5em + 0.75rem + 2px); +} + +#duplicate-resolver-modal-overlay .dr-empty { + font-size: 0.74rem; + opacity: 0.75; +} + +#duplicate-resolver-modal-overlay .dr-modal-actions { + display: flex; + gap: 0.5rem; + justify-content: flex-end; + margin-top: 1rem; +} + +#duplicate-resolver-modal-overlay .dr-field-col .input-group-prepend .btn { + min-width: 2.2rem; +} + +#duplicate-resolver-modal-overlay .dr-cover-value { + min-width: 0; +} + +#duplicate-resolver-modal-overlay .dr-cover-frame { + background: rgba(0, 0, 0, 0.2); + border-radius: 0.18rem; + padding: 0.35rem; + text-align: center; +} + +#duplicate-resolver-modal-overlay .dr-cover-thumb { + display: block; + max-height: 180px; + max-width: 100%; + width: auto; + height: auto; + margin: 0 auto; + object-fit: contain; + border-radius: 0.12rem; +} + +#duplicate-resolver-modal-overlay .dr-cover-caption { + font-size: 0.72rem; + opacity: 0.8; + margin-top: 0.3rem; + text-align: center; +} + +#duplicate-resolver-modal-overlay .dr-cover-placeholder { + font-size: 0.78rem; + opacity: 0.75; + padding: 0.35rem 0.25rem; + margin-bottom: 0.25rem; + border: 1px dashed rgba(255, 255, 255, 0.2); + border-radius: 0.12rem; + text-align: center; +} diff --git a/plugins/SmartResolve/SmartResolve.js b/plugins/SmartResolve/SmartResolve.js new file mode 100644 index 00000000..90cb0875 --- /dev/null +++ b/plugins/SmartResolve/SmartResolve.js @@ -0,0 +1,2863 @@ +/** + * SmartResolve — Scene Duplicate Checker helper. + * Smart Select: rule-based checks on Stash’s native row checkboxes. + * Sync Data: mergeless sceneUpdate merge from sibling duplicates. + */ +(function () { + "use strict"; + + var ROUTE = "/sceneDuplicateChecker"; + var ROOT_ID = "scene-duplicate-checker"; + var PLUGIN_ID = "SmartResolve"; + + function defaultRuleToggles() { + return { + step_01_total_pixels: true, + step_02_framerate: true, + step_03_codec: true, + step_upgrade_token: true, + step_04_duration: true, + step_05_smaller_size: true, + step_06_older_date: true, + step_07_more_groups: true, + step_08_has_stashid: true, + step_09_more_performers: true, + step_10_more_markers: true, + step_11_more_tags: true, + step_12_less_associated_files: true, + step_13_more_metadata_cardinality: true, + }; + } + + function defaultProtectionToggles() { + return { + protect_o_count: true, + protect_group_association: true, + protect_performer_mismatch: true, + protect_tag_loss_gt_1_non_stashed: true, + protect_older_date: true, + protect_ignore_smart_resolve_tag: true, + }; + } + + var state = { + groups: null, + lastPlan: null, + loading: false, + autoCheckDefault: true, + applyingDomEnhancements: false, + lastBadgePageKey: "", + ruleToggles: defaultRuleToggles(), + protectionToggles: defaultProtectionToggles(), + /** True after user runs Select Smart Resolve — sync/other refreshes preserve UI when set. */ + smartResolveUiActive: false, + observer: null, + attachedRoot: null, + retryTimer: null, + }; + + function parseParams() { + var q = new URLSearchParams(window.location.search); + return { + page: Math.max(1, parseInt(q.get("page") || "1", 10) || 1), + size: Math.max(1, parseInt(q.get("size") || "20", 10) || 20), + distance: parseInt(q.get("distance") || "0", 10) || 0, + durationDiff: parseFloat(q.get("durationDiff") || "1"), + }; + } + + /** Same green/red banners Stash uses for “Updated scene” etc. (see hooks/Toast.tsx). */ + var stashInlineNotifyRef = null; + var stashInlineNotifyBridgeInstalled = false; + + /** Must be a stable function identity — defining inside patch.after() remounts every App render and breaks the UI. */ + function DuplicateResolverStashNotifyMount() { + var P = window.PluginApi; + var R = P.React; + var t = P.hooks.useToast(); + R.useEffect( + function () { + stashInlineNotifyRef = t; + return function () { + stashInlineNotifyRef = null; + }; + }, + [t] + ); + return null; + } + + function installStashInlineNotifyBridge() { + if (stashInlineNotifyBridgeInstalled || typeof window.PluginApi === "undefined") return; + var P = window.PluginApi; + if (!P.patch || !P.patch.after || !P.React || !P.hooks || !P.hooks.useToast) return; + stashInlineNotifyBridgeInstalled = true; + P.patch.after("App", function () { + var R = P.React; + /** Patch passes afterFn(...originalArgs, renderedTree). Last arg is always App output; arity can be 1 if a before() cleared args. */ + var prevTree = arguments[arguments.length - 1]; + return R.createElement( + R.Fragment, + null, + R.createElement(DuplicateResolverStashNotifyMount, null), + prevTree + ); + }); + } + + function notifyStashSuccess(message) { + if (stashInlineNotifyRef) stashInlineNotifyRef.success(message); + else window.alert(message); + } + + function notifyStashError(err) { + if (stashInlineNotifyRef) stashInlineNotifyRef.error(err); + else + window.alert( + err && err.message ? err.message : typeof err === "string" ? err : String(err) + ); + } + + function notifyStashWarning(message) { + if (stashInlineNotifyRef && stashInlineNotifyRef.toast) + stashInlineNotifyRef.toast({ content: message, variant: "warning" }); + else window.alert(message); + } + + async function gql(query, variables) { + var res = await fetch("/graphql", { + method: "POST", + headers: { "Content-Type": "application/json" }, + body: JSON.stringify({ query: query, variables: variables || {} }), + }); + var j = await res.json(); + if (j.errors && j.errors.length) + throw new Error(j.errors.map(function (e) { return e.message; }).join("; ")); + return j.data; + } + + var DUPLICATE_QUERY = + "query FindDuplicateScenesDr($distance: Int, $duration_diff: Float) {" + + " findDuplicateScenes(distance: $distance, duration_diff: $duration_diff) {" + + " id title code details director urls date rating100" + + " o_counter" + + " paths { screenshot }" + + " files { id path size width height video_codec bit_rate duration }" + + " scene_markers { id }" + + " studio { id name }" + + " tags { id name }" + + " performers { id name }" + + " groups { group { id name } scene_index }" + + " galleries { id title }" + + " stash_ids { endpoint stash_id }" + + " }" + + "}"; + + function groupTotalSize(group) { + return group.reduce(function (acc, s) { + return ( + acc + + (s.files || []).reduce(function (a, f) { + return a + (f.size || 0); + }, 0) + ); + }, 0); + } + + function sortGroupsLikeStash(groups) { + return groups.slice().sort(function (a, b) { + return groupTotalSize(b) - groupTotalSize(a); + }); + } + + function codecRank(codec) { + var c = (codec || "").toLowerCase(); + if (c.indexOf("av01") !== -1 || c.indexOf("av1") !== -1) return 5; + if (c.indexOf("hevc") !== -1 || c.indexOf("h265") !== -1) return 4; + if (c.indexOf("vp9") !== -1) return 3; + if (c.indexOf("h264") !== -1 || c.indexOf("avc") !== -1) return 2; + return 1; + } + + function primaryFile(scene) { + return (scene.files && scene.files[0]) || {}; + } + + function countSignals(scene) { + return { + tags: (scene.tags || []).length, + performers: (scene.performers || []).length, + groups: (scene.groups || []).length, + markers: (scene.scene_markers || []).length, + oCount: scene.o_counter || 0, + }; + } + + function isNearlySameDuration(a, b) { + var da = Math.max(0, a || 0); + var db = Math.max(0, b || 0); + if (!da || !db) return false; + var diff = Math.abs(da - db); + var max = Math.max(da, db); + return diff <= 2 || diff / max <= 0.02; + } + + function efficiencyWinner(a, b) { + var fa = primaryFile(a); + var fb = primaryFile(b); + var aPixels = (fa.width || 0) * (fa.height || 0); + var bPixels = (fb.width || 0) * (fb.height || 0); + if (!aPixels || !bPixels || aPixels !== bPixels) return null; + if (!isNearlySameDuration(fa.duration || 0, fb.duration || 0)) return null; + + var aCodec = codecRank(fa.video_codec); + var bCodec = codecRank(fb.video_codec); + if (aCodec === bCodec) return null; + + var aSize = fa.size || 0; + var bSize = fb.size || 0; + var aRate = fa.bit_rate || 0; + var bRate = fb.bit_rate || 0; + + var aMuchSmaller = !!(aSize && bSize && aSize <= bSize * 0.75); + var bMuchSmaller = !!(aSize && bSize && bSize <= aSize * 0.75); + var aLowerRate = !!(aRate && bRate && aRate <= bRate * 0.8); + var bLowerRate = !!(aRate && bRate && bRate <= aRate * 0.8); + + if (aCodec > bCodec && (aMuchSmaller || aLowerRate)) return "a"; + if (bCodec > aCodec && (bMuchSmaller || bLowerRate)) return "b"; + return null; + } + + // Returns "a" or "b" when one side is >= across all categories and > in at least one. + function unanimousCategoryWinner(a, b) { + var ka = countSignals(a); + var kb = countSignals(b); + // Tags are noisy/drift-prone; keep them out of decisive unanimity. + var keys = ["performers", "groups", "markers", "oCount"]; + var aGeAll = true; + var bGeAll = true; + var aGtAny = false; + var bGtAny = false; + keys.forEach(function (k) { + if (ka[k] < kb[k]) aGeAll = false; + if (kb[k] < ka[k]) bGeAll = false; + if (ka[k] > kb[k]) aGtAny = true; + if (kb[k] > ka[k]) bGtAny = true; + }); + if (aGeAll && aGtAny) return "a"; + if (bGeAll && bGtAny) return "b"; + return null; + } + + function compareKeeper(a, b) { + // O-count is a hard guard: never prefer deleting an O-count scene. + var oa = a.o_counter || 0; + var ob = b.o_counter || 0; + if (!!oa !== !!ob) return ob - oa; + + // Prefer the best source file first; metadata can be synced. + var af = primaryFile(a); + var bf = primaryFile(b); + var aPixels = (af.width || 0) * (af.height || 0); + var bPixels = (bf.width || 0) * (bf.height || 0); + if (aPixels !== bPixels) return bPixels - aPixels; + + // If one side clearly wins category-by-category, keep it. + var unanimous = unanimousCategoryWinner(a, b); + if (unanimous === "a") return -1; + if (unanimous === "b") return 1; + + var ga = (a.groups && a.groups.length) || 0; + var gb = (b.groups && b.groups.length) || 0; + if (ga !== gb) return gb - ga; + + var sa = (a.stash_ids && a.stash_ids.length) || 0; + var sb = (b.stash_ids && b.stash_ids.length) || 0; + if (sa !== sb) return sb - sa; + + // Prefer clearly better encoding efficiency at equivalent visual profile. + var eff = efficiencyWinner(a, b); + if (eff === "a") return -1; + if (eff === "b") return 1; + + var aCounts = countSignals(a); + var bCounts = countSignals(b); + if (aCounts.groups !== bCounts.groups) return bCounts.groups - aCounts.groups; + if (aCounts.performers !== bCounts.performers) return bCounts.performers - aCounts.performers; + if (aCounts.markers !== bCounts.markers) return bCounts.markers - aCounts.markers; + if (aCounts.tags !== bCounts.tags) return bCounts.tags - aCounts.tags; + + var fa = primaryFile(a); + var fb = primaryFile(b); + var aCodec = codecRank(fa.video_codec); + var bCodec = codecRank(fb.video_codec); + if (aCodec !== bCodec) return bCodec - aCodec; + + var pa = (fa.width || 0) * (fa.height || 0); + var pb = (fb.width || 0) * (fb.height || 0); + if (pa !== pb) return pb - pa; + + var za = fa.size || 0; + var zb = fb.size || 0; + if (za !== zb) return zb - za; + + return String(a.id).localeCompare(String(b.id)); + } + + function pickKeeper(group) { + return group.slice().sort(compareKeeper)[0]; + } + + function reasonAgainst(keeper, other) { + if (!keeper || !other) return "deterministic fallback"; + + function dataSignals(scene) { + return { + hasTitle: !!(scene.title && String(scene.title).trim()), + hasCode: !!(scene.code && String(scene.code).trim()), + hasDetails: !!(scene.details && String(scene.details).trim()), + hasDirector: !!(scene.director && String(scene.director).trim()), + hasDate: !!(scene.date && String(scene.date).trim()), + tagCount: (scene.tags || []).length, + performerCount: (scene.performers || []).length, + groupCount: (scene.groups || []).length, + stashIdCount: (scene.stash_ids || []).length, + urlCount: (scene.urls || []).length, + galleryCount: (scene.galleries || []).length, + hasStudio: !!(scene.studio && scene.studio.id), + }; + } + + function isSparse(sig) { + return ( + !sig.hasTitle && + !sig.hasCode && + !sig.hasDetails && + !sig.hasDirector && + !sig.hasDate && + sig.tagCount === 0 && + sig.performerCount === 0 && + sig.groupCount === 0 && + sig.stashIdCount === 0 && + sig.urlCount === 0 && + sig.galleryCount === 0 && + !sig.hasStudio + ); + } + + function groupIdSafe(g) { + return g && g.group && g.group.id != null ? String(g.group.id) : null; + } + + function groupSummary(scene) { + var groups = scene.groups || []; + var ids = groups + .map(function (g) { return groupIdSafe(g); }) + .filter(function (id) { return !!id; }); + var idxMap = new Map(); + groups.forEach(function (g) { + var id = groupIdSafe(g); + if (id) idxMap.set(id, g.scene_index); + }); + return { ids: ids, idxMap: idxMap }; + } + + function haveSameGroupSet(aSummary, bSummary) { + if (aSummary.ids.length !== bSummary.ids.length) return false; + var setB = new Set(bSummary.ids); + for (var i = 0; i < aSummary.ids.length; i++) { + if (!setB.has(aSummary.ids[i])) return false; + } + return true; + } + + function groupReasonPrefix() { + var kg = groupSummary(keeper); + var og = groupSummary(other); + if (!kg.ids.length && !og.ids.length) return ""; + if (!!kg.ids.length !== !!og.ids.length) { + return "Group presence differs"; + } + var overlap = kg.ids.filter(function (id) { return og.ids.indexOf(id) !== -1; }); + if (!overlap.length) return "Different groups"; + var details = overlap.map(function (id) { + var kIdx = kg.idxMap.get(id); + var oIdx = og.idxMap.get(id); + return "(" + id + "," + String(kIdx) + "/" + String(oIdx) + ")"; + }); + return "Same group(s) " + details.join(", "); + } + + function withGroupContext(msg) { + var ctx = groupReasonPrefix(); + return ctx ? ctx + ", " + msg : msg; + } + + var kSig = dataSignals(keeper); + var oSig = dataSignals(other); + var kCounts = countSignals(keeper); + var oCounts = countSignals(other); + var kg = groupSummary(keeper); + var og = groupSummary(other); + var kf = primaryFile(keeper); + var of = primaryFile(other); + var kPixels = (kf.width || 0) * (kf.height || 0); + var oPixels = (of.width || 0) * (of.height || 0); + + // Never auto-resolve by deleting a better source file. + if (oPixels > kPixels) { + return withGroupContext( + "duplicate has higher resolution (" + + (of.width || 0) + + "x" + + (of.height || 0) + + " vs " + + (kf.width || 0) + + "x" + + (kf.height || 0) + + "). Recommend synch data from duplicate." + ); + } + + // Keeper has substantive metadata while duplicate is sparse -> keep keeper. + if (!isSparse(kSig) && isSparse(oSig)) { + return ( + "Keep scene with data." + ); + } + + // Different group sets are a hard sync case to avoid losing group associations. + if (!haveSameGroupSet(kg, og)) { + return withGroupContext( + "different group associations. Recommend synch data from duplicate." + ); + } + + var kGroups = (keeper.groups || []).length; + var oGroups = (other.groups || []).length; + // Group cardinality differs -> keep group-richer scene, but sync to avoid loss. + if (kGroups !== oGroups) { + if (kGroups > oGroups) { + return "Keep Scene with Group Association."; + } + return "Duplicate has additional Group Association. Recommend synch data from duplicate."; + } + + var kStash = (keeper.stash_ids && keeper.stash_ids.length) || 0; + var oStash = (other.stash_ids && other.stash_ids.length) || 0; + // External IDs differ -> prefer scene with more confirmed IDs. + if (kStash !== oStash) { + return withGroupContext( + "keep scene with confirmed IDs while duplicate has fewer/none." + ); + } + + // One side has O-count and the other does not -> keep O-count anchor, sync remaining deltas. + if (!!kCounts.oCount !== !!oCounts.oCount) { + return withGroupContext( + "keep scene with O-count signal. Recommend synch data from duplicate." + ); + } + + // Both scenes are stashed. + // No discernable difference in metadata beyond tags + // Chosing scene with more tags. + var stashLinked = ((keeper.stash_ids || []).length + (other.stash_ids || []).length) > 0; + var highValueEqual = + kCounts.performers === oCounts.performers && + kCounts.groups === oCounts.groups && + kCounts.markers === oCounts.markers && + kCounts.oCount === oCounts.oCount; + // Both scenes are stashed and only tags differ -> de-prioritize tags noise, keep tag-richer scene. + if (stashLinked && highValueEqual && kCounts.tags !== oCounts.tags) { + return withGroupContext( + "All scenes stashed, tag-only difference; keep scene with more tags." + ); + } + + // Non-stashed variant of tag-only delta -> keep tag-richer scene. + if (highValueEqual && kCounts.tags !== oCounts.tags) { + return withGroupContext( + "tag-only difference; keep scene with more tags." + ); + } + + // No metadata signal separates them -> keeper came from deterministic ordering. + if ( + highValueEqual && + kCounts.tags === oCounts.tags + ) { + return withGroupContext( + "no meaningful metadata delta; deterministic keeper tie-break." + ); + } + + var effWinner = efficiencyWinner(keeper, other); + // Same visual profile but keeper is clearly more efficient codec/bitrate/size -> sync then delete duplicate. + if (effWinner === "a") { + return withGroupContext( + "codec/efficiency winner at equivalent resolution/duration. Recommend synch data from duplicate." + ); + } + // Duplicate is more efficient while current keeper remained selected by ordering -> sync recommended. + if (effWinner === "b") { + return withGroupContext( + "duplicate is codec/efficiency winner at equivalent resolution/duration. Recommend synch data from duplicate." + ); + } + + var unanimous = unanimousCategoryWinner(keeper, other); + // Keeper is >= duplicate across decisive categories -> safe keep decision. + if (unanimous === "a") { + return withGroupContext( + "unanimous category winner (tags/performers/groups/markers/o-count)." + ); + } + // Duplicate is unanimous winner, but keeper was chosen by upstream ordering -> sync before cleanup. + if (unanimous === "b") { + return withGroupContext( + "duplicate is unanimous category winner; keeper chosen by deterministic fallback. Recommend synch data from duplicate." + ); + } + + // Category split means potential data loss either way -> force sync recommendation. + return withGroupContext( + "category split (tags/performers/groups/markers/o-count). Recommend synch data from duplicate." + ); + } + + async function loadDuplicateGroups() { + var p = parseParams(); + var data = await gql(DUPLICATE_QUERY, { + distance: p.distance, + duration_diff: p.durationDiff, + }); + state.groups = sortGroupsLikeStash(data.findDuplicateScenes || []); + return state.groups; + } + + async function refreshPlanAndDecorations() { + var scrollY = typeof window !== "undefined" ? window.scrollY : 0; + await loadDuplicateGroups(); + state.lastPlan = buildPlan(); + renderInlineReasons(state.lastPlan); + renderSyncRecommendations(state.lastPlan); + if ( + state.smartResolveUiActive && + state.lastPlan && + state.lastPlan.entries && + state.lastPlan.entries.length + ) { + ensureMatchSetAnchors(); + renderPlanDetailsIntoDrawer(state.lastPlan); + updateUnresolvedButton(state.lastPlan, true); + setSmartResolveDetailsVisible(true, false); + } + if (typeof window !== "undefined") { + requestAnimationFrame(function () { + requestAnimationFrame(function () { + window.scrollTo(0, scrollY); + }); + }); + } + } + + function visibleGroups(groups) { + var p = parseParams(); + var start = (p.page - 1) * p.size; + return groups.slice(start, start + p.size); + } + + function parseDateForComparison(v) { + if (v == null) return new Date("2999-12-31T00:00:00Z").getTime(); + var s = String(v).trim(); + if (!s) return new Date("2999-12-31T00:00:00Z").getTime(); + if (/^\d{4}$/.test(s)) s = s + "-12-31"; + else if (/^\d{4}-\d{2}$/.test(s)) { + var y = parseInt(s.slice(0, 4), 10); + var m = parseInt(s.slice(5, 7), 10); + var lastDay = new Date(Date.UTC(y, m, 0)).getUTCDate(); + s = s + "-" + String(lastDay).padStart(2, "0"); + } + var t = Date.parse(s); + if (Number.isNaN(t)) return new Date("2999-12-31T00:00:00Z").getTime(); + return t; + } + + var EARLIER_DATE_BUFFER_MS = 36 * 60 * 60 * 1000; // 1.5 days + + function roundedDurationSeconds(v) { + var n = Number(v || 0) || 0; + return Math.round(n); + } + + function fileHasUpgradeToken(scene) { + var f = primaryFile(scene); + var p = String(f.path || "").toUpperCase(); + return p.indexOf("UPGRADE") !== -1; + } + + function metadataCardinality(scene) { + var score = 0; + function hasText(v) { + return !!(v != null && String(v).trim()); + } + if (hasText(scene.title)) score += 1; + if (hasText(scene.code)) score += 1; + if ((scene.urls || []).length) score += (scene.urls || []).length; + if (hasText(scene.date)) score += 1; + if (hasText(scene.director)) score += 1; + if ((scene.galleries || []).length) score += (scene.galleries || []).length; + if (scene.studio && scene.studio.id != null) score += 1; + if ((scene.performers || []).length) score += (scene.performers || []).length; + if ((scene.groups || []).length) score += (scene.groups || []).length; + if ((scene.tags || []).length) score += (scene.tags || []).length; + if (hasText(scene.details)) score += 1; + return score; + } + + function eliminateByMetric(candidates, metricFn, mode) { + if (!candidates.length) return candidates; + var vals = candidates.map(metricFn); + var target = mode === "min" ? Math.min.apply(null, vals) : Math.max.apply(null, vals); + return candidates.filter(function (s) { + return metricFn(s) === target; + }); + } + + function eliminateByMaxWithinPercent(candidates, metricFn, tolerancePercent) { + if (!candidates.length) return candidates; + var vals = candidates.map(metricFn); + var maxVal = Math.max.apply(null, vals); + if (maxVal <= 0) return candidates.slice(); + var tolerance = Math.max(0, Number(tolerancePercent || 0)) / 100; + var minAllowed = maxVal * (1 - tolerance); + return candidates.filter(function (s) { + return metricFn(s) >= minAllowed; + }); + } + + function eliminateByEarliestDateWithBuffer(candidates) { + if (!candidates.length) return candidates; + var vals = candidates.map(function (s) { + return parseDateForComparison(s.date); + }); + var minVal = Math.min.apply(null, vals); + return candidates.filter(function (s) { + return parseDateForComparison(s.date) <= minVal + EARLIER_DATE_BUFFER_MS; + }); + } + + function chooseKeeperBySpec(group) { + var candidates = group.slice(); + var decision = "step_14_scene_id"; + var toggles = state.ruleToggles || defaultRuleToggles(); + function enabled(key) { + return toggles[key] !== false; + } + function step(code, reducer) { + if (candidates.length <= 1) return; + var next = reducer(candidates); + if (next.length < candidates.length) { + decision = code; + } + candidates = next; + } + + if (enabled("step_01_total_pixels")) step("step_01_total_pixels", function (arr) { + return eliminateByMaxWithinPercent( + arr, + function (s) { + var f = primaryFile(s); + return (f.width || 0) * (f.height || 0); + }, + 1 + ); + }); + if (enabled("step_02_framerate")) step("step_02_framerate", function (arr) { + return eliminateByMetric( + arr, + function (s) { + var f = primaryFile(s); + return Number(f.frame_rate || f.framerate || 0) || 0; + }, + "max" + ); + }); + if (enabled("step_03_codec")) step("step_03_codec", function (arr) { + return eliminateByMetric( + arr, + function (s) { + return codecRank(primaryFile(s).video_codec); + }, + "max" + ); + }); + if (enabled("step_upgrade_token")) step("step_upgrade_token", function (arr) { + return eliminateByMetric( + arr, + function (s) { return fileHasUpgradeToken(s) ? 1 : 0; }, + "max" + ); + }); + if (enabled("step_04_duration")) step("step_04_duration", function (arr) { + return eliminateByMetric( + arr, + function (s) { + return roundedDurationSeconds(primaryFile(s).duration || 0); + }, + "max" + ); + }); + if (enabled("step_05_smaller_size")) step("step_05_smaller_size", function (arr) { + var minSize = Math.min.apply( + null, + arr.map(function (s) { return Number(primaryFile(s).size || 0) || 0; }) + ); + var sizeTolerance = Math.max(1024 * 1024, minSize * 0.01); + return arr.filter(function (s) { + var size = Number(primaryFile(s).size || 0) || 0; + return size <= minSize + sizeTolerance || fileHasUpgradeToken(s); + }); + }); + if (enabled("step_06_older_date")) step("step_06_older_date", function (arr) { + return eliminateByEarliestDateWithBuffer(arr); + }); + if (enabled("step_07_more_groups")) step("step_07_more_groups", function (arr) { + return eliminateByMetric(arr, function (s) { return (s.groups || []).length; }, "max"); + }); + if (enabled("step_08_has_stashid")) step("step_08_has_stashid", function (arr) { + return eliminateByMetric( + arr, + function (s) { return (s.stash_ids || []).length > 0 ? 1 : 0; }, + "max" + ); + }); + if (enabled("step_09_more_performers")) step("step_09_more_performers", function (arr) { + return eliminateByMetric(arr, function (s) { return (s.performers || []).length; }, "max"); + }); + if (enabled("step_10_more_markers")) step("step_10_more_markers", function (arr) { + return eliminateByMetric(arr, function (s) { return (s.scene_markers || []).length; }, "max"); + }); + if (enabled("step_11_more_tags")) step("step_11_more_tags", function (arr) { + return eliminateByMetric(arr, function (s) { return (s.tags || []).length; }, "max"); + }); + if (enabled("step_12_less_associated_files")) step("step_12_less_associated_files", function (arr) { + return eliminateByMetric(arr, function (s) { return (s.files || []).length; }, "min"); + }); + if (enabled("step_13_more_metadata_cardinality")) step("step_13_more_metadata_cardinality", function (arr) { + return eliminateByMetric(arr, metadataCardinality, "max"); + }); + // Step 14 is intentionally always on as deterministic fallback. + step("step_14_scene_id", function (arr) { + return eliminateByMetric( + arr, + function (s) { return parseInt(String(s.id), 10) || 0; }, + "min" + ); + }); + + var keeper = candidates[0] || group[0]; + return { keeper: keeper, decisionCode: decision }; + } + + function groupEntries(scene) { + return (scene.groups || []) + .map(function (g) { + if (!g || !g.group || g.group.id == null) return null; + return { + id: String(g.group.id), + index: g.scene_index == null ? null : Number(g.scene_index), + }; + }) + .filter(function (x) { return !!x; }); + } + + function containsAllGroupEntries(keeper, other) { + var k = groupEntries(keeper); + var n = groupEntries(other); + return n.every(function (ne) { + return k.some(function (ke) { + return ke.id === ne.id && ke.index === ne.index; + }); + }); + } + + function missingGroupEntries(keeper, other) { + var k = groupEntries(keeper); + var n = groupEntries(other); + return n.filter(function (ne) { + return !k.some(function (ke) { + return ke.id === ne.id && ke.index === ne.index; + }); + }); + } + + function performerIds(scene) { + var seen = {}; + return (scene.performers || []) + .map(function (p) { + if (!p || p.id == null) return null; + return String(p.id); + }) + .filter(function (id) { + if (!id || seen[id]) return false; + seen[id] = true; + return true; + }); + } + + function missingPerformerIds(keeper, other) { + var kIds = performerIds(keeper); + var nIds = performerIds(other); + return nIds.filter(function (id) { + return kIds.indexOf(id) === -1; + }); + } + + function decisionReasonFromCode(code) { + var map = { + step_01_total_pixels: "keeper selected by highest total pixel resolution.", + step_02_framerate: "keeper selected by highest framerate.", + step_03_codec: "keeper selected by best codec tier.", + step_upgrade_token: "keeper selected by upgrade token preference.", + step_04_duration: "keeper selected by greater duration.", + step_05_smaller_size: "keeper selected by smaller file size.", + step_06_older_date: "keeper selected by older scene date.", + step_07_more_groups: "keeper selected by greater group count.", + step_08_has_stashid: "keeper selected by stash ID presence.", + step_09_more_performers: "keeper selected by greater performer count.", + step_10_more_markers: "keeper selected by greater marker count.", + step_11_more_tags: "keeper selected by greater tag count.", + step_12_less_associated_files: "keeper selected by fewer associated files.", + step_13_more_metadata_cardinality: "keeper selected by richer metadata cardinality.", + step_14_scene_id: "keeper selected by deterministic scene ID tie-break.", + }; + return map[code] || "keeper selected by deterministic rule ordering."; + } + + function evaluateNonKeeperProtection(keeper, nonKeeper) { + var res = { + markForDeletion: true, + markParentForSync: false, + exceptions: [], + }; + var toggles = state.protectionToggles || defaultProtectionToggles(); + function enabled(key) { + return toggles[key] !== false; + } + + if (enabled("protect_o_count") && (nonKeeper.o_counter || 0) > 0) { + res.markForDeletion = false; + res.exceptions.push("protect_o_count"); + } + var hasIgnoreSmartResolveTag = (nonKeeper.tags || []).some(function (t) { + return ( + t && + t.name != null && + String(t.name).trim().toLowerCase() === "ignore:smart resolve" + ); + }); + if (enabled("protect_ignore_smart_resolve_tag") && hasIgnoreSmartResolveTag) { + res.markForDeletion = false; + res.exceptions.push("protect_ignore_smart_resolve_tag"); + } + if (enabled("protect_group_association") && !containsAllGroupEntries(keeper, nonKeeper)) { + res.markForDeletion = false; + res.markParentForSync = true; + res.exceptions.push("protect_group_association"); + } + + var missingPerfs = missingPerformerIds(keeper, nonKeeper); + if (enabled("protect_performer_mismatch") && missingPerfs.length > 0) { + res.markForDeletion = false; + res.markParentForSync = true; + res.exceptions.push("protect_performer_mismatch"); + } + + var nStashed = (nonKeeper.stash_ids || []).length > 0; + var kTags = (keeper.tags || []).length; + var nTags = (nonKeeper.tags || []).length; + if (enabled("protect_tag_loss_gt_1_non_stashed") && !nStashed && nTags - kTags > 1) { + res.markForDeletion = false; + res.markParentForSync = true; + res.exceptions.push("protect_tag_loss_gt_1_non_stashed"); + } + + var kd = parseDateForComparison(keeper.date); + var nd = parseDateForComparison(nonKeeper.date); + var keeperRaw = keeper.date; + var nonRaw = nonKeeper.date; + if ( + enabled("protect_older_date") && + ((keeperRaw == null && nonRaw != null) || kd - nd > EARLIER_DATE_BUFFER_MS) + ) { + res.markForDeletion = false; + res.markParentForSync = true; + res.exceptions.push("protect_older_date"); + } + return res; + } + + function formatExceptionMessages(keeper, nonKeeper, exceptions) { + if (!exceptions || !exceptions.length) return []; + return exceptions.map(function (code) { + if (code === "protect_o_count") { + return "Non-keeper has O-count and is protected from deletion."; + } + if (code === "protect_ignore_smart_resolve_tag") { + return 'Target is tagged "Ignore:Smart Resolve" and is protected from deletion.'; + } + if (code === "protect_group_association") { + var missing = missingGroupEntries(keeper, nonKeeper); + var details = missing.length + ? missing + .map(function (m) { + return m.id + ":" + (m.index == null ? "null" : String(m.index)); + }) + .join(", ") + : "unknown"; + return "Target has unmatched group associations (" + details + ")."; + } + if (code === "protect_performer_mismatch") { + var missingPerfIds = missingPerformerIds(keeper, nonKeeper); + return missingPerfIds.length + ? "Target has unmatched performer IDs (" + missingPerfIds.join(", ") + ")." + : "Target has unmatched performer IDs."; + } + if (code === "protect_tag_loss_gt_1_non_stashed") { + var kTags = (keeper.tags || []).length; + var nTags = (nonKeeper.tags || []).length; + return ( + "Target has more than 1 additional tag than keeper (" + + nTags + + " vs " + + kTags + + ")." + ); + } + if (code === "protect_older_date") { + return "Target has an older date than keeper."; + } + return code; + }); + } + + function buildPlan() { + var groups = state.groups; + if (!groups || !groups.length) + return { entries: [], checks: {}, reasonsBySceneId: {}, syncRecommendedTargets: {} }; + var vis = visibleGroups(groups); + var entries = []; + var checks = {}; + var reasonsBySceneId = {}; + var syncRecommendedTargets = {}; + var unresolvedHighlightSceneIds = {}; + vis.forEach(function (group, gi) { + if (!group || group.length < 2) return; + var keeperDecision = chooseKeeperBySpec(group); + var keeper = keeperDecision.keeper; + var baseReason = decisionReasonFromCode(keeperDecision.decisionCode); + var nonKeepers = group.filter(function (s) { return s.id !== keeper.id; }); + var deleteIds = []; + var keeperNeedsSync = false; + nonKeepers.forEach(function (loser) { + var pr = evaluateNonKeeperProtection(keeper, loser); + if (pr.markForDeletion) deleteIds.push(loser.id); + else checks[loser.id] = false; + if (pr.markParentForSync || pr.exceptions.length) keeperNeedsSync = true; + var loserReason = baseReason; + if (pr.exceptions.length) { + var pretty = formatExceptionMessages(keeper, loser, pr.exceptions); + loserReason += + " Exceptions: " + + pretty.join(" ") + + ". Recommend synch data from duplicate."; + } + reasonsBySceneId[String(loser.id)] = loserReason; + }); + if (keeperNeedsSync) { + syncRecommendedTargets[String(keeper.id)] = true; + group.forEach(function (s) { + unresolvedHighlightSceneIds[String(s.id)] = true; + }); + } + entries.push({ + setNumber: gi + 1, + keeperId: keeper.id, + deleteIds: deleteIds, + reason: + baseReason + + (keeperNeedsSync ? " Recommend synch data from duplicate." : ""), + }); + group.forEach(function (s) { + if (s.id === keeper.id) { + checks[s.id] = false; + return; + } + if (!Object.prototype.hasOwnProperty.call(checks, s.id)) { + checks[s.id] = deleteIds.indexOf(s.id) !== -1; + } + }); + }); + return { + entries: entries, + checks: checks, + reasonsBySceneId: reasonsBySceneId, + syncRecommendedTargets: syncRecommendedTargets, + unresolvedHighlightSceneIds: unresolvedHighlightSceneIds, + }; + } + + function ensureMatchSetAnchors() { + var root = document.getElementById(ROOT_ID); + if (!root) return; + var rows = root.querySelectorAll("table.duplicate-checker-table tbody tr"); + var setNum = 0; + Array.prototype.forEach.call(rows, function (tr) { + if (tr.classList.contains("duplicate-group")) { + setNum += 1; + tr.id = "dr-match-set-" + setNum; + } + }); + } + + function escapeHtml(text) { + return String(text) + .replace(/&/g, "&") + .replace(//g, ">") + .replace(/\"/g, """) + .replace(/'/g, "'"); + } + + function renderPreviewHtml(plan) { + if (!plan || !plan.entries || !plan.entries.length) { + return "No duplicate pairs on this results page."; + } + return plan.entries + .map(function (e) { + return ( + '' + + "Match Set " + + e.setNumber + + "" + + ": KEEP " + + escapeHtml(e.keeperId) + + " | Select for DELETE " + + escapeHtml(e.deleteIds.join(", ")) + + " | Reason: " + + escapeHtml(e.reason) + ); + }) + .join("
"); + } + + function bindPreviewLinks(previewEl) { + var links = previewEl.querySelectorAll(".dr-match-link"); + Array.prototype.forEach.call(links, function (a) { + a.addEventListener("click", function (ev) { + ev.preventDefault(); + var id = a.getAttribute("data-target"); + if (!id) return; + var target = document.getElementById(id); + if (!target) return; + target.scrollIntoView({ behavior: "smooth", block: "center" }); + }); + }); + } + + function sceneIdFromRow(tr) { + var a = tr.querySelector('td a[href^="/scenes/"]'); + if (!a || !a.getAttribute("href")) return null; + var m = a.getAttribute("href").match(/\/scenes\/(\d+)/); + return m ? m[1] : null; + } + + function setCheckboxForRow(tr, wantChecked) { + var inp = tr.querySelector("input[type=checkbox]"); + if (!inp) return; + var cur = !!inp.checked; + if (cur !== wantChecked) { + inp.click(); + } + } + + function applyChecks(checkMap) { + var root = document.getElementById(ROOT_ID); + if (!root) return; + var rows = root.querySelectorAll("table.duplicate-checker-table tbody tr"); + rows.forEach(function (tr) { + if (tr.classList.contains("separator")) return; + var sid = sceneIdFromRow(tr); + if (!sid || !Object.prototype.hasOwnProperty.call(checkMap, sid)) return; + setCheckboxForRow(tr, checkMap[sid]); + }); + } + + function clearInlineReasons() { + var root = document.getElementById(ROOT_ID); + if (!root) return; + root.querySelectorAll(".dr-inline-reason").forEach(function (el) { + el.remove(); + }); + root + .querySelectorAll("table.duplicate-checker-table tbody tr.dr-unresolved-highlight") + .forEach(function (tr) { + tr.classList.remove("dr-unresolved-highlight"); + }); + } + + function renderInlineReasons(plan) { + var root = document.getElementById(ROOT_ID); + if (!root) return; + clearInlineReasons(); + if (!plan || !plan.reasonsBySceneId) return; + var highlightMap = (plan && plan.unresolvedHighlightSceneIds) || {}; + + var rows = root.querySelectorAll("table.duplicate-checker-table tbody tr"); + rows.forEach(function (tr) { + if (tr.classList.contains("separator")) return; + var sid = sceneIdFromRow(tr); + if (!sid) return; + if (highlightMap[String(sid)]) { + tr.classList.add("dr-unresolved-highlight"); + } + var reason = plan.reasonsBySceneId[String(sid)]; + if (!reason) return; + + var titleCell = tr.querySelector("td.text-left"); + if (!titleCell) return; + var p = document.createElement("p"); + p.className = "scene-path dr-inline-reason"; + p.textContent = "Smart Resolve: " + reason; + titleCell.appendChild(p); + }); + } + + function renderSyncRecommendations(plan) { + var root = document.getElementById(ROOT_ID); + if (!root) return; + var targets = (plan && plan.syncRecommendedTargets) || {}; + root.querySelectorAll(".duplicate-resolver-sync-btn").forEach(function (btn) { + var sid = String(btn.getAttribute("data-scene-id") || ""); + var recommend = !!targets[sid]; + var desiredLabel = recommend ? "Sync rec." : "Sync data"; + var desiredTitle = recommend + ? "Recommended: sync data from duplicate into this scene." + : ""; + var hasWarning = btn.classList.contains("btn-warning"); + var hasSecondary = btn.classList.contains("btn-secondary"); + var classMismatch = recommend + ? !hasWarning || hasSecondary + : hasWarning || !hasSecondary; + + // Only mutate DOM if state actually changed (prevents observer churn loops). + if (classMismatch) { + btn.classList.remove("btn-secondary", "btn-warning"); + btn.classList.add(recommend ? "btn-warning" : "btn-secondary"); + } + if (btn.textContent !== desiredLabel) btn.textContent = desiredLabel; + if ((btn.getAttribute("title") || "") !== desiredTitle) btn.setAttribute("title", desiredTitle); + }); + } + + function buildSmartResolveChecks(plan) { + var checks = {}; + if (!plan || !plan.entries || !plan.entries.length) return checks; + var syncTargets = (plan && plan.syncRecommendedTargets) || {}; + plan.entries.forEach(function (entry) { + var keeperId = String(entry.keeperId); + if (syncTargets[keeperId]) return; + (entry.deleteIds || []).forEach(function (id) { + checks[String(id)] = true; + }); + }); + return checks; + } + + function unresolvedInfo(plan) { + var info = { count: 0, firstSetNumber: null }; + if (!plan || !plan.entries || !plan.entries.length) return info; + var syncTargets = (plan && plan.syncRecommendedTargets) || {}; + plan.entries.forEach(function (entry) { + if (!syncTargets[String(entry.keeperId)]) return; + info.count += 1; + if (info.firstSetNumber == null) info.firstSetNumber = entry.setNumber; + }); + return info; + } + + function updateUnresolvedButton(plan, show) { + var btn = document.getElementById("dr-btn-unresolved"); + if (!btn) return; + if (!show) { + btn.hidden = true; + btn.disabled = true; + btn.removeAttribute("data-target-set"); + return; + } + + var info = unresolvedInfo(plan); + btn.hidden = false; + btn.textContent = info.count + " Unresolved"; + btn.disabled = info.count === 0; + if (info.firstSetNumber == null) { + btn.removeAttribute("data-target-set"); + btn.setAttribute("title", "No unresolved sync recommendations on this page."); + } else { + btn.setAttribute("data-target-set", String(info.firstSetNumber)); + btn.setAttribute("title", "Jump to first unresolved match set."); + } + } + + function setProcessingIndicator(mode) { + var el = document.getElementById("dr-processing-indicator"); + if (!el) return; + var spinner = el.querySelector(".dr-processing-spinner"); + var bar = el.querySelector(".dr-processing-bar"); + var label = el.querySelector(".dr-processing-label"); + var normalized = mode === "bar" || mode === "spinner" ? mode : "none"; + if (normalized === "none") { + el.hidden = true; + return; + } + el.hidden = false; + if (spinner) spinner.hidden = normalized !== "spinner"; + if (bar) bar.hidden = normalized !== "bar"; + if (label) label.textContent = "Processing…"; + } + + function goToFirstUnresolved(plan) { + ensureMatchSetAnchors(); + var info = unresolvedInfo(plan); + if (info.firstSetNumber == null) return; + var target = document.getElementById("dr-match-set-" + info.firstSetNumber); + if (target) target.scrollIntoView({ behavior: "smooth", block: "center" }); + } + + function renderPlanDetailsIntoDrawer(plan) { + var prev = document.getElementById("dr-preview-out"); + if (!prev) return; + prev.innerHTML = renderPreviewHtml(plan); + bindPreviewLinks(prev); + } + + function ensureCoreSelectSmartResolveOption() { + var root = document.getElementById(ROOT_ID); + if (!root) return; + var menuItems = root.querySelectorAll(".dropdown-menu .dropdown-item"); + if (!menuItems || !menuItems.length) return; + + var anchor = null; + menuItems.forEach(function (item) { + if ((item.textContent || "").trim() === "Select None") anchor = item; + }); + if (!anchor) return; + + var menu = anchor.closest(".dropdown-menu"); + if (!menu || menu.querySelector("#dr-smart-resolve-option")) return; + + var btn = document.createElement("button"); + btn.type = "button"; + btn.id = "dr-smart-resolve-option"; + btn.className = "dropdown-item"; + btn.textContent = "Select Smart Resolve"; + btn.onclick = async function () { + setProcessingIndicator("spinner"); + try { + // Always refresh after SPA table changes (pagination/deletes) to avoid stale state. + await loadDuplicateGroups(); + // Use URL page-size for indicator mode. If absent/unparseable, assume 20. + var pageSize = parseParams().size || 20; + if (pageSize > 20) { + setProcessingIndicator("bar"); + } + state.smartResolveUiActive = true; + // Let the processing indicator paint before running heavier rule evaluation. + await new Promise(function (resolve) { + requestAnimationFrame(resolve); + }); + state.lastPlan = buildPlan(); + ensureMatchSetAnchors(); + renderPlanDetailsIntoDrawer(state.lastPlan); + renderInlineReasons(state.lastPlan); + renderSyncRecommendations(state.lastPlan); + applyChecks(buildSmartResolveChecks(state.lastPlan)); + updateUnresolvedButton(state.lastPlan, true); + setSmartResolveDetailsVisible(true, false); + } catch (e) { + notifyStashError(e); + } finally { + setProcessingIndicator("none"); + } + }; + anchor.parentNode.insertBefore(btn, anchor.nextSibling); + } + + function placeToolbarButtonsInCoreRow() { + var root = document.getElementById(ROOT_ID); + if (!root) return; + var bar = document.getElementById("duplicate-resolver-toolbar"); + if (!bar) return; + var unresolvedBtn = bar.querySelector("#dr-btn-unresolved"); + var processingIndicator = bar.querySelector("#dr-processing-indicator"); + var autoBtn = bar.querySelector("#dr-btn-apply"); + var resetBtn = bar.querySelector("#dr-btn-reset"); + if (!unresolvedBtn || !processingIndicator || !autoBtn || !resetBtn) return; + var toggle = root.querySelector(".dropdown .dropdown-toggle"); + if (!toggle || !toggle.parentNode) return; + + var host = document.getElementById("dr-core-actions"); + if (!host) { + host = document.createElement("span"); + host.id = "dr-core-actions"; + host.className = "dr-core-actions"; + toggle.parentNode.insertBefore(host, toggle.nextSibling); + } + + host.appendChild(unresolvedBtn); + host.appendChild(processingIndicator); + host.appendChild(resetBtn); + host.appendChild(autoBtn); + } + + function setSmartResolveDetailsVisible(show, expandDrawer) { + var bar = document.getElementById("duplicate-resolver-toolbar"); + if (!bar) return; + var drawerToggle = bar.querySelector("#dr-drawer-toggle"); + var drawerPanel = bar.querySelector("#dr-drawer-panel"); + var resetBtn = bar.querySelector("#dr-btn-reset"); + var unresolvedBtn = bar.querySelector("#dr-btn-unresolved"); + var processingIndicator = bar.querySelector("#dr-processing-indicator"); + if (!drawerToggle || !drawerPanel) return; + + bar.hidden = !show; + drawerToggle.hidden = !show; + if (resetBtn) resetBtn.hidden = !show; + if (unresolvedBtn) unresolvedBtn.hidden = !show; + if (processingIndicator) processingIndicator.hidden = !show; + if (!show) { + state.smartResolveUiActive = false; + drawerPanel.hidden = true; + drawerToggle.setAttribute("aria-expanded", "false"); + drawerToggle.textContent = "Match Details: \u25b6"; + updateUnresolvedButton(null, false); + return; + } + + if (expandDrawer) { + drawerPanel.hidden = false; + drawerToggle.setAttribute("aria-expanded", "true"); + drawerToggle.textContent = "Match Details: \u25bc"; + } + } + + async function loadPluginSetting() { + try { + var data = await gql( + "query DrCfg { configuration { plugins } }" + ); + var plug = data.configuration && data.configuration.plugins; + var cfg = null; + if (plug && typeof plug === "object") { + cfg = plug[PLUGIN_ID] || null; + if (!cfg) { + var k = Object.keys(plug).find(function (key) { + return String(key).toLowerCase() === String(PLUGIN_ID).toLowerCase(); + }); + if (k) cfg = plug[k]; + } + } + if (cfg && typeof cfg === "object") { + var v = cfg.autoCheckAfterSync; + if (v === true || v === "true") state.autoCheckDefault = true; + else if (v === false || v === "false") state.autoCheckDefault = false; + function boolOrDefault(key, fallback) { + var raw = cfg[key]; + if (raw === true || raw === "true") return true; + if (raw === false || raw === "false") return false; + return fallback; + } + state.ruleToggles = { + step_01_total_pixels: !boolOrDefault("ignoreRule01TotalPixels", false), + step_02_framerate: !boolOrDefault("ignoreRule02Framerate", false), + step_03_codec: !boolOrDefault("ignoreRule03Codec", false), + step_upgrade_token: !boolOrDefault("ignoreRule05bUpgradeToken", false), + step_04_duration: !boolOrDefault("ignoreRule04Duration", false), + step_05_smaller_size: !boolOrDefault("ignoreRule05SmallerSize", false), + step_06_older_date: !boolOrDefault("ignoreRule06OlderDate", false), + step_07_more_groups: !boolOrDefault("ignoreRule07MoreGroups", false), + step_08_has_stashid: !boolOrDefault("ignoreRule08HasStashId", false), + step_09_more_performers: !boolOrDefault("ignoreRule09MorePerformers", false), + step_10_more_markers: !boolOrDefault("ignoreRule10MoreMarkers", false), + step_11_more_tags: !boolOrDefault("ignoreRule11MoreTags", false), + step_12_less_associated_files: !boolOrDefault("ignoreRule12LessAssociatedFiles", false), + step_13_more_metadata_cardinality: !boolOrDefault( + "ignoreRule13MoreMetadataCardinality", + false + ), + }; + state.protectionToggles = { + protect_o_count: !boolOrDefault("unprotectAOCount", false), + protect_group_association: !boolOrDefault("unprotectBGroupAssociation", false), + protect_performer_mismatch: !boolOrDefault("unprotectCPerformerMismatch", false), + protect_tag_loss_gt_1_non_stashed: !boolOrDefault("unprotectDTagLossGt1NonStashed", false), + protect_older_date: !boolOrDefault("unprotectEOlderDate", false), + protect_ignore_smart_resolve_tag: !boolOrDefault("unprotectFIgnoreSmartResolveTag", false), + }; + } + } catch (e) { + state.autoCheckDefault = true; + state.ruleToggles = defaultRuleToggles(); + state.protectionToggles = defaultProtectionToggles(); + } + } + + function mergeIds(target, additions) { + var set = new Set(); + (target || []).forEach(function (x) { set.add(String(x)); }); + (additions || []).forEach(function (x) { set.add(String(x)); }); + return Array.from(set); + } + + function mergeStashIds(target, additions) { + var map = new Map(); + (target || []).forEach(function (s) { + if (!s || !s.endpoint || !s.stash_id) return; + // Stash enforces UNIQUE(scene_id, endpoint): keep one stash_id per endpoint. + // Prefer existing target value when endpoint already exists. + if (!map.has(s.endpoint)) { + map.set(s.endpoint, { endpoint: s.endpoint, stash_id: s.stash_id }); + } + }); + (additions || []).forEach(function (s) { + if (!s || !s.endpoint || !s.stash_id) return; + if (!map.has(s.endpoint)) { + map.set(s.endpoint, { endpoint: s.endpoint, stash_id: s.stash_id }); + } + }); + return Array.from(map.values()).map(function (s) { + return { endpoint: s.endpoint, stash_id: s.stash_id }; + }); + } + + /** + * Image URL/base64 for the scene *cover* (UI + sceneUpdate `cover_image`). + * Stash `/scene/{id}/webp` is an animated *stream preview*, not cover — do not use. + * `/scene/{id}/screenshot` is served from the cover store first (see Stash SceneServer.ServeScreenshot). + */ + function sceneCoverDataUrl(scene) { + if (!scene) return ""; + var c = scene.cover_image; + if (c && String(c).trim()) return String(c).trim(); + var p = scene.paths || {}; + var shot = p.screenshot; + return shot && String(shot).trim() ? String(shot).trim() : ""; + } + + function sceneResolution(scene) { + var f = primaryFile(scene); + var w = Number(f.width || 0) || 0; + var h = Number(f.height || 0) || 0; + return { width: w, height: h, totalPixels: w * h }; + } + + function sceneResolutionLabel(scene) { + var r = sceneResolution(scene); + if (r.width > 0 && r.height > 0) { + return r.width + "px x " + r.height + "px"; + } + return "resolution unknown"; + } + + function mergeGroups(target, additions) { + var map = new Map(); + (target || []).forEach(function (g) { + map.set(String(g.group.id), { + group_id: g.group.id, + scene_index: g.scene_index != null ? g.scene_index : null, + }); + }); + (additions || []).forEach(function (g) { + var id = String(g.group.id); + if (!map.has(id)) + map.set(id, { + group_id: g.group.id, + scene_index: g.scene_index != null ? g.scene_index : null, + }); + }); + return Array.from(map.values()); + } + + /** Union groups from target + sources (scene `groups` shape). */ + function collectMergedGroups(target, sources, enabled) { + if (!enabled) return mergeGroups(target.groups, []); + var map = new Map(); + function addAll(arr) { + (arr || []).forEach(function (g) { + var id = String(g.group.id); + if (!map.has(id)) + map.set(id, { + group_id: g.group.id, + scene_index: g.scene_index != null ? g.scene_index : null, + }); + }); + } + addAll(target.groups); + sources.forEach(function (s) { + addAll(s.groups); + }); + return Array.from(map.values()); + } + + function buildSceneUpdateInput(target, sources, opt) { + var tag_ids = (target.tags || []).map(function (t) { return t.id; }); + var performer_ids = (target.performers || []).map(function (t) { return t.id; }); + var gallery_ids = (target.galleries || []).map(function (t) { return t.id; }); + var urls = (target.urls || []).slice(); + var stash_ids = target.stash_ids || []; + + sources.forEach(function (src) { + if (opt.tags) + tag_ids = mergeIds( + tag_ids, + (src.tags || []).map(function (t) { return t.id; }) + ); + if (opt.performers) + performer_ids = mergeIds( + performer_ids, + (src.performers || []).map(function (t) { return t.id; }) + ); + if (opt.galleries) + gallery_ids = mergeIds( + gallery_ids, + (src.galleries || []).map(function (t) { return t.id; }) + ); + if (opt.urls) { + (src.urls || []).forEach(function (u) { + if (urls.indexOf(u) === -1) urls.push(u); + }); + } + if (opt.stash_ids) + stash_ids = mergeStashIds(stash_ids, src.stash_ids || []); + }); + + var groups = collectMergedGroups(target, sources, opt.groups); + + var input = { + id: target.id, + tag_ids: tag_ids, + performer_ids: performer_ids, + gallery_ids: gallery_ids, + groups: groups, + urls: urls, + stash_ids: stash_ids, + }; + + function hasText(v) { + return !!String(v || "").trim(); + } + function sceneHasStashId(s) { + return !!((s && s.stash_ids && s.stash_ids.length) || 0); + } + function dateUpperBoundParts(raw) { + if (!raw || !String(raw).trim()) return null; + var m = String(raw).trim().match(/^(\d{4})(?:-(\d{2})(?:-(\d{2}))?)?$/); + if (!m) return null; + var y = parseInt(m[1], 10); + var mo = m[2] ? parseInt(m[2], 10) : 12; + var d; + if (m[3]) { + d = parseInt(m[3], 10); + } else { + d = new Date(y, mo, 0).getDate(); + } + return [y, mo, d]; + } + function isDateBefore(a, b) { + var pa = dateUpperBoundParts(a); + var pb = dateUpperBoundParts(b); + if (!pa && !pb) return false; + if (!pa) return false; + if (!pb) return true; + if (pa[0] !== pb[0]) return pa[0] < pb[0]; + if (pa[1] !== pb[1]) return pa[1] < pb[1]; + return pa[2] < pb[2]; + } + function pickSourceValue(field) { + var candidates = sources.filter(function (s) { + if (field === "studio") return !!(s.studio && s.studio.id); + if (field === "cover_image") return !!sceneCoverDataUrl(s); + return hasText(s[field]); + }); + if (!candidates.length) return null; + if (field === "date") { + return candidates.reduce(function (best, cur) { + return isDateBefore(cur.date, best.date) ? cur : best; + }).date; + } + if (field === "cover_image") { + var bestCover = candidates.reduce(function (best, cur) { + var b = sceneResolution(best).totalPixels; + var c = sceneResolution(cur).totalPixels; + if (c !== b) return c > b ? cur : best; + var bestStash = sceneHasStashId(best) ? 1 : 0; + var curStash = sceneHasStashId(cur) ? 1 : 0; + if (curStash !== bestStash) return curStash > bestStash ? cur : best; + return best; + }); + return sceneCoverDataUrl(bestCover); + } + var stashPreferred = candidates.find(sceneHasStashId); + var chosen = stashPreferred || candidates[0]; + if (field === "studio") return chosen.studio.id; + if (field === "cover_image") return sceneCoverDataUrl(chosen); + return chosen[field]; + } + + var scalarWins = opt.scalarWins || {}; + if (scalarWins.title === "source") { + var srcTitle = pickSourceValue("title"); + if (hasText(srcTitle)) input.title = srcTitle; + } + if (scalarWins.code === "source") { + var srcCode = pickSourceValue("code"); + if (hasText(srcCode)) input.code = srcCode; + } + if (scalarWins.director === "source") { + var srcDirector = pickSourceValue("director"); + if (hasText(srcDirector)) input.director = srcDirector; + } + if (scalarWins.details === "source") { + var srcDetails = pickSourceValue("details"); + if (hasText(srcDetails)) input.details = srcDetails; + } + if (scalarWins.date === "source") { + var srcDate = pickSourceValue("date"); + if (hasText(srcDate)) input.date = srcDate; + } + if (scalarWins.studio === "source") { + var srcStudio = pickSourceValue("studio"); + if (srcStudio) input.studio_id = srcStudio; + } + if (scalarWins.cover_image === "source") { + var srcCover = pickSourceValue("cover_image"); + if (hasText(srcCover)) input.cover_image = srcCover; + } + + return input; + } + + /** + * Stash resolves `cover_image` URLs on the *server*. If the server cannot + * reach its public hostname (split DNS / hairpin), fetch here in the browser + * and send base64 data instead. + */ + function absolutizeMediaUrl(u) { + var s = String(u || "").trim(); + if (!s) return s; + if (s.indexOf("/") === 0) return window.location.origin + s; + return s; + } + + function fetchUrlAsDataUrl(url) { + var abs = absolutizeMediaUrl(url); + return fetch(abs, { credentials: "include" }).then(function (res) { + if (!res.ok) + throw new Error("Could not load cover image (" + res.status + ")"); + return res.blob(); + }).then(function (blob) { + return new Promise(function (resolve, reject) { + var r = new FileReader(); + r.onload = function () { + resolve(r.result); + }; + r.onerror = function () { + reject(new Error("Could not read cover image data")); + }; + r.readAsDataURL(blob); + }); + }); + } + + async function inlineRemoteCoverImages(input) { + var c = input && input.cover_image; + if (!c || typeof c !== "string") return; + var t = c.trim(); + if (!t) return; + if (t.toLowerCase().indexOf("data:image") === 0) return; + if ( + t.indexOf("http://") === 0 || + t.indexOf("https://") === 0 || + t.indexOf("/") === 0 + ) { + input.cover_image = await fetchUrlAsDataUrl(t); + } + } + + async function runSceneUpdate(input) { + var mut = + "mutation DrSceneUpdate($input: SceneUpdateInput!) { sceneUpdate(input: $input) { id } }"; + await gql(mut, { input: input }); + } + + function showModal(target, group) { + var sources = group.filter(function (s) { return s.id !== target.id; }); + var overlay = document.createElement("div"); + overlay.id = "duplicate-resolver-modal-overlay"; + + var autoId = "dr-auto-check"; + var opt = { + tags: true, + performers: true, + groups: true, + galleries: true, + urls: true, + stash_ids: true, + scalarWins: {}, + }; + + function hasText(v) { + return !!String(v || "").trim(); + } + function sceneHasStashId(s) { + return !!((s && s.stash_ids && s.stash_ids.length) || 0); + } + function dateUpperBoundParts(raw) { + if (!raw || !String(raw).trim()) return null; + var m = String(raw).trim().match(/^(\d{4})(?:-(\d{2})(?:-(\d{2}))?)?$/); + if (!m) return null; + var y = parseInt(m[1], 10); + var mo = m[2] ? parseInt(m[2], 10) : 12; + var d; + if (m[3]) { + d = parseInt(m[3], 10); + } else { + d = new Date(y, mo, 0).getDate(); + } + return [y, mo, d]; + } + function isDateBefore(a, b) { + var pa = dateUpperBoundParts(a); + var pb = dateUpperBoundParts(b); + if (!pa && !pb) return false; + if (!pa) return false; + if (!pb) return true; + if (pa[0] !== pb[0]) return pa[0] < pb[0]; + if (pa[1] !== pb[1]) return pa[1] < pb[1]; + return pa[2] < pb[2]; + } + function pickSourceScene(field) { + var candidates = sources.filter(function (s) { + if (field === "studio") return !!(s.studio && s.studio.id); + if (field === "cover_image") return !!sceneCoverDataUrl(s); + return hasText(s[field]); + }); + if (!candidates.length) return null; + if (field === "date") { + return candidates.reduce(function (best, cur) { + return isDateBefore(cur.date, best.date) ? cur : best; + }); + } + if (field === "cover_image") { + return candidates.reduce(function (best, cur) { + var b = sceneResolution(best).totalPixels; + var c = sceneResolution(cur).totalPixels; + if (c !== b) return c > b ? cur : best; + var bestStash = sceneHasStashId(best) ? 1 : 0; + var curStash = sceneHasStashId(cur) ? 1 : 0; + if (curStash !== bestStash) return curStash > bestStash ? cur : best; + return best; + }); + } + var stashPreferred = candidates.find(sceneHasStashId); + return stashPreferred || candidates[0]; + } + function sourceValueForField(field) { + var s = pickSourceScene(field); + if (!s) return ""; + if (field === "studio") { + if (s.studio && s.studio.name) return s.studio.name; + if (s.studio && s.studio.id) return "Studio " + s.studio.id; + return ""; + } + if (field === "cover_image") return sceneCoverDataUrl(s); + return String(s[field] || "").trim(); + } + function defaultScalarWinner(field) { + var targetHas = sceneHasStashId(target); + var sourceHasAny = sources.some(sceneHasStashId); + if (field === "date") { + var targetDate = String(target.date || "").trim(); + var sourceDate = sourceValueForField("date"); + if (!targetDate && sourceDate) return "source"; + if (targetDate && sourceDate && isDateBefore(sourceDate, targetDate)) return "source"; + return "dest"; + } + if (field === "cover_image") { + var tc = sceneCoverDataUrl(target); + var sc = sourceValueForField("cover_image"); + var sourceScene = pickSourceScene("cover_image"); + var sourcePixels = sourceScene ? sceneResolution(sourceScene).totalPixels : 0; + var targetPixels = sceneResolution(target).totalPixels; + if (sourcePixels > targetPixels) return "source"; + if (targetPixels > sourcePixels) return "dest"; + if (!tc && sc) return "source"; + if (!targetHas && sourceHasAny && sc) return "source"; + return "dest"; + } + // For text/scalar fields (including title/details), prefer source when destination is blank. + var targetFieldHasValue = + field === "studio" + ? !!(target.studio && target.studio.id) + : hasText(target[field]); + if (!targetFieldHasValue && hasText(sourceValueForField(field))) return "source"; + if (!targetHas && sourceHasAny && hasText(sourceValueForField(field))) return "source"; + return "dest"; + } + + function row(name, key) { + var lab = document.createElement("label"); + lab.className = "dr-field-title"; + var toggle = choicePrepend(!!opt[key], "Toggle " + name); + toggle.root.style.marginRight = "0.45rem"; + toggle.button.onclick = function () { + opt[key] = !opt[key]; + toggle.button.innerHTML = opt[key] + ? '' + : ''; + if (hint) hint.hidden = !opt[key]; + }; + lab.appendChild(toggle.root); + lab.appendChild(document.createTextNode(name)); + var unionKeys = { + tags: true, + performers: true, + groups: true, + galleries: true, + urls: true, + stash_ids: true, + }; + var hint = null; + if (unionKeys[key]) { + hint = document.createElement("span"); + hint.className = "dr-opt-hint"; + hint.textContent = " union all"; + hint.hidden = !opt[key]; + lab.appendChild(hint); + } + return lab; + } + + var modal = document.createElement("div"); + modal.className = "dr-modal"; + modal.innerHTML = + '"; + function textOrFallback(v, fallback) { + return v && String(v).trim() ? String(v).trim() : fallback; + } + + function groupLabel(g) { + var gid = g && g.group && g.group.id != null ? String(g.group.id) : null; + var gname = g && g.group && g.group.name ? String(g.group.name).trim() : ""; + if (gname) return gname; + if (gid) return "Group " + gid; + return "Group (unknown)"; + } + + function destListFor(key) { + if (key === "tags") return (target.tags || []).map(function (t) { return t.name; }); + if (key === "performers") + return (target.performers || []).map(function (x) { return x.name; }); + if (key === "groups") + return (target.groups || []).map(function (g) { + return groupLabel(g); + }); + if (key === "galleries") + return (target.galleries || []).map(function (g) { + return textOrFallback(g.title, "Gallery " + g.id); + }); + if (key === "urls") return (target.urls || []).slice(); + if (key === "stash_ids") + return (target.stash_ids || []).map(function (s) { + return s.endpoint + ":" + s.stash_id; + }); + return []; + } + + function sourceUnionFor(key) { + var set = new Set(); + sources.forEach(function (s) { + if (key === "tags") (s.tags || []).forEach(function (t) { set.add(t.name); }); + if (key === "performers") + (s.performers || []).forEach(function (x) { set.add(x.name); }); + if (key === "groups") + (s.groups || []).forEach(function (g) { + set.add(groupLabel(g)); + }); + if (key === "galleries") + (s.galleries || []).forEach(function (g) { + set.add(textOrFallback(g.title, "Gallery " + g.id)); + }); + if (key === "urls") (s.urls || []).forEach(function (u) { set.add(u); }); + if (key === "stash_ids") + (s.stash_ids || []).forEach(function (x) { set.add(x.endpoint + ":" + x.stash_id); }); + }); + return Array.from(set); + } + + function destDisplayFor(key) { + if (key === "stash_ids") { + return (target.stash_ids || []).map(function (s) { + return { + text: s.stash_id || "", + title: s.endpoint || "", + }; + }); + } + if (key !== "groups") return destListFor(key); + return (target.groups || []).map(function (g) { + var label = groupLabel(g); + var idx = + g && g.scene_index != null && String(g.scene_index).trim() + ? String(g.scene_index) + : "?"; + return { text: label, title: "Scene number: " + idx }; + }); + } + + function sourceUnionDisplayFor(key) { + if (key === "stash_ids") { + var map = new Map(); + sources.forEach(function (s) { + (s.stash_ids || []).forEach(function (x) { + var endpoint = x.endpoint || ""; + var stashId = x.stash_id || ""; + var k = endpoint + "\0" + stashId; + if (!map.has(k)) { + map.set(k, { + text: stashId, + title: endpoint, + }); + } + }); + }); + return Array.from(map.values()); + } + if (key !== "groups") return sourceUnionFor(key); + var byLabel = new Map(); + sources.forEach(function (s) { + (s.groups || []).forEach(function (g) { + var label = groupLabel(g); + if (!byLabel.has(label)) byLabel.set(label, new Set()); + var idx = + g && g.scene_index != null && String(g.scene_index).trim() + ? String(g.scene_index) + : "?"; + byLabel.get(label).add(idx); + }); + }); + return Array.from(byLabel.entries()).map(function (entry) { + var label = entry[0]; + var indices = Array.from(entry[1]).sort(); + return { + text: label, + title: "Scene number(s): " + indices.join(", "), + }; + }); + } + + function choicePrepend(selected, title) { + var pre = document.createElement("div"); + pre.className = "input-group-prepend"; + var btn = document.createElement("button"); + btn.type = "button"; + btn.className = "btn btn-secondary"; + btn.title = title || ""; + btn.innerHTML = selected + ? '' + : ''; + pre.appendChild(btn); + return { root: pre, button: btn }; + } + + function renderListControl(values, placeholder, isReadOnly) { + var wrap = document.createElement("div"); + wrap.className = "dr-list-control"; + var list = values || []; + if (!list.length) list = [""]; + list.slice(0, 20).forEach(function (v) { + var inputGroup = document.createElement("div"); + inputGroup.className = "input-group"; + var input = document.createElement("input"); + input.className = "text-input form-control"; + input.placeholder = placeholder; + if (v && typeof v === "object") { + input.value = v.text || ""; + if (v.title) input.title = v.title; + } else { + input.value = String(v || ""); + } + input.readOnly = !!isReadOnly; + inputGroup.appendChild(input); + wrap.appendChild(inputGroup); + }); + if ((values || []).length > 20) { + var more = document.createElement("div"); + more.className = "dr-empty"; + more.textContent = "+" + (values.length - 20) + " more"; + wrap.appendChild(more); + } + return wrap; + } + + function renderChipList(values, emptyText) { + var wrap = document.createElement("div"); + wrap.className = "dr-chip-list"; + if (!values || !values.length) { + var em = document.createElement("span"); + em.className = "dr-empty"; + em.textContent = emptyText; + wrap.appendChild(em); + return wrap; + } + values.forEach(function (v) { + var chip = document.createElement("span"); + chip.className = "tag-item badge badge-secondary dr-chip"; + if (v && typeof v === "object") { + chip.textContent = v.text || ""; + if (v.title) chip.title = v.title; + } else { + chip.textContent = String(v || ""); + } + wrap.appendChild(chip); + }); + return wrap; + } + + function renderScalarInput(value, placeholder, isReadOnly, multiline) { + if (multiline) { + var ta = document.createElement("textarea"); + ta.className = "bg-secondary text-white border-secondary scene-description form-control"; + ta.placeholder = placeholder; + ta.value = String(value || ""); + ta.readOnly = !!isReadOnly; + ta.rows = 4; + return ta; + } + var input = document.createElement("input"); + input.className = "bg-secondary text-white border-secondary form-control"; + input.placeholder = placeholder; + input.value = String(value || ""); + input.readOnly = !!isReadOnly; + return input; + } + + function appendCoverValueToGroup(group, value, placeholder) { + var outer = document.createElement("div"); + outer.className = "dr-cover-value flex-grow-1"; + var v = String(value || "").trim(); + var caption = placeholder || "Cover"; + if (!v) { + var emptyPh = document.createElement("div"); + emptyPh.className = "dr-cover-placeholder"; + emptyPh.textContent = "No cover"; + outer.appendChild(emptyPh); + var cap0 = document.createElement("div"); + cap0.className = "dr-cover-caption"; + cap0.textContent = caption; + outer.appendChild(cap0); + } else { + var wrap = document.createElement("div"); + wrap.className = "dr-cover-frame"; + var img = document.createElement("img"); + img.className = "dr-cover-thumb"; + img.alt = caption; + img.loading = "lazy"; + img.src = v; + img.onerror = function () { + wrap.style.display = "none"; + var capEl = outer.querySelector(".dr-cover-caption"); + if (capEl) capEl.style.display = "none"; + if (outer.querySelector("[data-dr-cover-fail]")) return; + var fail = document.createElement("div"); + fail.className = "dr-cover-placeholder"; + fail.setAttribute("data-dr-cover-fail", "1"); + fail.textContent = "Preview unavailable"; + outer.appendChild(fail); + }; + wrap.appendChild(img); + outer.appendChild(wrap); + var cap = document.createElement("div"); + cap.className = "dr-cover-caption"; + cap.textContent = caption; + outer.appendChild(cap); + } + group.appendChild(outer); + } + + function uniqueSorted(values) { + return Array.from(new Set((values || []).map(function (v) { return String(v); }))).sort(); + } + + function setsEqual(a, b) { + var aa = uniqueSorted(a); + var bb = uniqueSorted(b); + if (aa.length !== bb.length) return false; + for (var i = 0; i < aa.length; i++) { + if (aa[i] !== bb[i]) return false; + } + return true; + } + + var compare = document.createElement("div"); + compare.className = "dr-sync-compare"; + compare.innerHTML = + '
' + + '

Sources (data to union)

' + + "

" + + sources.length + + " scene(s): " + + sources.map(function (s) { return s.id; }).join(", ") + + "

" + + "
" + + '
' + + '

Destination (target scene)

' + + "

ID " + + target.id + + " - " + + textOrFallback(target.title, "(no title)") + + "

" + + "
"; + modal.appendChild(compare); + + var opts = document.createElement("div"); + opts.className = "dr-modal-options"; + function addFieldRow(label, key, desc) { + var sourceVals = []; + var destVals = []; + var sourceDisplayVals = []; + var destDisplayVals = []; + var isComparable = + key === "tags" || + key === "performers" || + key === "groups" || + key === "galleries" || + key === "urls" || + key === "stash_ids"; + + if (isComparable) { + sourceVals = sourceUnionFor(key); + destVals = destListFor(key); + sourceDisplayVals = sourceUnionDisplayFor(key); + destDisplayVals = destDisplayFor(key); + // Suppress rows where both sides are effectively the same set. + if (setsEqual(sourceVals, destVals)) return; + } + + var wrapper = document.createElement("div"); + wrapper.className = "dr-field-row"; + var top = row(label, key); + wrapper.appendChild(top); + if (desc) { + var d = document.createElement("div"); + d.className = "dr-field-desc"; + d.textContent = desc; + wrapper.appendChild(d); + } + if ( + isComparable + ) { + var useChips = key === "tags" || key === "performers" || key === "groups"; + var grid = document.createElement("div"); + grid.className = "dr-field-grid"; + var left = document.createElement("div"); + left.className = "dr-field-col"; + var right = document.createElement("div"); + right.className = "dr-field-col"; + if (useChips) { + left.appendChild(renderChipList(sourceDisplayVals, "none")); + right.appendChild(renderChipList(destDisplayVals, "none")); + } else { + left.appendChild(renderListControl(sourceDisplayVals, label, true)); + right.appendChild(renderListControl(destDisplayVals, label, true)); + } + grid.appendChild(left); + grid.appendChild(right); + wrapper.appendChild(grid); + } + opts.appendChild(wrapper); + } + // Scalar field preview (shown only when different/non-empty on at least one side). + function scalarFieldRow(label, fieldKey, destValue, sourceValues) { + var srcJoined = uniqueSorted( + (sourceValues || []).filter(function (v) { return !!String(v || "").trim(); }) + ); + var destText = String(destValue || "").trim(); + var sourceText = srcJoined.join(" | "); + if (!destText && !sourceText) return; + if (sourceText && sourceText.split(" | ").indexOf(destText) !== -1 && srcJoined.length === 1) { + return; + } + + var wrapper = document.createElement("div"); + wrapper.className = "dr-field-row"; + var title = document.createElement("div"); + title.className = "dr-field-title"; + title.textContent = label; + wrapper.appendChild(title); + + var grid = document.createElement("div"); + grid.className = "dr-field-grid"; + var left = document.createElement("div"); + left.className = "dr-field-col"; + var right = document.createElement("div"); + right.className = "dr-field-col"; + var leftGroup = document.createElement("div"); + leftGroup.className = "input-group"; + var rightGroup = document.createElement("div"); + rightGroup.className = "input-group"; + var leftPre = choicePrepend(false, "Use source"); + var rightPre = choicePrepend(false, "Keep destination"); + leftGroup.appendChild(leftPre.root); + rightGroup.appendChild(rightPre.root); + var srcValue = srcJoined.length ? srcJoined[0] : ""; + leftGroup.appendChild( + renderScalarInput(srcValue, label, true, fieldKey === "details") + ); + rightGroup.appendChild( + renderScalarInput(destText, label, true, fieldKey === "details") + ); + left.appendChild(leftGroup); + right.appendChild(rightGroup); + grid.appendChild(left); + grid.appendChild(right); + wrapper.appendChild(grid); + var winner = defaultScalarWinner(fieldKey); + opt.scalarWins[fieldKey] = winner; + function setChoiceHeads() { + var destOn = opt.scalarWins[fieldKey] === "dest"; + leftPre.button.innerHTML = !destOn + ? '' + : ''; + rightPre.button.innerHTML = destOn + ? '' + : ''; + } + rightPre.button.onclick = function () { + opt.scalarWins[fieldKey] = "dest"; + setChoiceHeads(); + }; + leftPre.button.onclick = function () { + opt.scalarWins[fieldKey] = "source"; + setChoiceHeads(); + }; + setChoiceHeads(); + opts.appendChild(wrapper); + } + + function coverImageFieldRow() { + var srcJoined = uniqueSorted( + sources + .map(function (s) { return sceneCoverDataUrl(s); }) + .filter(function (v) { return hasText(v); }) + ); + var destText = sceneCoverDataUrl(target); + var sourceText = srcJoined.join(" | "); + if (!destText && !sourceText) return; + if ( + sourceText && + sourceText.split(" | ").indexOf(destText) !== -1 && + srcJoined.length === 1 + ) { + return; + } + + var wrapper = document.createElement("div"); + wrapper.className = "dr-field-row"; + var titleEl = document.createElement("div"); + titleEl.className = "dr-field-title"; + titleEl.textContent = "Cover"; + wrapper.appendChild(titleEl); + + var grid = document.createElement("div"); + grid.className = "dr-field-grid"; + var left = document.createElement("div"); + left.className = "dr-field-col"; + var right = document.createElement("div"); + right.className = "dr-field-col"; + var leftGroup = document.createElement("div"); + leftGroup.className = "input-group"; + var rightGroup = document.createElement("div"); + rightGroup.className = "input-group"; + var leftPre = choicePrepend(false, "Use source cover"); + var rightPre = choicePrepend(false, "Keep destination cover"); + leftGroup.appendChild(leftPre.root); + rightGroup.appendChild(rightPre.root); + var bestSourceCoverScene = pickSourceScene("cover_image"); + appendCoverValueToGroup( + leftGroup, + bestSourceCoverScene ? sceneCoverDataUrl(bestSourceCoverScene) : (srcJoined.length ? srcJoined[0] : ""), + sceneResolutionLabel(bestSourceCoverScene) + ); + appendCoverValueToGroup( + rightGroup, + destText, + sceneResolutionLabel(target) + ); + left.appendChild(leftGroup); + right.appendChild(rightGroup); + grid.appendChild(left); + grid.appendChild(right); + wrapper.appendChild(grid); + + var fieldKey = "cover_image"; + var winner = defaultScalarWinner(fieldKey); + opt.scalarWins[fieldKey] = winner; + function setChoiceHeads() { + var destOn = opt.scalarWins[fieldKey] === "dest"; + leftPre.button.innerHTML = !destOn + ? '' + : ''; + rightPre.button.innerHTML = destOn + ? '' + : ''; + } + rightPre.button.onclick = function () { + opt.scalarWins[fieldKey] = "dest"; + setChoiceHeads(); + }; + leftPre.button.onclick = function () { + opt.scalarWins[fieldKey] = "source"; + setChoiceHeads(); + }; + setChoiceHeads(); + opts.appendChild(wrapper); + } + + scalarFieldRow( + "Title", + "title", + target.title, + sources.map(function (s) { return s.title; }) + ); + scalarFieldRow( + "Studio Code", + "code", + target.code, + sources.map(function (s) { return s.code; }) + ); + addFieldRow("URLs", "urls"); + scalarFieldRow( + "Date", + "date", + target.date, + sources.map(function (s) { return s.date; }) + ); + scalarFieldRow( + "Director", + "director", + target.director, + sources.map(function (s) { return s.director; }) + ); + scalarFieldRow( + "Studio", + "studio", + target.studio && (target.studio.name || ("Studio " + target.studio.id)), + sources.map(function (s) { + return s.studio && (s.studio.name || ("Studio " + s.studio.id)); + }) + ); + addFieldRow("Performers", "performers"); + addFieldRow("Groups", "groups"); + addFieldRow("Tags", "tags"); + scalarFieldRow( + "Details", + "details", + target.details, + sources.map(function (s) { return s.details; }) + ); + coverImageFieldRow(); + addFieldRow("Stash IDs", "stash_ids"); + addFieldRow("Galleries", "galleries"); + + modal.appendChild(opts); + + var autoLab = document.createElement("label"); + var autoCb = document.createElement("input"); + autoCb.type = "checkbox"; + autoCb.id = autoId; + autoCb.checked = state.autoCheckDefault; + autoLab.appendChild(autoCb); + autoLab.appendChild( + document.createTextNode( + " On Sync, mark source scene as duplicate." + ) + ); + modal.appendChild(autoLab); + + var actions = document.createElement("div"); + actions.className = "dr-modal-actions"; + + function close() { + if (overlay.parentNode) overlay.parentNode.removeChild(overlay); + } + + var btnCancel = document.createElement("button"); + btnCancel.className = "btn btn-secondary"; + btnCancel.textContent = "Cancel"; + btnCancel.onclick = close; + + var btnOk = document.createElement("button"); + btnOk.className = "btn btn-primary"; + btnOk.textContent = "Sync"; + btnOk.onclick = async function () { + btnOk.disabled = true; + try { + var input = buildSceneUpdateInput(target, sources, opt); + await inlineRemoteCoverImages(input); + await runSceneUpdate(input); + await refreshPlanAndDecorations(); + ensureStashIdBadges(); + if (autoCb.checked) { + var m = {}; + sources.forEach(function (s) { + m[s.id] = true; + }); + applyChecks(m); + } + close(); + notifyStashSuccess("Sync completed for scene " + target.id); + } catch (e) { + notifyStashError(e); + btnOk.disabled = false; + } + }; + + actions.appendChild(btnCancel); + actions.appendChild(btnOk); + modal.appendChild(actions); + overlay.appendChild(modal); + overlay.addEventListener("click", function (ev) { + if (ev.target === overlay) close(); + }); + document.body.appendChild(overlay); + } + + function sceneByIdInVisible(sid) { + var vis = visibleGroups(state.groups || []); + for (var i = 0; i < vis.length; i++) { + var g = vis[i]; + for (var j = 0; j < g.length; j++) { + if (String(g[j].id) === String(sid)) return { group: g, scene: g[j] }; + } + } + return null; + } + + function stashIdCountForScene(sceneId) { + return stashIdsForScene(sceneId).length; + } + + function stashIdsForScene(sceneId) { + if (!state.groups || !sceneId) return []; + var sid = String(sceneId); + for (var i = 0; i < state.groups.length; i++) { + var g = state.groups[i] || []; + for (var j = 0; j < g.length; j++) { + var s = g[j]; + if (String(s.id) === sid) return (s.stash_ids || []).slice(); + } + } + return []; + } + + function stashEndpointToSceneBase(endpoint) { + var e = String(endpoint || "").trim(); + if (!e) return ""; + if (/\/graphql\/?$/i.test(e)) return e.replace(/\/graphql\/?$/i, "/scenes"); + return e.replace(/\/+$/, "") + "/scenes"; + } + + function createStashIdBoxIcon() { + // Prefer the exact icon Stash already renders (faBox) so style matches 1:1. + var existingFaBox = document.querySelector( + "#scene-duplicate-checker td.scene-details svg[data-icon='box']" + ); + if (existingFaBox) { + var cloned = existingFaBox.cloneNode(true); + cloned.removeAttribute("width"); + cloned.removeAttribute("height"); + cloned.setAttribute("class", "dr-stashid-box-icon"); + return cloned; + } + // Fallback: original custom Stash-style box icon from prior script. + var svg = document.createElementNS("http://www.w3.org/2000/svg", "svg"); + svg.setAttribute("aria-hidden", "true"); + svg.setAttribute("focusable", "false"); + svg.setAttribute("viewBox", "0 0 444.185 444.184"); + svg.setAttribute("class", "dr-stashid-box-icon"); + [ + "M404.198,205.738c-0.917-0.656-2.096-0.83-3.165-0.467c0,0-119.009,40.477-122.261,41.598 c-2.725,0.938-4.487-1.42-4.487-1.42l-37.448-46.254c-0.935-1.154-2.492-1.592-3.89-1.098c-1.396,0.494-2.332,1.816-2.332,3.299 v167.891c0,1.168,0.583,2.26,1.556,2.91c0.584,0.391,1.263,0.59,1.945,0.59c0.451,0,0.906-0.088,1.336-0.267l168.045-69.438 c1.31-0.541,2.163-1.818,2.163-3.234v-91.266C405.66,207.456,405.116,206.397,404.198,205.738z", + "M443.487,168.221l-32.07-42.859c-0.46-0.615-1.111-1.061-1.852-1.27L223.141,71.456c-0.622-0.176-1.465-0.125-2.096,0.049 L34.62,124.141c-0.739,0.209-1.391,0.654-1.851,1.27L0.698,168.271c-0.672,0.898-0.872,2.063-0.541,3.133 c0.332,1.07,1.157,1.918,2.219,2.279l157.639,53.502c0.369,0.125,0.749,0.187,1.125,0.187c1.035,0,2.041-0.462,2.718-1.296 l44.128-54.391l13.082,3.6c0.607,0.168,1.249,0.168,1.857,0v-0.008c0.064-0.016,0.13-0.023,0.192-0.041l13.082-3.6l44.129,54.391 c0.677,0.834,1.683,1.295,2.718,1.295c0.376,0,0.756-0.061,1.125-0.186l157.639-53.502c1.062-0.361,1.887-1.209,2.219-2.279 C444.359,170.283,444.159,169.119,443.487,168.221z M222.192,160.381L88.501,123.856l133.691-37.527l133.494,37.479 L222.192,160.381z", + "M211.238,198.147c-1.396-0.494-2.955-0.057-3.889,1.098L169.901,245.5c0,0-1.764,2.356-4.488,1.42 c-3.252-1.121-122.26-41.598-122.26-41.598c-1.07-0.363-2.248-0.189-3.165,0.467c-0.918,0.658-1.462,1.717-1.462,2.846v91.267 c0,1.416,0.854,2.692,2.163,3.233l168.044,69.438c0.43,0.178,0.885,0.266,1.336,0.266c0.684,0,1.362-0.199,1.946-0.59 c0.972-0.65,1.555-1.742,1.555-2.91V201.445C213.57,199.963,212.635,198.641,211.238,198.147z" + ].forEach(function (d) { + var p = document.createElementNS("http://www.w3.org/2000/svg", "path"); + p.setAttribute("d", d); + p.setAttribute("fill", "currentColor"); + svg.appendChild(p); + }); + return svg; + } + + function ensureStashIdBadges() { + try { + var root = document.getElementById(ROOT_ID); + if (!root || !state.groups) return; + var rows = root.querySelectorAll("table.duplicate-checker-table tbody tr"); + rows.forEach(function (tr) { + if (tr.classList.contains("separator")) return; + var sid = sceneIdFromRow(tr); + if (!sid) return; + var stashIds = stashIdsForScene(sid).filter(function (s) { + return s && s.endpoint && s.stash_id; + }); + var count = stashIds.length; + var detailsTd = tr.querySelector("td.scene-details"); + if (!detailsTd) return; + var btnGroup = detailsTd.querySelector(".btn-group"); + if (!btnGroup) return; + + var existing = detailsTd.querySelector(".dr-stashid-btn"); + if (count <= 0) { + if (existing && existing.parentNode) existing.parentNode.removeChild(existing); + return; + } + if (!existing) { + var btn = document.createElement("button"); + btn.type = "button"; + btn.className = "minimal dr-stashid-btn"; + btn.setAttribute("title", "Stash IDs"); + btn.appendChild(createStashIdBoxIcon()); + var c = document.createElement("span"); + c.className = "dr-stashid-count"; + btn.appendChild(c); + btnGroup.insertBefore(btn, btnGroup.firstChild); + existing = btn; + } + var endpointList = Array.from( + new Set( + stashIds.map(function (s) { + return String(s.endpoint || "").trim(); + }) + ) + ).filter(function (x) { return !!x; }); + var title = endpointList.length + ? "Stash IDs:\n" + endpointList.join("\n") + : "Stash IDs"; + existing.setAttribute("title", title); + existing.classList.remove("dr-stashid-btn-link"); + existing.onclick = null; + existing.removeAttribute("aria-label"); + if (stashIds.length === 1) { + var single = stashIds[0]; + var sceneUrl = + stashEndpointToSceneBase(single.endpoint) + "/" + String(single.stash_id).trim(); + existing.classList.add("dr-stashid-btn-link"); + existing.setAttribute("aria-label", "Open stash scene"); + existing.onclick = function (ev) { + ev.preventDefault(); + window.open(sceneUrl, "_blank", "noopener,noreferrer"); + }; + } + + var countEl = existing.querySelector(".dr-stashid-count"); + if (countEl) countEl.textContent = String(count); + }); + } catch (_e) { + // Do not let badge rendering break duplicate checker page. + } + } + + function ensureToolbar() { + var root = document.getElementById(ROOT_ID); + if (!root) return; + var table = root.querySelector("table.duplicate-checker-table"); + if (!table || document.getElementById("duplicate-resolver-toolbar")) return; + + var bar = document.createElement("div"); + bar.id = "duplicate-resolver-toolbar"; + bar.hidden = true; + bar.innerHTML = + '
Smart Resolve
' + + '
' + + '' + + '" + + '' + + '' + + "
" + + '
' + + '" + + '" + + "
"; + + table.parentNode.insertBefore(bar, table); + + var drawerPanel = bar.querySelector("#dr-drawer-panel"); + var drawerToggle = bar.querySelector("#dr-drawer-toggle"); + drawerToggle.onclick = function () { + var open = drawerPanel.hidden; + drawerPanel.hidden = !open; + drawerToggle.setAttribute("aria-expanded", open ? "true" : "false"); + drawerToggle.textContent = open ? "Match Details: \u25bc" : "Match Details: \u25b6"; + }; + function setAutoSelectVisible(show) { + var b = bar.querySelector("#dr-btn-apply"); + if (!b) return; + b.hidden = !show; + } + + function setResetVisible(show) { + var b = bar.querySelector("#dr-btn-reset"); + if (!b) return; + b.hidden = !show; + } + + bar.querySelector("#dr-btn-reset").onclick = async function () { + var prev = bar.querySelector("#dr-preview-out"); + prev.textContent = "Loading…"; + state.loading = true; + setAutoSelectVisible(false); + updateUnresolvedButton(null, false); + setResetVisible(true); + try { + await loadDuplicateGroups(); + prev.textContent = + "Loaded " + (state.groups || []).length + " duplicate group(s)."; + state.lastPlan = buildPlan(); + } catch (e) { + prev.textContent = "Error: " + (e.message || e); + } + state.loading = false; + }; + + bar.querySelector("#dr-btn-apply").onclick = async function () { + if (!state.lastPlan || !state.lastPlan.checks) return; + applyChecks(state.lastPlan.checks); + renderInlineReasons(state.lastPlan); + renderSyncRecommendations(state.lastPlan); + }; + + bar.querySelector("#dr-btn-unresolved").onclick = function () { + goToFirstUnresolved(state.lastPlan); + }; + } + + function ensureRowButtons() { + var root = document.getElementById(ROOT_ID); + if (!root || !state.groups) return; + var table = root.querySelector("table.duplicate-checker-table"); + if (!table) return; + + var rows = table.querySelectorAll("tbody tr"); + rows.forEach(function (tr) { + if (tr.classList.contains("separator")) return; + var sid = sceneIdFromRow(tr); + if (!sid) return; + if (tr.querySelector(".duplicate-resolver-sync-btn")) return; + + var td = tr.querySelector("td:last-child"); + if (!td) return; + + var btn = document.createElement("button"); + btn.type = "button"; + btn.className = "btn btn-sm btn-secondary duplicate-resolver-sync-btn"; + btn.textContent = "Sync data"; + btn.setAttribute("data-scene-id", sid); + btn.onclick = function () { + if (!state.groups) { + loadDuplicateGroups() + .then(function () { + var info = sceneByIdInVisible(sid); + if (!info) { + notifyStashWarning( + "Scene not in current page groups — use Reset in the log drawer or change page." + ); + return; + } + showModal(info.scene, info.group); + }) + .catch(function (e) { + notifyStashError(e); + }); + return; + } + var info = sceneByIdInVisible(sid); + if (!info) { + notifyStashWarning( + "Scene not in current page groups — use Reset in the log drawer or change page." + ); + return; + } + showModal(info.scene, info.group); + }; + td.appendChild(btn); + }); + } + + function routeMatches() { + var p = window.location.pathname || ""; + return p === ROUTE || p.endsWith(ROUTE); + } + + function detachObserver() { + if (state.observer) { + state.observer.disconnect(); + state.observer = null; + } + state.attachedRoot = null; + } + + function clearRetryTimer() { + if (state.retryTimer) { + clearInterval(state.retryTimer); + state.retryTimer = null; + } + } + + function currentPageKey() { + var p = parseParams(); + return [p.page, p.size, p.distance, p.durationDiff].join("|"); + } + + function maybeRenderStashIdBadgesForPageChange() { + var key = currentPageKey(); + if (state.lastBadgePageKey === key) return; + state.lastBadgePageKey = key; + // New page/filter context: clear stale smart-resolve UI/plan and reload groups. + state.smartResolveUiActive = false; + state.lastPlan = null; + state.groups = null; + clearInlineReasons(); + renderSyncRecommendations(null); + setSmartResolveDetailsVisible(false, false); + loadDuplicateGroups() + .then(function () { + ensureStashIdBadges(); + }) + .catch(function () { + // Keep UI responsive even if data refresh fails transiently. + }); + } + + function applyDomEnhancements() { + if (state.applyingDomEnhancements) return; + state.applyingDomEnhancements = true; + try { + ensureToolbar(); + placeToolbarButtonsInCoreRow(); + ensureCoreSelectSmartResolveOption(); + ensureRowButtons(); + } finally { + state.applyingDomEnhancements = false; + } + } + + function attach() { + if (!routeMatches()) { + detachObserver(); + return; + } + var root = document.getElementById(ROOT_ID); + if (!root) return false; + if (state.attachedRoot === root && state.observer) { + applyDomEnhancements(); + maybeRenderStashIdBadgesForPageChange(); + return true; + } + + loadPluginSetting(); + + detachObserver(); + var obs = new MutationObserver(function () { + if (state.applyingDomEnhancements) return; + applyDomEnhancements(); + maybeRenderStashIdBadgesForPageChange(); + }); + obs.observe(root, { childList: true, subtree: true }); + state.observer = obs; + state.attachedRoot = root; + + applyDomEnhancements(); + loadDuplicateGroups() + .then(function () { + applyDomEnhancements(); + state.lastBadgePageKey = ""; + maybeRenderStashIdBadgesForPageChange(); + }) + .catch(function () { + /* table may still load */ + }); + return true; + } + + function scheduleAttachRetries() { + clearRetryTimer(); + // Stash is a SPA; route content can render after plugin script executes. + state.retryTimer = setInterval(function () { + try { + if (!routeMatches()) { + detachObserver(); + return; + } + if (attach()) { + clearRetryTimer(); + } + } catch (e) { + // Keep trying; do not permanently fail on transient render timing. + } + }, 500); + // Stop background retries after a minute if route never appears. + setTimeout(clearRetryTimer, 60000); + } + + installStashInlineNotifyBridge(); + + if (document.readyState === "loading") + document.addEventListener("DOMContentLoaded", function () { + attach(); + scheduleAttachRetries(); + }); + else { + attach(); + scheduleAttachRetries(); + } + + // Stash UI is a SPA; route changes do not reload plugin scripts. + window.addEventListener("stash:location", function () { + // Route changed: attempt immediate attach and keep retrying briefly. + setTimeout(function () { + attach(); + scheduleAttachRetries(); + }, 0); + }); +})(); diff --git a/plugins/SmartResolve/SmartResolve.yml b/plugins/SmartResolve/SmartResolve.yml new file mode 100644 index 00000000..627f6133 --- /dev/null +++ b/plugins/SmartResolve/SmartResolve.yml @@ -0,0 +1,96 @@ +name: Smart Resolver +description: Scene Duplicate Checker helper with Smart Select and mergeless Sync Data. Rules are processed in order to determine a primary keep candidate. Protection rules are then processed to determine if the non-primary scene should be marked for deletion. +version: 1.0.01 +url: https://github.com/Stash-KennyG/CommunityScripts/tree/main/plugins/DuplicateResolver +ui: + javascript: + - SmartResolve.js + css: + - SmartResolve.css +settings: + autoCheckAfterSync: + displayName: After Sync, mark source scenes for deletion + description: >- + Successfully synced source scenes are marked by default after sync. + type: BOOLEAN + ignoreRule01TotalPixels: + displayName: Ignore 01 - Most Total pixels + description: When enabled, will not eliminate candidate with lower total pixels than the highest width*height (1% tolerance). + type: BOOLEAN + ignoreRule02Framerate: + displayName: Ignore 02 - Highest Framerate + description: When enabled, will not eliminate candidate with lower framerate than the highest file framerate. + type: BOOLEAN + ignoreRule03Codec: + displayName: Ignore 03 - Codec tier + description: When enabled, will not eliminate candidate with lower codec quality tier (AV1 > H265 > H264 > others). + type: BOOLEAN + ignoreRule04Duration: + displayName: Ignore 04 - Longest Duration + description: When enabled, will not eliminate candidate with shorter duration than the longest duration (rounded to nearest second). + type: BOOLEAN + ignoreRule05SmallerSize: + displayName: Ignore 05 - Smaller file size + description: When enabled, will not eliminate candidate with larger file size than the smallest (tollerance max(1MB or 1%)). + type: BOOLEAN + ignoreRule05bUpgradeToken: + displayName: Ignore 05b - Upgrade token preference + description: When enabled, will not eliminate candidate with primary file path containing "upgrade". + type: BOOLEAN + ignoreRule06OlderDate: + displayName: Ignore 06 - Older date + description: When enabled, will not eliminate candidate with later scene date than the oldest scene date (null is latest). + type: BOOLEAN + ignoreRule07MoreGroups: + displayName: Ignore 07 - More groups + description: When enabled, will not eliminate candidate with fewer group associations than the most groups. + type: BOOLEAN + ignoreRule08HasStashId: + displayName: Ignore 08 - Has stash ID + description: When enabled, will not eliminate candidate with fewer stash IDs than the most stash IDs. + type: BOOLEAN + ignoreRule09MorePerformers: + displayName: Ignore 09 - More performers + description: When enabled, will not eliminate candidate with fewer performer associations than the most performer associations. + type: BOOLEAN + ignoreRule10MoreMarkers: + displayName: Ignore 10 - More markers + description: When enabled, will not eliminate candidate with fewer scene markers than the most scene markers. + type: BOOLEAN + ignoreRule11MoreTags: + displayName: Ignore 11 - More tags + description: When enabled, will not eliminate candidate with fewer tags than the most tags. + type: BOOLEAN + ignoreRule12LessAssociatedFiles: + displayName: Ignore 12 - Less associated files + description: When enabled, will not eliminate candidate with more associated file entries than the least associated file entries. + type: BOOLEAN + ignoreRule13MoreMetadataCardinality: + displayName: Ignore 13 - Metadata cardinality + description: When enabled, will not eliminate candidate with fewer total populated metadata elements than the most. + type: BOOLEAN + unprotectAOCount: + displayName: Unprotect O-count + description: When enabled, will permit marking for deletion scenes with O-count > 0. + type: BOOLEAN + unprotectBGroupAssociation: + + displayName: Unprotect Group association containment + description: When enabled, will permit marking for deletion scenes with group associations not present on the primary candidate. + type: BOOLEAN + unprotectCPerformerMismatch: + displayName: Unprotect Performer mismatch + description: When enabled, will permit marking for deletion scenes with performer associations not present on the primary candidate. + type: BOOLEAN + unprotectDTagLossGt1NonStashed: + displayName: Unprotect Tag loss >1 (non-stashed) + description: When enabled, will permit marking unstashed scenes for deletion with more than 1 less tags than the primary candidate. + type: BOOLEAN + unprotectEOlderDate: + displayName: Unprotect Older date + description: When enabled, will permit marking for deletion scenes with an older date than the primary candidate. + type: BOOLEAN + unprotectFIgnoreSmartResolveTag: + displayName: Unprotect Ignore:Smart Resolve tag + description: When enabled, will permit marking for deletion scenes tagged "Ignore:Smart Resolve". + type: BOOLEAN diff --git a/plugins/SmartResolve/about.png b/plugins/SmartResolve/about.png new file mode 100644 index 0000000000000000000000000000000000000000..935047789657088bf8fe64c6fac533d0813f186f GIT binary patch literal 227832 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

}q7UtY4K(eAP~~;$@<* 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

}gz2FkK7WKeC{em`bEZ!>nr)$wT-5xT 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 Date: Wed, 8 Apr 2026 13:33:08 -0400 Subject: [PATCH 2/3] Update SmartResolve plugin to improve synchronization behavior and version increment to 1.0.02. Added a function to determine if a refresh is needed after sync, optimizing group loading based on cache state. --- plugins/SmartResolve/SmartResolve.js | 20 +++++++++++++++++--- plugins/SmartResolve/SmartResolve.yml | 2 +- 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/plugins/SmartResolve/SmartResolve.js b/plugins/SmartResolve/SmartResolve.js index 90cb0875..03589fe5 100644 --- a/plugins/SmartResolve/SmartResolve.js +++ b/plugins/SmartResolve/SmartResolve.js @@ -563,6 +563,15 @@ } } + function shouldRefreshAfterSync() { + var p = parseParams(); + var distance = Number(p && p.distance) || 0; + var durationDiff = Number(p && p.durationDiff); + if (!Number.isFinite(durationDiff)) durationDiff = 1; + // Near-dupe mode can make duplicate query expensive; let user refresh manually. + return !(distance > 0 && durationDiff > 1); + } + function visibleGroups(groups) { var p = parseParams(); var start = (p.page - 1) * p.size; @@ -1271,8 +1280,11 @@ btn.onclick = async function () { setProcessingIndicator("spinner"); try { - // Always refresh after SPA table changes (pagination/deletes) to avoid stale state. - await loadDuplicateGroups(); + // Reuse already-loaded groups for this page/filter; only fetch when cache is missing/stale. + if (!state.groups || state.lastBadgePageKey !== currentPageKey()) { + await loadDuplicateGroups(); + state.lastBadgePageKey = currentPageKey(); + } // Use URL page-size for indicator mode. If absent/unparseable, assume 20. var pageSize = parseParams().size || 20; if (pageSize > 20) { @@ -2428,7 +2440,9 @@ var input = buildSceneUpdateInput(target, sources, opt); await inlineRemoteCoverImages(input); await runSceneUpdate(input); - await refreshPlanAndDecorations(); + if (shouldRefreshAfterSync()) { + await refreshPlanAndDecorations(); + } ensureStashIdBadges(); if (autoCb.checked) { var m = {}; diff --git a/plugins/SmartResolve/SmartResolve.yml b/plugins/SmartResolve/SmartResolve.yml index 627f6133..ec5ec3e2 100644 --- a/plugins/SmartResolve/SmartResolve.yml +++ b/plugins/SmartResolve/SmartResolve.yml @@ -1,6 +1,6 @@ name: Smart Resolver description: Scene Duplicate Checker helper with Smart Select and mergeless Sync Data. Rules are processed in order to determine a primary keep candidate. Protection rules are then processed to determine if the non-primary scene should be marked for deletion. -version: 1.0.01 +version: 1.0.02 url: https://github.com/Stash-KennyG/CommunityScripts/tree/main/plugins/DuplicateResolver ui: javascript: From beb9b7f28c5eae8105d9e1f2d11483adaa535e42 Mon Sep 17 00:00:00 2001 From: KennyG Date: Wed, 8 Apr 2026 13:54:29 -0400 Subject: [PATCH 3/3] Revert Smart Resolve query-cache reuse in selection flow. Restore unconditional duplicate-group reload when running Select Smart Resolve to avoid the browser instability introduced by cache-key reuse, while keeping sync no-refresh behavior unchanged. Made-with: Cursor --- plugins/SmartResolve/SmartResolve.js | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/plugins/SmartResolve/SmartResolve.js b/plugins/SmartResolve/SmartResolve.js index 03589fe5..09eb5abe 100644 --- a/plugins/SmartResolve/SmartResolve.js +++ b/plugins/SmartResolve/SmartResolve.js @@ -1280,11 +1280,8 @@ btn.onclick = async function () { setProcessingIndicator("spinner"); try { - // Reuse already-loaded groups for this page/filter; only fetch when cache is missing/stale. - if (!state.groups || state.lastBadgePageKey !== currentPageKey()) { - await loadDuplicateGroups(); - state.lastBadgePageKey = currentPageKey(); - } + // Always refresh to avoid stale state after SPA table changes (pagination/deletes). + await loadDuplicateGroups(); // Use URL page-size for indicator mode. If absent/unparseable, assume 20. var pageSize = parseParams().size || 20; if (pageSize > 20) {