Jellyfin/Emby: Use the same endpoint for marking as for partials to fix emby

Signed-off-by: Luis Garcia <git@luigi311.com>
pull/292/head
Luis Garcia 2025-07-12 00:04:58 +00:00
parent 2208d91d07
commit 5501e21aa8
1 changed files with 30 additions and 5 deletions

View File

@ -7,7 +7,6 @@ from math import floor
from typing import Any, Literal from typing import Any, Literal
from packaging.version import parse, Version from packaging.version import parse, Version
from loguru import logger from loguru import logger
from urllib.parse import quote
from src.functions import ( from src.functions import (
search_mapping, search_mapping,
@ -575,9 +574,18 @@ class JellyfinEmby:
if stored_movie.status.completed: if stored_movie.status.completed:
msg = f"{self.server_type}: {jellyfin_video.get('Name')} as watched for {user_name} in {library_name}" msg = f"{self.server_type}: {jellyfin_video.get('Name')} as watched for {user_name} in {library_name}"
if not dryrun: if not dryrun:
user_data_payload: dict[
str, float | bool | datetime
] = {
"PlayCount": 1,
"Played": True,
"PlaybackPositionTicks": 0,
"LastPlayedDate": viewed_date,
}
self.query( self.query(
f"/Users/{user_id}/PlayedItems/{jellyfin_video_id}?DatePlayed={quote(viewed_date)}", f"/Users/{user_id}/Items/{jellyfin_video_id}/UserData",
"post", "post",
json=user_data_payload,
) )
logger.success(f"{'[DRYRUN] ' if dryrun else ''}{msg}") logger.success(f"{'[DRYRUN] ' if dryrun else ''}{msg}")
@ -595,7 +603,11 @@ class JellyfinEmby:
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}" 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}"
if not dryrun: if not dryrun:
user_data_payload: dict[str, float] = { user_data_payload: dict[
str, float | bool | datetime
] = {
"PlayCount": 0,
"Played": False,
"PlaybackPositionTicks": stored_movie.status.time "PlaybackPositionTicks": stored_movie.status.time
* 10_000, * 10_000,
"LastPlayedDate": viewed_date, "LastPlayedDate": viewed_date,
@ -699,9 +711,18 @@ class JellyfinEmby:
+ f" as watched for {user_name} in {library_name}" + f" as watched for {user_name} in {library_name}"
) )
if not dryrun: if not dryrun:
user_data_payload: dict[
str, float | bool | datetime
] = {
"PlayCount": 1,
"Played": True,
"PlaybackPositionTicks": 0,
"LastPlayedDate": viewed_date,
}
self.query( self.query(
f"/Users/{user_id}/PlayedItems/{jellyfin_episode_id}?DatePlayed={quote(viewed_date)}", f"/Users/{user_id}/Items/{jellyfin_episode_id}/UserData",
"post", "post",
json=user_data_payload,
) )
logger.success( logger.success(
@ -725,7 +746,11 @@ class JellyfinEmby:
) )
if not dryrun: if not dryrun:
user_data_payload = { user_data_payload: dict[
str, float | bool | datetime
] = {
"PlayCount": 0,
"Played": False,
"PlaybackPositionTicks": stored_ep.status.time "PlaybackPositionTicks": stored_ep.status.time
* 10_000, * 10_000,
"LastPlayedDate": viewed_date, "LastPlayedDate": viewed_date,