From 4711a6a742d47ae307961478043eef7835f0b314 Mon Sep 17 00:00:00 2001 From: DarkFighterLuke Date: Sat, 21 Jun 2025 12:56:37 +0200 Subject: [PATCH 1/2] Update plugin for Jellyfin 10.11 --- ...llyfin.Plugin.TubeArchivistMetadata.csproj | 6 +++--- .../Plugin.cs | 13 ++++++++----- .../JFToTubeArchivistProgressSyncTask.cs | 19 ++++++++++++------- .../Tasks/TAToJellyfinProgressSyncTask.cs | 18 +++++++++++------- 4 files changed, 34 insertions(+), 22 deletions(-) diff --git a/Jellyfin.Plugin.TubeArchivistMetadata/Jellyfin.Plugin.TubeArchivistMetadata.csproj b/Jellyfin.Plugin.TubeArchivistMetadata/Jellyfin.Plugin.TubeArchivistMetadata.csproj index 96bc34c..302d3ff 100644 --- a/Jellyfin.Plugin.TubeArchivistMetadata/Jellyfin.Plugin.TubeArchivistMetadata.csproj +++ b/Jellyfin.Plugin.TubeArchivistMetadata/Jellyfin.Plugin.TubeArchivistMetadata.csproj @@ -1,7 +1,7 @@ - net8.0 + net9.0 Jellyfin.Plugin.TubeArchivistMetadata true true @@ -11,8 +11,8 @@ - - + + diff --git a/Jellyfin.Plugin.TubeArchivistMetadata/Plugin.cs b/Jellyfin.Plugin.TubeArchivistMetadata/Plugin.cs index 600fabb..3e3e95d 100644 --- a/Jellyfin.Plugin.TubeArchivistMetadata/Plugin.cs +++ b/Jellyfin.Plugin.TubeArchivistMetadata/Plugin.cs @@ -230,12 +230,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/Tasks/JFToTubeArchivistProgressSyncTask.cs b/Jellyfin.Plugin.TubeArchivistMetadata/Tasks/JFToTubeArchivistProgressSyncTask.cs index cc04711..01d9d33 100644 --- a/Jellyfin.Plugin.TubeArchivistMetadata/Tasks/JFToTubeArchivistProgressSyncTask.cs +++ b/Jellyfin.Plugin.TubeArchivistMetadata/Tasks/JFToTubeArchivistProgressSyncTask.cs @@ -72,11 +72,13 @@ 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) { @@ -182,11 +184,14 @@ namespace Jellyfin.Plugin.TubeArchivistMetadata.Tasks _logger.LogInformation("{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 +220,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 d42678b..543988d 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,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) { @@ -185,8 +189,8 @@ namespace Jellyfin.Plugin.TubeArchivistMetadata.Tasks } _userDataManager.SaveUserData(user, video, userUpdateData, UserDataSaveReason.UpdateUserData); - _logger.LogInformation("{Message}", $"Playback progress for video {video.Name} set to {userItemData.PlaybackPositionTicks / TimeSpan.TicksPerSecond} seconds for user {jfUsername}."); - _logger.LogInformation("{Message}", $"Watched status for video {video.Name} set to {userItemData.Played} seconds for user {jfUsername}."); + _logger.LogInformation("{Message}", $"Playback progress for video {video.Name} set to {userItemData?.PlaybackPositionTicks / TimeSpan.TicksPerSecond} seconds for user {jfUsername}."); + _logger.LogInformation("{Message}", $"Watched status for video {video.Name} set to {userItemData?.Played} seconds for user {jfUsername}."); processedVideosCount++; progress.Report(processedVideosCount * 100 / videosCount); @@ -214,7 +218,7 @@ namespace Jellyfin.Plugin.TubeArchivistMetadata.Tasks [ new TaskTriggerInfo { - Type = TaskTriggerInfo.TriggerInterval, + Type = TaskTriggerInfoType.IntervalTrigger, IntervalTicks = TimeSpan.FromSeconds(Plugin.Instance!.Configuration.TAJFTaskInterval).Ticks }, ]; From 2d5327d31b27207e2a608475daf523134e84a07f Mon Sep 17 00:00:00 2001 From: DarkFighterLuke Date: Mon, 20 Oct 2025 22:27:01 +0200 Subject: [PATCH 2/2] Bump version --- Directory.Build.props | 6 +++--- build.yaml | 8 ++++---- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/Directory.Build.props b/Directory.Build.props index 94ca9df..ed755b6 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -1,7 +1,7 @@ - 1.3.7.0 - 1.3.7.0 - 1.3.7.0 + 1.4.0.0 + 1.4.0.0 + 1.4.0.0 diff --git a/build.yaml b/build.yaml index 572b782..e96ac80 100644 --- a/build.yaml +++ b/build.yaml @@ -2,9 +2,9 @@ name: "TubeArchivistMetadata" guid: "dc97d0c6-28b0-4242-afb4-5833ae1b3715" imageUrl: https://raw.githubusercontent.com/tubearchivist/tubearchivist-jf-plugin/master/images/logo.png -version: "1.3.7.0" -targetAbi: "10.10.0.0" -framework: "net8.0" +version: "1.4.0.0" +targetAbi: "10.11.0.0" +framework: "net9.0" overview: "Metadata for your TubeArchivist library on Jellyfin" description: > TubeArchivistMetadata is a plugin that automatically manages @@ -14,4 +14,4 @@ owner: "DarkFighterLuke" artifacts: - "Jellyfin.Plugin.TubeArchivistMetadata.dll" changelog: > - Fix JF->TA Sync + Align compatibility with Jellyfin 10.11.x