From 764dc8f3267231fa0741e7fdb20f44443ae3e4c7 Mon Sep 17 00:00:00 2001 From: Jurrer Date: Sun, 9 Nov 2025 03:17:39 +0100 Subject: [PATCH 1/2] fix video watch status sync to TA IsPlayed method --- .../Tasks/JFToTubeArchivistProgressSyncTask.cs | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/Jellyfin.Plugin.TubeArchivistMetadata/Tasks/JFToTubeArchivistProgressSyncTask.cs b/Jellyfin.Plugin.TubeArchivistMetadata/Tasks/JFToTubeArchivistProgressSyncTask.cs index 0126395..e56c614 100644 --- a/Jellyfin.Plugin.TubeArchivistMetadata/Tasks/JFToTubeArchivistProgressSyncTask.cs +++ b/Jellyfin.Plugin.TubeArchivistMetadata/Tasks/JFToTubeArchivistProgressSyncTask.cs @@ -155,11 +155,11 @@ namespace Jellyfin.Plugin.TubeArchivistMetadata.Tasks var videoYTId = Utils.GetVideoNameFromPath(video.Path); _logger.LogDebug("Current video extracted YouTube id: {VideoYtId}", videoYTId); HttpStatusCode statusCode; - var userItemData = _userDataManager.GetUserData(user, channel); + var channelItemData = _userDataManager.GetUserData(user, channel); - if (!isChannelCheckedForWatched && channel.IsPlayed(user, userItemData)) + if (!isChannelCheckedForWatched && channel.IsPlayed(user, channelItemData)) { - var isChannelPlayed = channel.IsPlayed(user, userItemData); + var isChannelPlayed = channel.IsPlayed(user, channelItemData); statusCode = await taApi.SetWatchedStatus(channelYTId, isChannelPlayed).ConfigureAwait(true); if (statusCode != System.Net.HttpStatusCode.OK) { @@ -173,9 +173,10 @@ namespace Jellyfin.Plugin.TubeArchivistMetadata.Tasks isChannelCheckedForWatched = true; } + var videoItemData = _userDataManager.GetUserData(user, video); if (!isChannelWatched) { - var isVideoPlayed = video.IsPlayed(user, userItemData); + var isVideoPlayed = video.IsPlayed(user, videoItemData); statusCode = await taApi.SetWatchedStatus(videoYTId, isVideoPlayed).ConfigureAwait(true); if (statusCode != System.Net.HttpStatusCode.OK) { From 7942e89341c6f3690ce527692e9930868e3c87d3 Mon Sep 17 00:00:00 2001 From: Jurrer Date: Sun, 9 Nov 2025 05:33:05 +0100 Subject: [PATCH 2/2] check TA video status before syncing to TA --- .../Tasks/JFToTubeArchivistProgressSyncTask.cs | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/Jellyfin.Plugin.TubeArchivistMetadata/Tasks/JFToTubeArchivistProgressSyncTask.cs b/Jellyfin.Plugin.TubeArchivistMetadata/Tasks/JFToTubeArchivistProgressSyncTask.cs index e56c614..ee66c78 100644 --- a/Jellyfin.Plugin.TubeArchivistMetadata/Tasks/JFToTubeArchivistProgressSyncTask.cs +++ b/Jellyfin.Plugin.TubeArchivistMetadata/Tasks/JFToTubeArchivistProgressSyncTask.cs @@ -177,10 +177,22 @@ namespace Jellyfin.Plugin.TubeArchivistMetadata.Tasks if (!isChannelWatched) { var isVideoPlayed = video.IsPlayed(user, videoItemData); - statusCode = await taApi.SetWatchedStatus(videoYTId, isVideoPlayed).ConfigureAwait(true); - if (statusCode != System.Net.HttpStatusCode.OK) + var taVideo = await taApi.GetVideo(videoYTId).ConfigureAwait(true); + if (taVideo != null) { - _logger.LogCritical("{Message}", $"POST /watched returned {statusCode} for video {video.Name} ({videoYTId}) with wacthed status {isVideoPlayed}"); + var isTAVideoPlayed = taVideo?.Player.IsWatched ?? false; + if (isTAVideoPlayed != isVideoPlayed) + { + statusCode = await taApi.SetWatchedStatus(videoYTId, isVideoPlayed).ConfigureAwait(true); + if (statusCode != System.Net.HttpStatusCode.OK) + { + _logger.LogCritical("{Message}", $"POST /watched returned {statusCode} for video {video.Name} ({videoYTId}) with wacthed status {isVideoPlayed}"); + } + else + { + _logger.LogInformation("Video {VideoId} watch status marked as {Status} in TubeArchivist", videoYTId, isVideoPlayed); + } + } } _logger.LogDebug("{Message}", isVideoPlayed);