diff --git a/README.md b/README.md index db9933c..27b87f8 100644 --- a/README.md +++ b/README.md @@ -53,6 +53,7 @@ An example configuration is provided in the docker-compose.yml file. Configure t - `TA_TOKEN`: Tube Archivist API token, accessible from the settings page - `JF_URL`: Full URL where Jellyfin is reachable - `JF_TOKEN`: Jellyfin API token + - `JF_FOLDER`: Folder override if your folder is not named "YouTube" on your Filesystem. - `LISTEN_PORT`: Optionally change the port where the integration is listening for messages. Defaults to `8001`. If you change this, make sure to also change the json link for auto trigger as described below. Mount the `/youtube` folder from Tube Archivist also in this container at `/youtube` to give this integration access to the media archive. @@ -83,6 +84,7 @@ pip install requests - `ta_token`: Tube Archivist API token, accessible from the settings page - `jf_url`: Full URL where Jellyfin is reachable - `jf_token`: Jellyfin API token + - `jf_folder`: Name of the folder where TubeArchivist puts the files into Then run the script from the main folder with python, e.g. ```python diff --git a/app/src/config.py b/app/src/config.py index 7a27663..d30e51f 100644 --- a/app/src/config.py +++ b/app/src/config.py @@ -38,6 +38,7 @@ def get_config_env() -> ConfigType | Literal[False]: "ta_token": os.environ["TA_TOKEN"], "jf_url": os.environ["JF_URL"], "jf_token": os.environ["JF_TOKEN"], + "jf_folder": os.environ.get("JF_FOLDER", "youtube"), } return config_content diff --git a/app/src/connect.py b/app/src/connect.py index 7c41c1f..d12d982 100644 --- a/app/src/connect.py +++ b/app/src/connect.py @@ -9,7 +9,14 @@ from src.static_types import ConfigType, TAChannel, TAVideo CONFIG: ConfigType = get_config() TIMEOUT = 60 -EXPECTED_ENV = {"ta_url", "ta_token", "jf_url", "jf_token", "ta_video_path"} +EXPECTED_ENV = { + "ta_url", + "ta_token", + "jf_url", + "jf_token", + "ta_video_path", + "jf_folder", +} class Jellyfin: diff --git a/app/src/series.py b/app/src/series.py index 90d7512..987e6d3 100644 --- a/app/src/series.py +++ b/app/src/series.py @@ -22,8 +22,10 @@ class Library: """get collection id for youtube folder""" path: str = "Items?Recursive=true&includeItemTypes=Folder" folders: dict = Jellyfin().get(path) + folder_name: str = get_config()["jf_folder"] + for folder in folders["Items"]: - if folder.get("Name").lower() == "youtube": + if folder.get("Name").lower() == folder_name.lower(): return folder.get("Id") raise ValueError("youtube folder not found") @@ -76,7 +78,7 @@ class Library: ) Jellyfin().post(path, False) - for _ in range(12): + while True: response = Jellyfin().get("Library/VirtualFolders") for folder in response: if not folder["ItemId"] == collection_id: @@ -86,7 +88,7 @@ class Library: return print("waiting for library refresh") - sleep(5) + sleep(10) class Show: @@ -213,10 +215,13 @@ class Show: path: str = ( f"Items/{jf_id}/Refresh?Recursive=true&ImageRefreshMode=Default&MetadataRefreshMode=Default" # noqa: E501 ) + print(f"[setup] {path=}") Jellyfin().post(path, False) - for _ in range(12): + for _ in range(24): all_existing: set[str] = set(self._get_existing_seasons()) + print(f"[setup] seasons: {all_existing} {expected_season=}") + if expected_season in all_existing: return diff --git a/app/src/static_types.py b/app/src/static_types.py index bf011b1..ecf7fee 100644 --- a/app/src/static_types.py +++ b/app/src/static_types.py @@ -11,6 +11,7 @@ class ConfigType(TypedDict): ta_token: str jf_url: str jf_token: str + jf_folder: str class TAChannel(TypedDict): diff --git a/config.sample.json b/config.sample.json index 444b661..fab8ff2 100644 --- a/config.sample.json +++ b/config.sample.json @@ -3,5 +3,6 @@ "ta_url": "http://tubearchivist.local", "ta_token": "xxxxxxxxxxxxxxxx", "jf_url": "http://jellyfin.local:8096", - "jf_token": "yyyyyyyyyyyyyyyy" + "jf_token": "yyyyyyyyyyyyyyyy", + "jf_folder": "YouTube" } diff --git a/deploy.sh b/deploy.sh index 8ab1d49..f8181e7 100755 --- a/deploy.sh +++ b/deploy.sh @@ -17,12 +17,12 @@ function validate { echo "running black" black --force-exclude "migrations/*" --diff --color --check -l 79 "$check_path" echo "running codespell" - codespell --skip="./.git,./.venv,./.mypy_cache" "$check_path" + codespell --skip="./.git,./.venv,venv,./.mypy_cache" "$check_path" echo "running flake8" - flake8 "$check_path" --exclude "migrations,.venv" --count --max-complexity=10 \ + flake8 "$check_path" --exclude "migrations,.venv,venv" --count --max-complexity=10 \ --max-line-length=79 --show-source --statistics echo "running isort" - isort --skip "migrations" --skip ".venv" --check-only --diff --profile black -l 79 "$check_path" + isort --skip "migrations" --skip ".venv" --skip "venv" --check-only --diff --profile black -l 79 "$check_path" printf " \n> all validations passed\n" }