From 1c3b0f3c24de8995ea610cb49dcb5afed9ad4a95 Mon Sep 17 00:00:00 2001 From: Aryan Kothari <87589047+thearyadev@users.noreply.github.com> Date: Mon, 20 Oct 2025 15:40:10 -0400 Subject: [PATCH] fix: jellyfin 10.11.0 compatibility --- .../Plugin.cs | 15 ++++++----- .../Providers/EpisodeMetadataProvider.cs | 6 ----- .../Providers/SeriesMetadataProvider.cs | 6 ----- .../JFToTubeArchivistProgressSyncTask.cs | 25 +++++++++++-------- .../Tasks/TAToJellyfinProgressSyncTask.cs | 17 +++++++------ 5 files changed, 33 insertions(+), 36 deletions(-) diff --git a/Jellyfin.Plugin.TubeArchivistMetadata/Plugin.cs b/Jellyfin.Plugin.TubeArchivistMetadata/Plugin.cs index 256d3d6..22019e8 100644 --- a/Jellyfin.Plugin.TubeArchivistMetadata/Plugin.cs +++ b/Jellyfin.Plugin.TubeArchivistMetadata/Plugin.cs @@ -188,7 +188,7 @@ namespace Jellyfin.Plugin.TubeArchivistMetadata var user = _userManager.GetUserById(eventArgs.UserId); if (Configuration.JFTASync && user != null && Configuration.GetJFUsernamesToArray().Contains(user!.Username)) { - var isPlayed = eventArgs.Item.IsPlayed(user); + var isPlayed = eventArgs.Item.IsPlayed(user, null); Logger.LogDebug("User {UserId} changed watched status to {Status} for the item {ItemName}", eventArgs.UserId, isPlayed, eventArgs.Item.Name); string itemYTId; try @@ -222,12 +222,15 @@ namespace Jellyfin.Plugin.TubeArchivistMetadata if (eventArgs.Item is Episode) { - var progress = _userDataManager.GetUserData(user, eventArgs.Item).PlaybackPositionTicks / TimeSpan.TicksPerSecond; - var videoId = Utils.GetVideoNameFromPath(eventArgs.Item.Path); - statusCode = await TubeArchivistApi.GetInstance().SetProgress(videoId, progress).ConfigureAwait(true); - if (statusCode != System.Net.HttpStatusCode.OK) + var progress = _userDataManager.GetUserData(user, eventArgs.Item)?.PlaybackPositionTicks / TimeSpan.TicksPerSecond; + if (progress != null) { - Logger.LogCritical("{Message}", $"POST /video/{videoId}/progress returned {statusCode} for video {eventArgs.Item.Name} with progress {progress} seconds"); + var videoId = Utils.GetVideoNameFromPath(eventArgs.Item.Path); + statusCode = await TubeArchivistApi.GetInstance().SetProgress(videoId, progress.Value).ConfigureAwait(true); + if (statusCode != System.Net.HttpStatusCode.OK) + { + Logger.LogCritical("{Message}", $"POST /video/{videoId}/progress returned {statusCode} for video {eventArgs.Item.Name} with progress {progress} seconds"); + } } } } diff --git a/Jellyfin.Plugin.TubeArchivistMetadata/Providers/EpisodeMetadataProvider.cs b/Jellyfin.Plugin.TubeArchivistMetadata/Providers/EpisodeMetadataProvider.cs index d19acb1..5312489 100644 --- a/Jellyfin.Plugin.TubeArchivistMetadata/Providers/EpisodeMetadataProvider.cs +++ b/Jellyfin.Plugin.TubeArchivistMetadata/Providers/EpisodeMetadataProvider.cs @@ -59,12 +59,6 @@ namespace Jellyfin.Plugin.TubeArchivistMetadata.Providers if (video != null) { var peopleInfo = new List(); - PeopleHelper.AddPerson(peopleInfo, new PersonInfo - { - Name = video.Channel.Name, - ImageUrl = video.Channel.ThumbUrl, - Type = Data.Enums.PersonKind.Actor, - }); result.HasMetadata = true; result.Item = video.ToEpisode(); result.Provider = Name; diff --git a/Jellyfin.Plugin.TubeArchivistMetadata/Providers/SeriesMetadataProvider.cs b/Jellyfin.Plugin.TubeArchivistMetadata/Providers/SeriesMetadataProvider.cs index d44a847..5e1d776 100644 --- a/Jellyfin.Plugin.TubeArchivistMetadata/Providers/SeriesMetadataProvider.cs +++ b/Jellyfin.Plugin.TubeArchivistMetadata/Providers/SeriesMetadataProvider.cs @@ -58,12 +58,6 @@ namespace Jellyfin.Plugin.TubeArchivistMetadata.Providers if (channel != null) { var peopleInfo = new List(); - PeopleHelper.AddPerson(peopleInfo, new PersonInfo - { - Name = channel.Name, - ImageUrl = channel.ThumbUrl, - Type = Data.Enums.PersonKind.Actor, - }); result.HasMetadata = true; result.Item = channel.ToSeries(); result.Provider = Name; diff --git a/Jellyfin.Plugin.TubeArchivistMetadata/Tasks/JFToTubeArchivistProgressSyncTask.cs b/Jellyfin.Plugin.TubeArchivistMetadata/Tasks/JFToTubeArchivistProgressSyncTask.cs index 83875db..50a9d29 100644 --- a/Jellyfin.Plugin.TubeArchivistMetadata/Tasks/JFToTubeArchivistProgressSyncTask.cs +++ b/Jellyfin.Plugin.TubeArchivistMetadata/Tasks/JFToTubeArchivistProgressSyncTask.cs @@ -72,12 +72,12 @@ namespace Jellyfin.Plugin.TubeArchivistMetadata.Tasks return; } - var collectionItem = _libraryManager.GetItemList(new InternalItemsQuery + var items = _libraryManager.GetItemList(new InternalItemsQuery { Name = Plugin.Instance?.Configuration.CollectionTitle, IncludeItemTypes = new[] { BaseItemKind.CollectionFolder } - }).FirstOrDefault(); - + }); + var collectionItem = items.Count > 0 ? items[0] : null; if (collectionItem == null) { var message = $"Collection '{Plugin.Instance?.Configuration.CollectionTitle}' not found."; @@ -154,9 +154,9 @@ namespace Jellyfin.Plugin.TubeArchivistMetadata.Tasks _logger.LogDebug("{VideoYtId}", videoYTId); HttpStatusCode statusCode; - if (!isChannelCheckedForWatched && channel.IsPlayed(user)) + if (!isChannelCheckedForWatched && channel.IsPlayed(user, null)) { - var isChannelPlayed = channel.IsPlayed(user); + var isChannelPlayed = channel.IsPlayed(user, null); statusCode = await taApi.SetWatchedStatus(channelYTId, isChannelPlayed).ConfigureAwait(true); if (statusCode != System.Net.HttpStatusCode.OK) { @@ -172,7 +172,7 @@ namespace Jellyfin.Plugin.TubeArchivistMetadata.Tasks if (!isChannelWatched) { - var isVideoPlayed = video.IsPlayed(user); + var isVideoPlayed = video.IsPlayed(user, null); statusCode = await taApi.SetWatchedStatus(videoYTId, isVideoPlayed).ConfigureAwait(true); if (statusCode != System.Net.HttpStatusCode.OK) { @@ -182,11 +182,14 @@ namespace Jellyfin.Plugin.TubeArchivistMetadata.Tasks _logger.LogDebug("{Message}", isVideoPlayed); if (!isVideoPlayed) { - var playbackProgress = _userDataManager.GetUserData(user, video).PlaybackPositionTicks / TimeSpan.TicksPerSecond; - statusCode = await taApi.SetProgress(videoYTId, playbackProgress).ConfigureAwait(true); - if (statusCode != System.Net.HttpStatusCode.OK) + var playbackProgress = _userDataManager.GetUserData(user, video)?.PlaybackPositionTicks / TimeSpan.TicksPerSecond; + if (playbackProgress != null) { - _logger.LogCritical("{Message}", $"POST /video/{videoYTId}/progress returned {statusCode} for video {video.Name} with progress {progress} seconds"); + statusCode = await taApi.SetProgress(videoYTId, playbackProgress.Value).ConfigureAwait(true); + if (statusCode != System.Net.HttpStatusCode.OK) + { + _logger.LogCritical("{Message}", $"POST /video/{videoYTId}/progress returned {statusCode} for video {video.Name} with progress {progress} seconds"); + } } } } @@ -215,7 +218,7 @@ namespace Jellyfin.Plugin.TubeArchivistMetadata.Tasks [ new TaskTriggerInfo { - Type = TaskTriggerInfo.TriggerStartup, + Type = TaskTriggerInfoType.StartupTrigger, }, ]; } diff --git a/Jellyfin.Plugin.TubeArchivistMetadata/Tasks/TAToJellyfinProgressSyncTask.cs b/Jellyfin.Plugin.TubeArchivistMetadata/Tasks/TAToJellyfinProgressSyncTask.cs index abcf3a7..f486b43 100644 --- a/Jellyfin.Plugin.TubeArchivistMetadata/Tasks/TAToJellyfinProgressSyncTask.cs +++ b/Jellyfin.Plugin.TubeArchivistMetadata/Tasks/TAToJellyfinProgressSyncTask.cs @@ -72,11 +72,13 @@ namespace Jellyfin.Plugin.TubeArchivistMetadata.Tasks continue; } - var collectionItem = _libraryManager.GetItemList(new InternalItemsQuery + var items = _libraryManager.GetItemList(new InternalItemsQuery { Name = Plugin.Instance?.Configuration.CollectionTitle, IncludeItemTypes = new[] { BaseItemKind.CollectionFolder } - }).FirstOrDefault(); + }); + + var collectionItem = items.Count > 0 ? items[0] : null; if (collectionItem == null) { @@ -127,11 +129,12 @@ namespace Jellyfin.Plugin.TubeArchivistMetadata.Tasks continue; } - var collectionItem = _libraryManager.GetItemList(new InternalItemsQuery + var items = _libraryManager.GetItemList(new InternalItemsQuery { Name = Plugin.Instance?.Configuration.CollectionTitle, IncludeItemTypes = new[] { BaseItemKind.CollectionFolder } - }).FirstOrDefault(); + }); + var collectionItem = items.Count > 0 ? items[0] : null; if (collectionItem == null) { @@ -185,8 +188,8 @@ namespace Jellyfin.Plugin.TubeArchivistMetadata.Tasks } _userDataManager.SaveUserData(user, video, userUpdateData, UserDataSaveReason.UpdateUserData); - _logger.LogDebug("{Message}", $"Playback progress for video {video.Name} set to {userItemData.PlaybackPositionTicks / TimeSpan.TicksPerSecond} seconds for user {jfUsername}."); - _logger.LogDebug("{Message}", $"Watched status for video {video.Name} set to {userItemData.Played} seconds for user {jfUsername}."); + _logger.LogDebug("{Message}", $"Playback progress for video {video.Name} set to {userItemData?.PlaybackPositionTicks / TimeSpan.TicksPerSecond} seconds for user {jfUsername}."); + _logger.LogDebug("{Message}", $"Watched status for video {video.Name} set to {userItemData?.Played} seconds for user {jfUsername}."); processedVideosCount++; progress.Report(processedVideosCount * 100 / videosCount); @@ -214,7 +217,7 @@ namespace Jellyfin.Plugin.TubeArchivistMetadata.Tasks [ new TaskTriggerInfo { - Type = TaskTriggerInfo.TriggerInterval, + Type = TaskTriggerInfoType.IntervalTrigger, IntervalTicks = TimeSpan.FromSeconds(Plugin.Instance!.Configuration.TAJFTaskInterval).Ticks }, ];