Add server type and name to marklog

Signed-off-by: Luis Garcia <git@luigi311.com>
This commit is contained in:
Luis Garcia
2024-10-27 16:31:30 -06:00
parent a5995d3999
commit 7294241fed
5 changed files with 91 additions and 41 deletions

View File

@@ -37,12 +37,18 @@ def logger(message: str, log_type=0):
def log_marked( def log_marked(
username: str, library: str, movie_show: str, episode: str = None, duration=None server_type: str,
server_name: str,
username: str,
library: str,
movie_show: str,
episode: str = None,
duration=None,
): ):
if mark_file is None: if mark_file is None:
return return
output = f"{username}/{library}/{movie_show}" output = f"{server_type}/{server_name}/{username}/{library}/{movie_show}"
if episode: if episode:
output += f"/{episode}" output += f"/{episode}"
@@ -92,6 +98,7 @@ def search_mapping(dictionary: dict, key_value: str):
else: else:
return None return None
# Return list of objects that exist in both lists including mappings # Return list of objects that exist in both lists including mappings
def match_list(list1, list2, list_mapping=None): def match_list(list1, list2, list_mapping=None):
output = [] output = []
@@ -105,6 +112,7 @@ def match_list(list1, list2, list_mapping=None):
return output return output
def future_thread_executor( def future_thread_executor(
args: list, threads: int = None, override_threads: bool = False args: list, threads: int = None, override_threads: bool = False
): ):

View File

