def thread_function(q: Queue, thread_lock: threading.Lock, count: int, total: int, client: StashInterface):
    log.LogDebug(f"Created {threading.current_thread().name}")
    while not q.empty():
        image = q.get()

        image_data = {
            'id': image.get('id'),
            'title': image.get('title')
        }
        if image.get('rating'):
            image_data['rating'] = image.get('rating')
        if image.get('studio'):
            image_data['studio_id'] = image.get('studio').get('id')
        if image.get('performers'):
            performer_ids = [p.get('id') for p in image.get('performers')]
            image_data['performer_ids'] = performer_ids
        if image.get('tags'):
            tag_ids = [t.get('id') for t in image.get('tags')]
            image_data['tag_ids'] = tag_ids
        if image.get('galleries'):
            gallery_ids = [g.get('id') for g in image.get('galleries')]
            image_data['gallery_ids'] = gallery_ids

        client.updateImage(image_data)

        thread_lock.acquire()
        count += 1
        log.LogProgress(count / total)
        thread_lock.release()

        q.task_done()
    log.LogDebug(f"{threading.current_thread().name} finished")
    return True
Example #2
0
def run(json_input, output):
    mode_arg = json_input['args']['mode']

    try:
        client = StashInterface(json_input["server_connection"])
        if mode_arg == "" or mode_arg == "download":
            read_urls_and_download()
            client.scan_for_new_files()
        elif mode_arg == "tag":
            tag_scenes(client)
    except Exception:
        raise

    output["output"] = "ok"
Example #3
0
def run(json_input, output):
    mode_arg = json_input['args']['mode']

    try:
        if mode_arg == "" or mode_arg == "scrape":
            client = StashInterface(json_input["server_connection"])
            bulk_scrape(client)
        elif mode_arg == "create":
            client = StashInterface(json_input["server_connection"])
            add_tag(client)
        elif mode_arg == "remove":
            client = StashInterface(json_input["server_connection"])
            remove_tag(client)
    except Exception:
        raise

    output["output"] = "ok"
Example #4
0
def main():
    json_input = readJSONInput()

    client = StashInterface(json_input.get('server_connection'))
    add_ph_urls(client)

    output = {'output': 'ok'}

    print(json.dumps(output) + '\n')
Example #5
0
def run(input, output):
    modeArg = input['args']["mode"]

    try:
        if modeArg == "" or modeArg == "add":
            client = StashInterface(input["server_connection"])
            addTag(client)
        elif modeArg == "remove":
            client = StashInterface(input["server_connection"])
            removeTag(client)
        elif modeArg == "long":
            doLongTask()
        elif modeArg == "indef":
            doIndefiniteTask()
    except Exception as e:
        raise
        #output["error"] = str(e)
        #return

    output["output"] = "ok"
def main():
    json_input = readJSONInput()

    client = StashInterface(json_input.get('server_connection'))
    update_image_titles(client)

    output = {
        'output': 'ok'
    }

    print(json.dumps(output) + '\n')
Example #7
0
def run(json_input, output):
    mode_arg = json_input['args']['mode']

    try:
        if mode_arg == "" or mode_arg == "create":
            client = StashInterface(json_input["server_connection"])
            add_tag(client)
        elif mode_arg == "remove":
            client = StashInterface(json_input["server_connection"])
            remove_tag(client)
        elif mode_arg == "copy":
            client = StashInterface(json_input["server_connection"])
            copy_tags(client)
        elif mode_arg == "copyall":
            client = StashInterface(json_input["server_connection"])
            copy_all_tags(client)
        elif mode_arg == "studioImageCopy":
            client = StashInterface(json_input["server_connection"])
            image_studio_copy(client)
    except Exception:
        raise

    output["output"] = "ok"
