This commit is contained in:
Christoph Califice
2025-10-09 20:05:31 -03:00
parent ed22ef22bc
commit 0a5f88d75a
1442 changed files with 101562 additions and 0 deletions

View File

@@ -0,0 +1,132 @@
import json
import sys
from pathlib import Path
import py_common.graphql as graphql
import py_common.log as log
from py_common.config import get_config
from py_common.util import dig
config = get_config(
default="""
find_missing_galleries = False
"""
)
def get_gallery_id_by_path(abs_path):
abs_path = str(abs_path.resolve())
log.debug(f"Finding gallery associated with path '{abs_path}'")
query = """
query FindGalleries($galleries_filter: GalleryFilterType) {
findGalleries(gallery_filter: $galleries_filter filter: {per_page: -1}) {
galleries {
id
}
}
}
"""
variables = {
"galleries_filter": {"path": {"value": abs_path, "modifier": "EQUALS"}}
}
result = graphql.callGraphQL(query, variables)
if (
result is None
or (gallery_id := dig(result, "findGalleries", "galleries", 0, "id")) is None
):
log.error(
f"Found gallery with path '{abs_path}' but it needs to be added into Stash with a scan first"
)
exit(1)
log.debug(f"Found gallery {gallery_id} with path '{abs_path}'")
return gallery_id
def update_gallery(input):
log.debug(f"Updating gallery {input['id']}")
query = """
mutation GalleryUpdate($input : GalleryUpdateInput!) {
galleryUpdate(input: $input) {
id
title
}
}
"""
variables = {"input": input}
result = graphql.callGraphQL(query, variables)
if not result:
log.error(f"Failed to update gallery {input['id']}")
sys.exit(1)
g_id = result["galleryUpdate"]["id"]
g_title = result["galleryUpdate"]["title"]
log.info(f"Updated gallery {g_id}: {g_title}")
def add_galleries_to_scene(scene_id, gallery_ids):
data = {"id": scene_id, "gallery_ids": gallery_ids}
query = """
mutation SceneUpdate($input : SceneUpdateInput!) {
sceneUpdate(input: $input) {
id
title
}
}
"""
variables = {"input": data}
result = graphql.callGraphQL(query, variables)
if not result:
log.error(f"Failed to update scene {scene_id}")
sys.exit(1)
def find_galleries(scene_id, scene_path):
directory_path = Path(scene_path).parent
log.debug(f"Searching for galleries in {directory_path.resolve()}")
return [
get_gallery_id_by_path(f) for f in directory_path.glob("*.zip") if f.is_file()
]
FRAGMENT = json.loads(sys.stdin.read())
log.debug("FRAGMENT " + str(FRAGMENT))
SCENE_ID = FRAGMENT.get("id")
scene = graphql.getScene(SCENE_ID)
if not scene:
log.error(f"Scene with id '{SCENE_ID}' not found")
sys.exit(1)
gallery_ids = [g["id"] for g in scene["galleries"]]
if not gallery_ids and config.find_missing_galleries:
log.debug(
f"No galleries associated with scene {SCENE_ID}, searching for zips in folder..."
)
gallery_ids = find_galleries(SCENE_ID, scene["files"][0]["path"])
if not gallery_ids:
log.debug("No galleries found, exiting")
word = "gallery" if len(gallery_ids) == 1 else "galleries"
log.debug(f"Scene has {len(gallery_ids)} {word}: {','.join(gallery_ids)}")
gallery_input = {
"urls": scene["urls"],
"title": scene["title"],
"code": scene["code"],
"date": scene["date"],
"details": scene["details"],
"tag_ids": [t["id"] for t in scene["tags"]],
"performer_ids": [p["id"] for p in scene["performers"]],
"studio_id": dig(scene, "studio", "id"),
}
for gallery_id in gallery_ids:
update_gallery({"id": gallery_id, **gallery_input})
add_galleries_to_scene(SCENE_ID, gallery_ids)
print(json.dumps({}))

View File

@@ -0,0 +1,10 @@
name: "Copy to Gallery"
# requires: py_common
sceneByFragment:
action: script
script:
- python3
- CopyToGallery.py
# Last Updated January 02, 2024

View File

@@ -0,0 +1,10 @@
id: CopyToGallery
name: Copy to Gallery
metadata: {}
version: 60ce33b
date: "2024-03-14 12:14:13"
requires: []
source_repository: https://stashapp.github.io/CommunityScrapers/stable/index.yml
files:
- CopyToGallery.yml
- CopyToGallery.py