@@ -109,7 +109,6 @@ class JellyfinEmby:
def __init__(self, server_type, baseurl, token, headers): def __init__(self, server_type, baseurl, token, headers):
if server_type not in ["Jellyfin", "Emby"]: if server_type not in ["Jellyfin", "Emby"]:
raise Exception(f"Server type {server_type} not supported") raise Exception(f"Server type {server_type} not supported")
self.server_type = server_type self.server_type = server_type
self.baseurl = baseurl self.baseurl = baseurl
self.token = token self.token = token
@@ -124,6 +123,7 @@ class JellyfinEmby:
self.session = requests.Session() self.session = requests.Session()
self.users = self.get_users() self.users = self.get_users()
self.server_name = self.info(name_only=True)
def query(self, query, query_type, identifiers=None, json=None): def query(self, query, query_type, identifiers=None, json=None):
try: try:
@@ -175,13 +175,15 @@ class JellyfinEmby:
) )
raise Exception(e) raise Exception(e)
def info(self) -> str: def info(self, name_only: bool = False) -> str:
try: try:
query_string = "/System/Info/Public" query_string = "/System/Info/Public"
response = self.query(query_string, "get") response = self.query(query_string, "get")
if response: if response:
if name_only:
return f"{response['ServerName']}"
return f"{self.server_type} {response['ServerName']}: {response['Version']}" return f"{self.server_type} {response['ServerName']}: {response['Version']}"
else: else:
return None return None
@@ -223,7 +225,7 @@ class JellyfinEmby:
def get_libraries(self): def get_libraries(self):
try: try:
libraries = {} libraries = {}
# Theres no way to get all libraries so individually get list of libraries from all users # Theres no way to get all libraries so individually get list of libraries from all users
users = self.get_users() users = self.get_users()
@@ -256,12 +258,12 @@ class JellyfinEmby:
) )
else: else:
libraries[library_title] = str(types) libraries[library_title] = str(types)
return libraries return libraries
except Exception as e: except Exception as e:
logger(f"{self.server_type}: Get libraries failed {e}", 2) logger(f"{self.server_type}: Get libraries failed {e}", 2)
raise Exception(e) raise Exception(e)
def get_user_library_watched( def get_user_library_watched(
self, user_name, user_id, library_type, library_id, library_title self, user_name, user_id, library_type, library_id, library_title
): ):
@@ -393,9 +395,7 @@ class JellyfinEmby:
if show_guids not in user_watched[library_title]: if show_guids not in user_watched[library_title]:
user_watched[library_title][show_guids] = [] user_watched[library_title][show_guids] = []
user_watched[library_title][ user_watched[library_title][show_guids] = mark_episodes_list
show_guids
] = mark_episodes_list
for episode in mark_episodes_list: for episode in mark_episodes_list:
logger( logger(
f"{self.server_type}: Added {episode} to {user_name} {show_display_name} watched list", f"{self.server_type}: Added {episode} to {user_name} {show_display_name} watched list",
@@ -407,9 +407,7 @@ class JellyfinEmby:
1, 1,
) )
if library_title in user_watched: if library_title in user_watched:
logger( logger(f"{self.server_type}: {user_watched[library_title]}", 3)
f"{self.server_type}: {user_watched[library_title]}", 3
)
return user_watched return user_watched
except Exception as e: except Exception as e:
@@ -421,11 +419,7 @@ class JellyfinEmby:
logger(traceback.format_exc(), 2) logger(traceback.format_exc(), 2)
return {} return {}
def get_watched( def get_watched(self, users, sync_libraries):
self,
users,
sync_libraries
):
try: try:
users_watched = {} users_watched = {}
watched = [] watched = []
@@ -479,7 +473,6 @@ class JellyfinEmby:
library_title, library_title,
) )
if user_name.lower() not in users_watched: if user_name.lower() not in users_watched:
users_watched[user_name.lower()] = {} users_watched[user_name.lower()] = {}
users_watched[user_name.lower()].update(watched) users_watched[user_name.lower()].update(watched)
@@ -546,6 +539,8 @@ class JellyfinEmby:
logger(msg, 6) logger(msg, 6)
log_marked( log_marked(
self.server_type,
self.server_name,
user_name, user_name,
library, library,
jellyfin_video.get("Name"), jellyfin_video.get("Name"),
@@ -568,6 +563,8 @@ class JellyfinEmby:
logger(msg, 6) logger(msg, 6)
log_marked( log_marked(
self.server_type,
self.server_name,
user_name, user_name,
library, library,
jellyfin_video.get("Name"), jellyfin_video.get("Name"),
@@ -674,6 +671,8 @@ class JellyfinEmby:
logger(msg, 6) logger(msg, 6)
log_marked( log_marked(
self.server_type,
self.server_name,
user_name, user_name,
library, library,
jellyfin_episode.get("SeriesName"), jellyfin_episode.get("SeriesName"),
@@ -702,6 +701,8 @@ class JellyfinEmby:
logger(msg, 6) logger(msg, 6)
log_marked( log_marked(
self.server_type,
self.server_name,
user_name, user_name,
library, library,
jellyfin_episode.get("SeriesName"), jellyfin_episode.get("SeriesName"),

View File

@@ -129,8 +129,14 @@ def check_whitelist_logic(
return skip_reason return skip_reason
def filter_libaries( def filter_libaries(
server_libraries, blacklist_library, blacklist_library_type, whitelist_library, whitelist_library_type, library_mapping=None server_libraries,
blacklist_library,
blacklist_library_type,
whitelist_library,
whitelist_library_type,
library_mapping=None,
): ):
filtered_libaries = [] filtered_libaries = []
for library in server_libraries: for library in server_libraries:
@@ -145,9 +151,7 @@ def filter_libaries(
) )
if skip_reason: if skip_reason:
logger( logger(f"Skipping library {library}: {skip_reason}", 1)
f"Skipping library {library}: {skip_reason}", 1
)
continue continue
filtered_libaries.append(library) filtered_libaries.append(library)
@@ -156,7 +160,13 @@ def filter_libaries(
def setup_libraries( def setup_libraries(
server_1, server_2, blacklist_library, blacklist_library_type, whitelist_library, whitelist_library_type, library_mapping=None server_1,
server_2,
blacklist_library,
blacklist_library_type,
whitelist_library,
whitelist_library_type,
library_mapping=None,
): ):
server_1_libraries = server_1.get_libraries() server_1_libraries = server_1.get_libraries()
server_2_libraries = server_2.get_libraries() server_2_libraries = server_2.get_libraries()
@@ -164,11 +174,29 @@ def setup_libraries(
logger(f"Server 2 libraries: {server_2_libraries}", 1) logger(f"Server 2 libraries: {server_2_libraries}", 1)
# Filter out all blacklist, whitelist libaries # Filter out all blacklist, whitelist libaries
filtered_server_1_libraries = filter_libaries(server_1_libraries, blacklist_library, blacklist_library_type, whitelist_library, whitelist_library_type, library_mapping) filtered_server_1_libraries = filter_libaries(
filtered_server_2_libraries = filter_libaries(server_2_libraries, blacklist_library, blacklist_library_type, whitelist_library, whitelist_library_type, library_mapping) server_1_libraries,
blacklist_library,
blacklist_library_type,
whitelist_library,
whitelist_library_type,
library_mapping,
)
filtered_server_2_libraries = filter_libaries(
server_2_libraries,
blacklist_library,
blacklist_library_type,
whitelist_library,
whitelist_library_type,
library_mapping,
)
output_server_1_libaries = match_list(filtered_server_1_libraries, filtered_server_2_libraries, library_mapping) output_server_1_libaries = match_list(
output_server_2_libaries = match_list(filtered_server_2_libraries, filtered_server_1_libraries, library_mapping) filtered_server_1_libraries, filtered_server_2_libraries, library_mapping
)
output_server_2_libaries = match_list(
filtered_server_2_libraries, filtered_server_1_libraries, library_mapping
)
return output_server_1_libaries, output_server_2_libaries return output_server_1_libaries, output_server_2_libaries

View File

@@ -155,19 +155,23 @@ def main_loop():
) )
server_1_libraries, server_2_libraries = setup_libraries( server_1_libraries, server_2_libraries = setup_libraries(
server_1[1], server_2[1], blacklist_library, blacklist_library_type, whitelist_library, whitelist_library_type, library_mapping server_1[1],
server_2[1],
blacklist_library,
blacklist_library_type,
whitelist_library,
whitelist_library_type,
library_mapping,
) )
logger("Creating watched lists", 1) logger("Creating watched lists", 1)
server_1_watched = server_1[1].get_watched( server_1_watched = server_1[1].get_watched(
server_1_users, server_1_users, server_1_libraries
server_1_libraries
) )
logger("Finished creating watched list server 1", 1) logger("Finished creating watched list server 1", 1)
server_2_watched = server_2[1].get_watched( server_2_watched = server_2[1].get_watched(
server_2_users, server_2_users, server_2_libraries
server_2_libraries
) )
logger("Finished creating watched list server 2", 1) logger("Finished creating watched list server 2", 1)

View File

@@ -317,7 +317,15 @@ def update_user_watched(user, user_plex, library, videos, dryrun):
else: else:
logger(msg, 6) logger(msg, 6)
log_marked(user.title, library, movies_search.title, None, None) log_marked(
"Plex",
user_plex.friendlyName,
user.title,
library,
movies_search.title,
None,
None,
)
elif video_status["time"] > 60_000: elif video_status["time"] > 60_000:
msg = f"Plex: {movies_search.title} as partially watched for {floor(video_status['time'] / 60_000)} minutes for {user.title} in {library}" msg = f"Plex: {movies_search.title} as partially watched for {floor(video_status['time'] / 60_000)} minutes for {user.title} in {library}"
if not dryrun: if not dryrun:
@@ -327,6 +335,8 @@ def update_user_watched(user, user_plex, library, videos, dryrun):
logger(msg, 6) logger(msg, 6)
log_marked( log_marked(
"Plex",
user_plex.friendlyName,
user.title, user.title,
library, library,
movies_search.title, movies_search.title,
@@ -358,6 +368,8 @@ def update_user_watched(user, user_plex, library, videos, dryrun):
logger(msg, 6) logger(msg, 6)
log_marked( log_marked(
"Plex",
user_plex.friendlyName,
user.title, user.title,
library, library,
show_search.title, show_search.title,
@@ -372,6 +384,8 @@ def update_user_watched(user, user_plex, library, videos, dryrun):
logger(msg, 6) logger(msg, 6)
log_marked( log_marked(
"Plex",
user_plex.friendlyName,
user.title, user.title,
library, library,
show_search.title, show_search.title,
@@ -477,18 +491,13 @@ class Plex:
library_type = library.type library_type = library.type
output[library_title] = library_type output[library_title] = library_type
return output return output
except Exception as e: except Exception as e:
logger(f"Plex: Failed to get libraries, Error: {e}", 2) logger(f"Plex: Failed to get libraries, Error: {e}", 2)
raise Exception(e) raise Exception(e)
def get_watched( def get_watched(self, users, sync_libraries):
self,
users,
sync_libraries
):
try: try:
# Get all libraries # Get all libraries
users_watched = {} users_watched = {}