def run(json_input, output):
    mode_arg = json_input['args']['mode']
    try:
        client = StashInterface(json_input["server_connection"])
        # Personnal things
        if mode_arg == "JAV":
            findScene(client, "1. JAV")
        if mode_arg == "Anime":
            findScene(client, "1. Anime")
        if mode_arg == "Western":
            findScene(client, "1. Western")
    except Exception:
        raise
    output["output"] = "ok"
Example #9
0
def update_entity(client: StashInterface, entity, entity_type: Entity,
                  scraped_data, create_missing_tags: bool,
                  create_missing_performers: bool,
                  create_missing_studios: bool, create_missing_movies: bool):
    # Create dict with entity data
    update_data = {'id': entity.get('id')}
    if scraped_data.get('title'):
        update_data['title'] = scraped_data.get('title')
    if scraped_data.get('details'):
        update_data['details'] = scraped_data.get('details')
    if scraped_data.get('date'):
        update_data['date'] = scraped_data.get('date')
    if entity_type is Entity.Scene:
        # Images are only supported for scenes
        if scraped_data.get('image'):
            update_data['cover_image'] = scraped_data.get('image')
    if scraped_data.get('tags'):
        tag_ids = list()
        for tag in scraped_data.get('tags'):
            if tag.get('stored_id'):
                tag_ids.append(tag.get('stored_id'))
            else:
                if create_missing_tags and tag.get('name') != "":
                    # Capitalize each word
                    tag_name = " ".join(x.capitalize()
                                        for x in tag.get('name').split(" "))
                    log.LogInfo(f'Create missing tag: {tag_name}')
                    tag_id = client.createTagWithName(tag_name)
                    if tag_id is not None:
                        tag_ids.append(tag_id)
        if len(tag_ids) > 0:
            update_data['tag_ids'] = tag_ids

    if scraped_data.get('performers'):
        performer_ids = list()
        for performer in scraped_data.get('performers'):
            if performer.get('stored_id'):
                performer_ids.append(performer.get('stored_id'))
            else:
                if create_missing_performers and performer.get('name') != "":
                    performer_name = " ".join(
                        x.capitalize()
                        for x in performer.get('name').split(" "))
                    log.LogInfo(f'Create missing performer: {performer_name}')
                    performer_id = client.createPerformerByName(performer_name)
                    if performer_id is not None:
                        performer_ids.append(performer_id)
        if len(performer_ids) > 0:
            update_data['performer_ids'] = performer_ids

    if scraped_data.get('studio'):
        studio = scraped_data.get('studio')
        if studio.get('stored_id'):
            update_data['studio_id'] = studio.get('stored_id')
        else:
            if create_missing_studios:
                studio_name = " ".join(x.capitalize()
                                       for x in studio.get('name').split(" "))
                log.LogInfo(f'Creating missing studio {studio_name}')
                studio_url = '{uri.scheme}://{uri.netloc}'.format(
                    uri=urlparse(entity.get('url')))
                studio_id = client.createStudio(studio_name, studio_url)
                if studio_id is not None:
                    update_data['studio_id'] = studio_id

    if scraped_data.get('movies'):
        movies = list()
        for movie in scraped_data.get('movies'):
            if movie.get('stored_id'):
                movies.append({'movie_id': movie.get('stored_id')})
            else:
                if create_missing_movies and movie.get('name') != '':
                    log.LogInfo(f'Create missing movie: {movie.get("name")}')
                    if movie.get('url') is not None and movie.get('url') != '':
                        movie_id = client.createMovie(movie.get('name'),
                                                      movie.get('url'))
                    else:
                        movie_id = client.createMovie(movie.get('name'))

                    if movie_id is not None:
                        movies.append({'movie_id': movie_id})
        if len(movies) > 0:
            update_data['movies'] = movies

    # Update entity with scraped scene data
    if entity_type is Entity.Scene:
        client.updateScene(update_data)
    elif entity_type is Entity.Gallery:
        client.updateGallery(update_data)
    else:
        raise TypeError(f"Unexpected Entity type: {entity_type}")