1+ import stashapi .log as log
12from stashapi .stashapp import StashInterface
23import sys
34import json
45
56def 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
3671def 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):
64103config = stash .get_configuration ()
65104settings = {
66105 "excludeSceneWithTag" : "" ,
106+ "excludeSceneOrganized" : False
67107}
68108if "tagScenesWithPerfTags" in config ["plugins" ]:
69109 settings .update (config ["plugins" ]["tagScenesWithPerfTags" ])
0 commit comments