mirror of
https://github.com/stashapp/CommunityScripts.git
synced 2026-04-20 11:06:18 -05:00
* fix dupeMarker deprecation, add delete mode * prettify --------- Co-authored-by: feederbox826 <feederbox826@users.noreply.github.com>
71 lines
2.0 KiB
Python
71 lines
2.0 KiB
Python
import json
|
|
import sys
|
|
import stashapi.log as log
|
|
from stashapi.stashapp import StashInterface
|
|
|
|
FRAGMENT = json.loads(sys.stdin.read())
|
|
MODE = FRAGMENT["args"]["mode"]
|
|
stash = StashInterface(FRAGMENT["server_connection"])
|
|
dupe_marker_tag = stash.find_tag("[Marker: Duplicate]", create=True).get("id")
|
|
|
|
def findScenesWithMarkers():
|
|
totalDupes = 0
|
|
scenes = stash.find_scenes(f={"has_markers": "true"}, fragment="id")
|
|
for scene in scenes:
|
|
totalDupes += checkScene(scene)
|
|
log.info("Found %d duplicate markers across %d scenes" % (totalDupes, len(scenes)))
|
|
|
|
def addMarkerTag(marker):
|
|
query = """
|
|
mutation SceneMarkerUpdate($input:SceneMarkerUpdateInput!) {
|
|
sceneMarkerUpdate(input: $input) {
|
|
id
|
|
}
|
|
}
|
|
"""
|
|
oldTags = [tag["id"] for tag in marker["tags"]]
|
|
if dupe_marker_tag in oldTags:
|
|
return
|
|
oldTags.append(dupe_marker_tag)
|
|
newMarker = {"id": marker["id"], "tag_ids": oldTags}
|
|
stash._callGraphQL(query, {"input": newMarker})
|
|
# stash.update_scene_marker(newMarker, "id")
|
|
|
|
|
|
def checkScene(scene):
|
|
seen = set()
|
|
dupes = []
|
|
markers = stash.get_scene_markers(scene["id"])
|
|
# find duplicate pairs
|
|
for marker in markers:
|
|
sortidx = ";".join(
|
|
[
|
|
str(marker["title"]),
|
|
str(marker["seconds"]),
|
|
str(marker["primary_tag"]["id"]),
|
|
]
|
|
)
|
|
if sortidx not in seen:
|
|
seen.add(sortidx)
|
|
else:
|
|
dupes.append(marker)
|
|
# add tag
|
|
if dupes:
|
|
log.debug("Found %d duplicate markers in scene %s" % (len(dupes), scene["id"]))
|
|
for dupe in dupes:
|
|
if MODE == "delete":
|
|
stash.destroy_scene_marker(dupe["id"])
|
|
else:
|
|
addMarkerTag(dupe)
|
|
return len(dupes)
|
|
|
|
def main():
|
|
if MODE == "mark":
|
|
findScenesWithMarkers()
|
|
elif MODE == "delete":
|
|
findScenesWithMarkers()
|
|
log.exit("Plugin exited normally.")
|
|
|
|
if __name__ == "__main__":
|
|
main()
|