Skip to content

Commit cda00bb

Browse files
committed
tagScenesWithPerfTags bulk processing respects exclussions now
bulk procewssing also logs progress now, as it is a potentially very long runnign task
1 parent b4eadfa commit cda00bb

File tree

1 file changed

+49
-14
lines changed

1 file changed

+49
-14
lines changed

plugins/tagScenesWithPerfTags/tagScenesWithPerfTags.py

Lines changed: 49 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"
39+
}
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"
2947
}
30-
)
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):

0 commit comments

Comments
 (0)