Add support for env file support, set via ENV_FILE
Signed-off-by: Luis Garcia <git@luigi311.com>
This commit is contained in:
@@ -5,7 +5,6 @@ import traceback
|
||||
import os
|
||||
from math import floor
|
||||
from typing import Any, Literal
|
||||
from dotenv import load_dotenv
|
||||
from packaging.version import parse, Version
|
||||
from loguru import logger
|
||||
|
||||
@@ -13,6 +12,7 @@ from src.functions import (
|
||||
search_mapping,
|
||||
log_marked,
|
||||
str_to_bool,
|
||||
get_env_value,
|
||||
)
|
||||
from src.watched import (
|
||||
LibraryData,
|
||||
@@ -24,14 +24,12 @@ from src.watched import (
|
||||
check_same_identifiers,
|
||||
)
|
||||
|
||||
load_dotenv(override=True)
|
||||
|
||||
generate_guids = str_to_bool(os.getenv("GENERATE_GUIDS", "True"))
|
||||
generate_locations = str_to_bool(os.getenv("GENERATE_LOCATIONS", "True"))
|
||||
|
||||
|
||||
def extract_identifiers_from_item(
|
||||
server_type: str, item: dict[str, Any]
|
||||
server_type: str,
|
||||
item: dict[str, Any],
|
||||
generate_guids: bool = True,
|
||||
generate_locations: bool = True,
|
||||
) -> MediaIdentifiers:
|
||||
title = item.get("Name")
|
||||
id = None
|
||||
@@ -72,9 +70,16 @@ def extract_identifiers_from_item(
|
||||
)
|
||||
|
||||
|
||||
def get_mediaitem(server_type: str, item: dict[str, Any]) -> MediaItem:
|
||||
def get_mediaitem(
|
||||
server_type: str,
|
||||
item: dict[str, Any],
|
||||
generate_guids: bool = True,
|
||||
generate_locations: bool = True,
|
||||
) -> MediaItem:
|
||||
return MediaItem(
|
||||
identifiers=extract_identifiers_from_item(server_type, item),
|
||||
identifiers=extract_identifiers_from_item(
|
||||
server_type, item, generate_guids, generate_locations
|
||||
),
|
||||
status=WatchedStatus(
|
||||
completed=item.get("UserData", {}).get("Played"),
|
||||
time=floor(
|
||||
@@ -87,18 +92,21 @@ def get_mediaitem(server_type: str, item: dict[str, Any]) -> MediaItem:
|
||||
class JellyfinEmby:
|
||||
def __init__(
|
||||
self,
|
||||
env,
|
||||
server_type: Literal["Jellyfin", "Emby"],
|
||||
base_url: str,
|
||||
token: str,
|
||||
headers: dict[str, str],
|
||||
) -> None:
|
||||
self.env = env
|
||||
|
||||
if server_type not in ["Jellyfin", "Emby"]:
|
||||
raise Exception(f"Server type {server_type} not supported")
|
||||
self.server_type: str = server_type
|
||||
self.base_url: str = base_url
|
||||
self.token: str = token
|
||||
self.headers: dict[str, str] = headers
|
||||
self.timeout: int = int(os.getenv("REQUEST_TIMEOUT", 300))
|
||||
self.timeout: int = int(get_env_value(self.env, "REQUEST_TIMEOUT", 300))
|
||||
|
||||
if not self.base_url:
|
||||
raise Exception(f"{self.server_type} base_url not set")
|
||||
@@ -327,7 +335,20 @@ class JellyfinEmby:
|
||||
movie["UserData"].get("Played")
|
||||
or movie["UserData"].get("PlaybackPositionTicks", 0) > 600000000
|
||||
):
|
||||
watched.movies.append(get_mediaitem(self.server_type, movie))
|
||||
watched.movies.append(
|
||||
get_mediaitem(
|
||||
self.server_type,
|
||||
movie,
|
||||
str_to_bool(
|
||||
get_env_value(self.env, "GENERATE_GUIDS", "True")
|
||||
),
|
||||
str_to_bool(
|
||||
get_env_value(
|
||||
self.env, "GENERATE_LOCATIONS", "True"
|
||||
)
|
||||
),
|
||||
)
|
||||
)
|
||||
|
||||
# TV Shows
|
||||
if library_type == "tvshows":
|
||||
@@ -394,7 +415,20 @@ class JellyfinEmby:
|
||||
> 600000000
|
||||
):
|
||||
episode_mediaitem.append(
|
||||
get_mediaitem(self.server_type, episode)
|
||||
get_mediaitem(
|
||||
self.server_type,
|
||||
episode,
|
||||
str_to_bool(
|
||||
get_env_value(
|
||||
self.env, "GENERATE_GUIDS", "True"
|
||||
)
|
||||
),
|
||||
str_to_bool(
|
||||
get_env_value(
|
||||
self.env, "GENERATE_LOCATIONS", "True"
|
||||
)
|
||||
),
|
||||
)
|
||||
)
|
||||
|
||||
if episode_mediaitem:
|
||||
@@ -529,6 +563,9 @@ class JellyfinEmby:
|
||||
user_name,
|
||||
library_name,
|
||||
jellyfin_video.get("Name"),
|
||||
mark_file=get_env_value(
|
||||
self.env, "MARK_FILE", "mark.log"
|
||||
),
|
||||
)
|
||||
elif self.update_partial:
|
||||
msg = f"{self.server_type}: {jellyfin_video.get('Name')} as partially watched for {floor(stored_movie.status.time / 60_000)} minutes for {user_name} in {library_name}"
|
||||
@@ -552,6 +589,9 @@ class JellyfinEmby:
|
||||
library_name,
|
||||
jellyfin_video.get("Name"),
|
||||
duration=floor(stored_movie.status.time / 60_000),
|
||||
mark_file=get_env_value(
|
||||
self.env, "MARK_FILE", "mark.log"
|
||||
),
|
||||
)
|
||||
else:
|
||||
logger.trace(
|
||||
@@ -636,6 +676,9 @@ class JellyfinEmby:
|
||||
library_name,
|
||||
jellyfin_episode.get("SeriesName"),
|
||||
jellyfin_episode.get("Name"),
|
||||
mark_file=get_env_value(
|
||||
self.env, "MARK_FILE", "mark.log"
|
||||
),
|
||||
)
|
||||
elif self.update_partial:
|
||||
msg = (
|
||||
@@ -667,6 +710,9 @@ class JellyfinEmby:
|
||||
duration=floor(
|
||||
stored_ep.status.time / 60_000
|
||||
),
|
||||
mark_file=get_env_value(
|
||||
self.env, "MARK_FILE", "mark.log"
|
||||
),
|
||||
)
|
||||
else:
|
||||
logger.trace(
|
||||
|
||||
Reference in New Issue
Block a user