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(
|
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
|
||||||
):
|
):
|
||||||
|
|||||||
@@ -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
|
||||||
@@ -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"),
|
||||||
|
|||||||
@@ -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
|
||||||
|
|
||||||
|
|||||||
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_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)
|
||||||
|
|
||||||
|
|||||||
23
src/plex.py
23
src/plex.py
@@ -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,
|
||||||
@@ -483,12 +497,7 @@ class Plex:
|
|||||||
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(self, users, sync_libraries):
|
||||||
def get_watched(
|
|
||||||
self,
|
|
||||||
users,
|
|
||||||
sync_libraries
|
|
||||||
):
|
|
||||||
try:
|
try:
|
||||||
# Get all libraries
|
# Get all libraries
|
||||||
users_watched = {}
|
users_watched = {}
|
||||||
|
|||||||
Reference in New Issue
Block a user