Skip to content

Commit 16dab7b

Browse files
authored
tagScenesWithPerfTags: exclude organized (#579)
1 parent 5e98864 commit 16dab7b

File tree

2 files changed

+59
-15
lines changed

2 files changed

+59
-15
lines changed

plugins/tagScenesWithPerfTags/tagScenesWithPerfTags.py

Lines changed: 54 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,15 @@
1+
import stashapi.log as log
12
from stashapi.stashapp import StashInterface
23
import sys
34
import json
45

56
def processAll():
7+
exclusion_marker_tag_id = None
8+
if settings["excludeSceneWithTag"] != "":
9+
exclussion_marker_tag = stash.find_tag(settings["excludeSceneWithTag"])
10+
if exclussion_marker_tag is not None:
11+
exclusion_marker_tag_id = exclussion_marker_tag['id']
12+
613
query = {
714
"tags": {
815
"modifier": "NOT_NULL",
@@ -12,25 +19,53 @@ def processAll():
1219
"value": 0,
1320
},
1421
}
15-
performersTotal = stash.find_performers(f=query, get_count=True)[0]
22+
performersTotal = stash.find_performers(f=query, filter={"page": 0, "per_page": 0}, get_count=True)[0]
1623
i = 0
17-
tags = []
18-
scenes = []
1924
while i < performersTotal:
25+
log.progress((i / performersTotal))
26+
2027
perf = stash.find_performers(f=query, filter={"page": i, "per_page": 1})
21-
for tag in perf[0]["tags"]:
22-
tags.append(tag["id"])
23-
for scene in perf[0]["scenes"]:
24-
scenes.append(scene["id"])
25-
stash.update_scenes(
26-
{
27-
"ids": scenes,
28-
"tag_ids": {"mode": "ADD", "ids": tags},
28+
29+
performer_tags_ids = []
30+
performer_tags_names = []
31+
for performer_tag in perf[0]["tags"]:
32+
performer_tags_ids.append(performer_tag["id"])
33+
performer_tags_names.append(performer_tag["name"])
34+
35+
scene_query = {
36+
"performers": {
37+
"value": [perf[0]["id"]],
38+
"modifier": "INCLUDES_ALL"
2939
}
30-
)
40+
}
41+
if settings['excludeSceneOrganized']:
42+
scene_query["organized"] = False
43+
if exclusion_marker_tag_id is not None:
44+
scene_query["tags"] = {
45+
"value": [exclusion_marker_tag_id],
46+
"modifier": "EXCLUDES"
47+
}
48+
49+
performer_scene_count = stash.find_scenes(f=scene_query, filter={"page": 0, "per_page": 0}, get_count=True)[0]
50+
51+
if performer_scene_count > 0:
52+
log.info(f"updating {performer_scene_count} scenes of performer \"{ perf[0]['name']}\" with tags {performer_tags_names}")
53+
54+
performer_scene_page_size = 100
55+
performer_scene_page = 0
56+
while performer_scene_page * performer_scene_page_size < performer_scene_count:
57+
performer_scenes = stash.find_scenes(f=scene_query, filter={"page": performer_scene_page, "per_page": performer_scene_page_size}, fragment='id')
58+
performer_scene_ids = [performer_scene['id'] for performer_scene in performer_scenes]
59+
60+
stash.update_scenes(
61+
{
62+
"ids": performer_scene_ids,
63+
"tag_ids": {"mode": "ADD", "ids": performer_tags_ids},
64+
}
65+
)
66+
performer_scene_page += 1
67+
3168
i = i + 1
32-
tags = []
33-
scenes = []
3469

3570

3671
def processScene(scene):
@@ -42,6 +77,10 @@ def processScene(scene):
4277
if tag["name"] == settings["excludeSceneWithTag"]:
4378
should_tag = False
4479
break
80+
81+
if settings['excludeSceneOrganized']:
82+
if scene['organized']:
83+
should_tag = False
4584

4685
if should_tag:
4786
for perf in scene["performers"]:
@@ -64,6 +103,7 @@ def processScene(scene):
64103
config = stash.get_configuration()
65104
settings = {
66105
"excludeSceneWithTag": "",
106+
"excludeSceneOrganized": False
67107
}
68108
if "tagScenesWithPerfTags" in config["plugins"]:
69109
settings.update(config["plugins"]["tagScenesWithPerfTags"])

plugins/tagScenesWithPerfTags/tagScenesWithPerfTags.yml

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
name: Tag Scenes From Performer Tags
22
description: tags scenes with performer tags.
3-
version: 0.2.1
3+
version: 0.2.2
44
exec:
55
- python
66
- "{pluginDir}/tagScenesWithPerfTags.py"
@@ -14,6 +14,10 @@ hooks:
1414
- Scene.Create.Post
1515

1616
settings:
17+
excludeSceneOrganized:
18+
displayName: Exclude Scenes marked as organized
19+
description: Do not automatically tag scenes with performer tags if the scene is marked as organized
20+
type: BOOLEAN
1721
excludeSceneWithTag:
1822
displayName: Exclude Scenes with Tag from Hook
1923
description: Do not automatically tag scenes with performer tags if the scene has this tag

0 commit comments

Comments
 (0)