Add server type and name to marklog
Signed-off-by: Luis Garcia <git@luigi311.com>
This commit is contained in:
@@ -37,12 +37,18 @@ def logger(message: str, log_type=0):
|
||||
|
||||
|
||||
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:
|
||||
return
|
||||
|
||||
output = f"{username}/{library}/{movie_show}"
|
||||
output = f"{server_type}/{server_name}/{username}/{library}/{movie_show}"
|
||||
|
||||
if episode:
|
||||
output += f"/{episode}"
|
||||
@@ -92,6 +98,7 @@ def search_mapping(dictionary: dict, key_value: str):
|
||||
else:
|
||||
return None
|
||||
|
||||
|
||||
# Return list of objects that exist in both lists including mappings
|
||||
def match_list(list1, list2, list_mapping=None):
|
||||
output = []
|
||||
@@ -105,6 +112,7 @@ def match_list(list1, list2, list_mapping=None):
|
||||
|
||||
return output
|
||||
|
||||
|
||||
def future_thread_executor(
|
||||
args: list, threads: int = None, override_threads: bool = False
|
||||
):
|
||||
|
||||
@@ -109,7 +109,6 @@ class JellyfinEmby:
|
||||
def __init__(self, server_type, baseurl, token, headers):
|
||||
if server_type not in ["Jellyfin", "Emby"]:
|
||||
raise Exception(f"Server type {server_type} not supported")
|
||||
|
||||
self.server_type = server_type
|
||||
self.baseurl = baseurl
|
||||
self.token = token
|
||||
@@ -124,6 +123,7 @@ class JellyfinEmby:
|
||||
|
||||
self.session = requests.Session()
|
||||
self.users = self.get_users()
|
||||
self.server_name = self.info(name_only=True)
|
||||
|
||||
def query(self, query, query_type, identifiers=None, json=None):
|
||||
try:
|
||||
@@ -175,13 +175,15 @@ class JellyfinEmby:
|
||||
)
|
||||
raise Exception(e)
|
||||
|
||||
def info(self) -> str:
|
||||
def info(self, name_only: bool = False) -> str:
|
||||
try:
|
||||
query_string = "/System/Info/Public"
|
||||
|
||||
response = self.query(query_string, "get")
|
||||
|
||||
if response:
|
||||
if name_only:
|
||||
return f"{response['ServerName']}"
|
||||
return f"{self.server_type} {response['ServerName']}: {response['Version']}"
|
||||
else:
|
||||
return None
|
||||
@@ -223,7 +225,7 @@ class JellyfinEmby:
|
||||
def get_libraries(self):
|
||||
try:
|
||||
libraries = {}
|
||||
|
||||
|
||||
# Theres no way to get all libraries so individually get list of libraries from all users
|
||||
users = self.get_users()
|
||||
|
||||
@@ -256,12 +258,12 @@ class JellyfinEmby:
|
||||
)
|
||||
else:
|
||||
libraries[library_title] = str(types)
|
||||
|
||||
|
||||
return libraries
|
||||
except Exception as e:
|
||||
logger(f"{self.server_type}: Get libraries failed {e}", 2)
|
||||
raise Exception(e)
|
||||
|
||||
|
||||
def get_user_library_watched(
|
||||
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]:
|
||||
user_watched[library_title][show_guids] = []
|
||||
|
||||
user_watched[library_title][
|
||||
show_guids
|
||||
] = mark_episodes_list
|
||||
user_watched[library_title][show_guids] = mark_episodes_list
|
||||
for episode in mark_episodes_list:
|
||||
logger(
|
||||
f"{self.server_type}: Added {episode} to {user_name} {show_display_name} watched list",
|
||||
@@ -407,9 +407,7 @@ class JellyfinEmby:
|
||||
1,
|
||||
)
|
||||
if library_title in user_watched:
|
||||
logger(
|
||||
f"{self.server_type}: {user_watched[library_title]}", 3
|
||||
)
|
||||
logger(f"{self.server_type}: {user_watched[library_title]}", 3)
|
||||
|
||||
return user_watched
|
||||
except Exception as e:
|
||||
@@ -421,11 +419,7 @@ class JellyfinEmby:
|
||||
logger(traceback.format_exc(), 2)
|
||||
return {}
|
||||
|
||||
def get_watched(
|
||||
self,
|
||||
users,
|
||||
sync_libraries
|
||||
):
|
||||
def get_watched(self, users, sync_libraries):
|
||||
try:
|
||||
users_watched = {}
|
||||
watched = []
|
||||
@@ -479,7 +473,6 @@ class JellyfinEmby:
|
||||
library_title,
|
||||
)
|
||||
|
||||
|
||||
if user_name.lower() not in users_watched:
|
||||
users_watched[user_name.lower()] = {}
|
||||
users_watched[user_name.lower()].update(watched)
|
||||
@@ -546,6 +539,8 @@ class JellyfinEmby:
|
||||
logger(msg, 6)
|
||||
|
||||
log_marked(
|
||||
self.server_type,
|
||||
self.server_name,
|
||||
user_name,
|
||||
library,
|
||||
jellyfin_video.get("Name"),
|
||||
@@ -568,6 +563,8 @@ class JellyfinEmby:
|
||||
logger(msg, 6)
|
||||
|
||||
log_marked(
|
||||
self.server_type,
|
||||
self.server_name,
|
||||
user_name,
|
||||
library,
|
||||
jellyfin_video.get("Name"),
|
||||
@@ -674,6 +671,8 @@ class JellyfinEmby:
|
||||
logger(msg, 6)
|
||||
|
||||
log_marked(
|
||||
self.server_type,
|
||||
self.server_name,
|
||||
user_name,
|
||||
library,
|
||||
jellyfin_episode.get("SeriesName"),
|
||||
@@ -702,6 +701,8 @@ class JellyfinEmby:
|
||||
logger(msg, 6)
|
||||
|
||||
log_marked(
|
||||
self.server_type,
|
||||
self.server_name,
|
||||
user_name,
|
||||
library,
|
||||
jellyfin_episode.get("SeriesName"),
|
||||
|
||||
@@ -129,8 +129,14 @@ def check_whitelist_logic(
|
||||
|
||||
return skip_reason
|
||||
|
||||
|
||||
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 = []
|
||||
for library in server_libraries:
|
||||
@@ -145,9 +151,7 @@ def filter_libaries(
|
||||
)
|
||||
|
||||
if skip_reason:
|
||||
logger(
|
||||
f"Skipping library {library}: {skip_reason}", 1
|
||||
)
|
||||
logger(f"Skipping library {library}: {skip_reason}", 1)
|
||||
continue
|
||||
|
||||
filtered_libaries.append(library)
|
||||
@@ -156,7 +160,13 @@ def filter_libaries(
|
||||
|
||||
|
||||
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_2_libraries = server_2.get_libraries()
|
||||
@@ -164,11 +174,29 @@ def setup_libraries(
|
||||
logger(f"Server 2 libraries: {server_2_libraries}", 1)
|
||||
|
||||
# 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_2_libraries = filter_libaries(server_2_libraries, blacklist_library, blacklist_library_type, whitelist_library, whitelist_library_type, library_mapping)
|
||||
filtered_server_1_libraries = filter_libaries(
|
||||
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_2_libaries = match_list(filtered_server_2_libraries, filtered_server_1_libraries, library_mapping)
|
||||
output_server_1_libaries = match_list(
|
||||
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
|
||||
|
||||
|
||||
14
src/main.py
14
src/main.py
@@ -155,19 +155,23 @@ def main_loop():
|
||||
)
|
||||
|
||||
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)
|
||||
server_1_watched = server_1[1].get_watched(
|
||||
server_1_users,
|
||||
server_1_libraries
|
||||
server_1_users, server_1_libraries
|
||||
)
|
||||
logger("Finished creating watched list server 1", 1)
|
||||
|
||||
server_2_watched = server_2[1].get_watched(
|
||||
server_2_users,
|
||||
server_2_libraries
|
||||
server_2_users, server_2_libraries
|
||||
)
|
||||
logger("Finished creating watched list server 2", 1)
|
||||
|
||||
|
||||
25
src/plex.py
25
src/plex.py
@@ -317,7 +317,15 @@ def update_user_watched(user, user_plex, library, videos, dryrun):
|
||||
else:
|
||||
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:
|
||||
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:
|
||||
@@ -327,6 +335,8 @@ def update_user_watched(user, user_plex, library, videos, dryrun):
|
||||
logger(msg, 6)
|
||||
|
||||
log_marked(
|
||||
"Plex",
|
||||
user_plex.friendlyName,
|
||||
user.title,
|
||||
library,
|
||||
movies_search.title,
|
||||
@@ -358,6 +368,8 @@ def update_user_watched(user, user_plex, library, videos, dryrun):
|
||||
logger(msg, 6)
|
||||
|
||||
log_marked(
|
||||
"Plex",
|
||||
user_plex.friendlyName,
|
||||
user.title,
|
||||
library,
|
||||
show_search.title,
|
||||
@@ -372,6 +384,8 @@ def update_user_watched(user, user_plex, library, videos, dryrun):
|
||||
logger(msg, 6)
|
||||
|
||||
log_marked(
|
||||
"Plex",
|
||||
user_plex.friendlyName,
|
||||
user.title,
|
||||
library,
|
||||
show_search.title,
|
||||
@@ -477,18 +491,13 @@ class Plex:
|
||||
library_type = library.type
|
||||
|
||||
output[library_title] = library_type
|
||||
|
||||
|
||||
return output
|
||||
except Exception as e:
|
||||
logger(f"Plex: Failed to get libraries, Error: {e}", 2)
|
||||
raise Exception(e)
|
||||
|
||||
|
||||
def get_watched(
|
||||
self,
|
||||
users,
|
||||
sync_libraries
|
||||
):
|
||||
def get_watched(self, users, sync_libraries):
|
||||
try:
|
||||
# Get all libraries
|
||||
users_watched = {}
|
||||
|
||||
Reference in New Issue
Block a user