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/Jellyfin.Plugin.TubeArchivistMetadata/Configuration/PluginConfiguration.cs b/Jellyfin.Plugin.TubeArchivistMetadata/Configuration/PluginConfiguration.cs index 85befd0..21e23b0 100644 --- a/Jellyfin.Plugin.TubeArchivistMetadata/Configuration/PluginConfiguration.cs +++ b/Jellyfin.Plugin.TubeArchivistMetadata/Configuration/PluginConfiguration.cs @@ -145,7 +145,7 @@ namespace Jellyfin.Plugin.TubeArchivistMetadata.Configuration { get { - _logger.LogDebug("JFUsernamesTo configured: {Message}", string.Join(", ", _jfUsernamesTo)); + _logger.LogInformation("JFUsernamesTo configured: {Message}", string.Join(", ", _jfUsernamesTo)); return string.Join(", ", _jfUsernamesTo); } @@ -164,7 +164,7 @@ namespace Jellyfin.Plugin.TubeArchivistMetadata.Configuration } } - _logger.LogDebug("Set JFUsernamesTo to: {Message}", string.Join(", ", _jfUsernamesTo)); + _logger.LogInformation("Set JFUsernamesTo to: {Message}", string.Join(", ", _jfUsernamesTo)); } } diff --git a/Jellyfin.Plugin.TubeArchivistMetadata/Jellyfin.Plugin.TubeArchivistMetadata.csproj b/Jellyfin.Plugin.TubeArchivistMetadata/Jellyfin.Plugin.TubeArchivistMetadata.csproj index 302d3ff..233879e 100644 --- a/Jellyfin.Plugin.TubeArchivistMetadata/Jellyfin.Plugin.TubeArchivistMetadata.csproj +++ b/Jellyfin.Plugin.TubeArchivistMetadata/Jellyfin.Plugin.TubeArchivistMetadata.csproj @@ -11,8 +11,8 @@ - - + + diff --git a/Jellyfin.Plugin.TubeArchivistMetadata/Plugin.cs b/Jellyfin.Plugin.TubeArchivistMetadata/Plugin.cs index fe45843..7e5a89c 100644 --- a/Jellyfin.Plugin.TubeArchivistMetadata/Plugin.cs +++ b/Jellyfin.Plugin.TubeArchivistMetadata/Plugin.cs @@ -39,7 +39,6 @@ namespace Jellyfin.Plugin.TubeArchivistMetadata /// Instance of the interface. /// Instance of the interface. /// Instance of the interface. - /// Instance of the interface. /// Instance of the interface. /// Instance of the interface. /// Instance of the interface. @@ -49,7 +48,6 @@ namespace Jellyfin.Plugin.TubeArchivistMetadata ILogger logger, ISessionManager sessionManager, ILibraryManager libraryManager, - ITaskManager taskManager, IUserManager userManager, IUserDataManager userDataManager, IPlaylistManager playlistManager) @@ -70,34 +68,6 @@ namespace Jellyfin.Plugin.TubeArchivistMetadata _userDataManager = userDataManager; userDataManager.UserDataSaved += OnWatchedStatusChange; - var taToJellyfinProgressSyncTask = new TAToJellyfinProgressSyncTask(logger, libraryManager, userManager, userDataManager); - var taToJellyfinPlaylistsSyncTask = new TAToJellyfinPlaylistsSyncTask(logger, libraryManager, userManager, playlistManager); - var jfToTubeArchivistProgressSyncTask = new JFToTubeArchivistProgressSyncTask(logger, libraryManager, userManager, userDataManager); - var jfToTubeArchivistPlaylistsSyncTask = new JFToTubeArchivistPlaylistsSyncTask(logger, libraryManager, userManager, playlistManager); - var isTAJFTaskPresent = taskManager.ScheduledTasks.Any(t => t.Name.Equals(taToJellyfinProgressSyncTask.Name, StringComparison.Ordinal)); - if (Instance!.Configuration.TAJFProgressSync && !isTAJFTaskPresent) - { - logger.LogInformation("Queueing task {TaskName}.", taToJellyfinProgressSyncTask.Name); - taskManager.AddTasks([taToJellyfinProgressSyncTask]); - taskManager.Execute(); - - logger.LogInformation("Queueing task {TaskName}.", taToJellyfinPlaylistsSyncTask.Name); - taskManager.AddTasks([taToJellyfinPlaylistsSyncTask]); - taskManager.Execute(); - } - - var isJFTATaskPresent = taskManager.ScheduledTasks.Any(t => t.Name.Equals(jfToTubeArchivistProgressSyncTask.Name, StringComparison.Ordinal)); - if (Instance!.Configuration.JFTAProgressSync && !isJFTATaskPresent) - { - logger.LogInformation("Queueing task {TaskName}.", jfToTubeArchivistProgressSyncTask.Name); - taskManager.AddTasks([jfToTubeArchivistProgressSyncTask]); - taskManager.Execute(); - - logger.LogInformation("Queueing task {TaskName}.", jfToTubeArchivistPlaylistsSyncTask.Name); - taskManager.AddTasks([jfToTubeArchivistPlaylistsSyncTask]); - taskManager.Execute(); - } - logger.LogInformation("{Message}", "Collection display name: " + Instance?.Configuration.CollectionTitle); logger.LogInformation("{Message}", "TubeArchivist API URL: " + Instance?.Configuration.TubeArchivistUrl); logger.LogInformation("{Message}", "Pinging TubeArchivist API..."); @@ -186,6 +156,12 @@ namespace Jellyfin.Plugin.TubeArchivistMetadata private async void OnPlaybackProgress(object? sender, PlaybackProgressEventArgs eventArgs) { + if (eventArgs == null || eventArgs.Item.Id == Guid.Empty) + { + Logger.LogDebug("Skipping progress synchronization: PlaybackProgress event triggered with null or empty Guid."); + return; + } + if (Instance!.Configuration.JFTAProgressSync && eventArgs.Users.Any(u => Instance!.Configuration.JFUsernameFrom.Equals(u.Username, StringComparison.Ordinal))) { BaseItem? season = LibraryManager.GetItemById(eventArgs.Item.ParentId); @@ -206,10 +182,23 @@ namespace Jellyfin.Plugin.TubeArchivistMetadata private async void OnWatchedStatusChange(object? sender, UserDataSaveEventArgs eventArgs) { + if (eventArgs == null || eventArgs.Item.Id == Guid.Empty) + { + Logger.LogDebug("Skipping watched status synchronization: WatchedStatusChange event triggered with null or empty Guid."); + return; + } + var user = _userManager.GetUserById(eventArgs.UserId); + if (user == null) + { + Logger.LogError("OnWatchedStatusChange callback called without user id for item {ItemName}", eventArgs.Item.Name); + return; + } + + var userItemData = _userDataManager.GetUserData(user, eventArgs.Item); if (Configuration.JFTAProgressSync && user != null && Configuration.GetJFUsernamesToArray().Contains(user!.Username)) { - var isPlayed = eventArgs.Item.IsPlayed(user); + var isPlayed = eventArgs.Item.IsPlayed(user, userItemData); Logger.LogDebug("User {UserId} changed watched status to {Status} for the item {ItemName}", eventArgs.UserId, isPlayed, eventArgs.Item.Name); string itemYTId; try diff --git a/Jellyfin.Plugin.TubeArchivistMetadata/Providers/EpisodeImageProvider.cs b/Jellyfin.Plugin.TubeArchivistMetadata/Providers/EpisodeImageProvider.cs index 9454d4a..fa00c01 100644 --- a/Jellyfin.Plugin.TubeArchivistMetadata/Providers/EpisodeImageProvider.cs +++ b/Jellyfin.Plugin.TubeArchivistMetadata/Providers/EpisodeImageProvider.cs @@ -62,8 +62,8 @@ namespace Jellyfin.Plugin.TubeArchivistMetadata.Providers var taApi = TubeArchivistApi.GetInstance(); var videoTAId = Utils.GetVideoNameFromPath(item.Path); var video = await taApi.GetVideo(videoTAId).ConfigureAwait(true); - _logger.LogInformation("{Message}", string.Format(CultureInfo.CurrentCulture, "Getting images for video: {0} ({1})", video?.Title, videoTAId)); - _logger.LogInformation("{Message}", "Thumb URI: " + video?.VidThumbUrl); + _logger.LogDebug("{Message}", string.Format(CultureInfo.CurrentCulture, "Getting images for video: {0} ({1})", video?.Title, videoTAId)); + _logger.LogDebug("{Message}", "Thumb URI: " + video?.VidThumbUrl); if (video != null) { diff --git a/Jellyfin.Plugin.TubeArchivistMetadata/Providers/EpisodeMetadataProvider.cs b/Jellyfin.Plugin.TubeArchivistMetadata/Providers/EpisodeMetadataProvider.cs index a5f1f38..d19acb1 100644 --- a/Jellyfin.Plugin.TubeArchivistMetadata/Providers/EpisodeMetadataProvider.cs +++ b/Jellyfin.Plugin.TubeArchivistMetadata/Providers/EpisodeMetadataProvider.cs @@ -53,8 +53,8 @@ namespace Jellyfin.Plugin.TubeArchivistMetadata.Providers var taApi = TubeArchivistApi.GetInstance(); var videoTAId = Utils.GetVideoNameFromPath(info.Path); var video = await taApi.GetVideo(videoTAId).ConfigureAwait(true); - _logger.LogInformation("{Message}", string.Format(CultureInfo.CurrentCulture, "Getting metadata for video: {0} ({1})", video?.Title, videoTAId)); - _logger.LogInformation("{Message}", "Received metadata: \n" + JsonConvert.SerializeObject(video)); + _logger.LogDebug("{Message}", string.Format(CultureInfo.CurrentCulture, "Getting metadata for video: {0} ({1})", video?.Title, videoTAId)); + _logger.LogDebug("{Message}", "Received metadata: \n" + JsonConvert.SerializeObject(video)); if (video != null) { diff --git a/Jellyfin.Plugin.TubeArchivistMetadata/Providers/SeriesImageProvider.cs b/Jellyfin.Plugin.TubeArchivistMetadata/Providers/SeriesImageProvider.cs index e67e8a7..6fef96a 100644 --- a/Jellyfin.Plugin.TubeArchivistMetadata/Providers/SeriesImageProvider.cs +++ b/Jellyfin.Plugin.TubeArchivistMetadata/Providers/SeriesImageProvider.cs @@ -60,10 +60,10 @@ namespace Jellyfin.Plugin.TubeArchivistMetadata.Providers var taApi = TubeArchivistApi.GetInstance(); var channelTAId = Utils.GetChannelNameFromPath(item.Path); var channel = await taApi.GetChannel(channelTAId).ConfigureAwait(true); - _logger.LogInformation("{Message}", string.Format(CultureInfo.CurrentCulture, "Getting images for channel: {0} ({1})", channel?.Name, channelTAId)); - _logger.LogInformation("{Message}", "Thumb URI: " + channel?.ThumbUrl); - _logger.LogInformation("{Message}", "TVArt URI: " + channel?.TvartUrl); - _logger.LogInformation("{Message}", "Banner URI: " + channel?.BannerUrl); + _logger.LogDebug("{Message}", string.Format(CultureInfo.CurrentCulture, "Getting images for channel: {0} ({1})", channel?.Name, channelTAId)); + _logger.LogDebug("{Message}", "Thumb URI: " + channel?.ThumbUrl); + _logger.LogDebug("{Message}", "TVArt URI: " + channel?.TvartUrl); + _logger.LogDebug("{Message}", "Banner URI: " + channel?.BannerUrl); if (channel != null) { diff --git a/Jellyfin.Plugin.TubeArchivistMetadata/Providers/SeriesMetadataProvider.cs b/Jellyfin.Plugin.TubeArchivistMetadata/Providers/SeriesMetadataProvider.cs index 269ce4f..d44a847 100644 --- a/Jellyfin.Plugin.TubeArchivistMetadata/Providers/SeriesMetadataProvider.cs +++ b/Jellyfin.Plugin.TubeArchivistMetadata/Providers/SeriesMetadataProvider.cs @@ -52,8 +52,8 @@ namespace Jellyfin.Plugin.TubeArchivistMetadata.Providers var taApi = TubeArchivistApi.GetInstance(); var channelTAId = Utils.GetChannelNameFromPath(info.Path); var channel = await taApi.GetChannel(channelTAId).ConfigureAwait(true); - _logger.LogInformation("{Message}", string.Format(CultureInfo.CurrentCulture, "Getting metadata for channel: {0} ({1})", channel?.Name, channelTAId)); - _logger.LogInformation("{Message}", "Received metadata: \n" + JsonConvert.SerializeObject(channel)); + _logger.LogDebug("{Message}", string.Format(CultureInfo.CurrentCulture, "Getting metadata for channel: {0} ({1})", channel?.Name, channelTAId)); + _logger.LogDebug("{Message}", "Received metadata: \n" + JsonConvert.SerializeObject(channel)); if (channel != null) { diff --git a/Jellyfin.Plugin.TubeArchivistMetadata/Tasks/JFToTubeArchivistProgressSyncTask.cs b/Jellyfin.Plugin.TubeArchivistMetadata/Tasks/JFToTubeArchivistProgressSyncTask.cs index 5b30674..661729e 100644 --- a/Jellyfin.Plugin.TubeArchivistMetadata/Tasks/JFToTubeArchivistProgressSyncTask.cs +++ b/Jellyfin.Plugin.TubeArchivistMetadata/Tasks/JFToTubeArchivistProgressSyncTask.cs @@ -92,7 +92,7 @@ namespace Jellyfin.Plugin.TubeArchivistMetadata.Tasks { IncludeItemTypes = new[] { BaseItemKind.Series } }); - _logger.LogInformation("Analyzing collection {Id} with name {Name}", collectionItem.Id, collectionItem.Name); + _logger.LogDebug("Analyzing collection {Id} with name {Name}", collectionItem.Id, collectionItem.Name); _logger.LogDebug("Found {Message} channels", channels.Count); foreach (Series channel in channels) @@ -116,7 +116,7 @@ namespace Jellyfin.Plugin.TubeArchivistMetadata.Tasks } } - _logger.LogInformation("Found a total of {VideosCount} videos", videosCount); + _logger.LogDebug("Found a total of {VideosCount} videos", videosCount); var processedVideosCount = 0; if (collectionItem == null) @@ -153,11 +153,13 @@ namespace Jellyfin.Plugin.TubeArchivistMetadata.Tasks foreach (Episode video in videos) { var videoYTId = Utils.GetVideoNameFromPath(video.Path); + _logger.LogDebug("{VideoYtId}", videoYTId); HttpStatusCode statusCode; + var userItemData = _userDataManager.GetUserData(user, channel); - if (!isChannelCheckedForWatched && channel.IsPlayed(user)) + if (!isChannelCheckedForWatched && channel.IsPlayed(user, userItemData)) { - var isChannelPlayed = channel.IsPlayed(user); + var isChannelPlayed = channel.IsPlayed(user, userItemData); statusCode = await taApi.SetWatchedStatus(channelYTId, isChannelPlayed).ConfigureAwait(true); if (statusCode != System.Net.HttpStatusCode.OK) { @@ -173,13 +175,14 @@ namespace Jellyfin.Plugin.TubeArchivistMetadata.Tasks if (!isChannelWatched) { - var isVideoPlayed = video.IsPlayed(user); + var isVideoPlayed = video.IsPlayed(user, userItemData); 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}"); } + _logger.LogDebug("{Message}", isVideoPlayed); if (!isVideoPlayed) { var playbackProgress = _userDataManager.GetUserData(user, video)?.PlaybackPositionTicks / TimeSpan.TicksPerSecond; diff --git a/Jellyfin.Plugin.TubeArchivistMetadata/Tasks/TAToJellyfinProgressSyncTask.cs b/Jellyfin.Plugin.TubeArchivistMetadata/Tasks/TAToJellyfinProgressSyncTask.cs index 8ec6046..ff3a7d3 100644 --- a/Jellyfin.Plugin.TubeArchivistMetadata/Tasks/TAToJellyfinProgressSyncTask.cs +++ b/Jellyfin.Plugin.TubeArchivistMetadata/Tasks/TAToJellyfinProgressSyncTask.cs @@ -92,7 +92,7 @@ namespace Jellyfin.Plugin.TubeArchivistMetadata.Tasks { IncludeItemTypes = new[] { BaseItemKind.Series } }); - _logger.LogInformation("Analyzing collection {Id} with name {Name}", collectionItem.Id, collectionItem.Name); + _logger.LogDebug("Analyzing collection {Id} with name {Name}", collectionItem.Id, collectionItem.Name); _logger.LogDebug("Found {Message} channels", channels.Count); foreach (Series channel in channels) @@ -117,7 +117,7 @@ namespace Jellyfin.Plugin.TubeArchivistMetadata.Tasks } } - _logger.LogInformation("Found a total of {VideosCount} videos", videosCount); + _logger.LogDebug("Found a total of {VideosCount} videos", videosCount); var processedVideosCount = 0; foreach (var jfUsername in Plugin.Instance!.Configuration.GetJFUsernamesToArray()) @@ -125,7 +125,7 @@ namespace Jellyfin.Plugin.TubeArchivistMetadata.Tasks var user = _userManager.GetUserByName(jfUsername); if (user == null) { - _logger.LogInformation("{Message}", $"Jellyfin user with username {jfUsername} not found"); + _logger.LogDebug("{Message}", $"Jellyfin user with username {jfUsername} not found"); continue; } diff --git a/Jellyfin.Plugin.TubeArchivistMetadata/TubeArchivist/TubeArchivistApi.cs b/Jellyfin.Plugin.TubeArchivistMetadata/TubeArchivist/TubeArchivistApi.cs index c05bf54..3b81f5d 100644 --- a/Jellyfin.Plugin.TubeArchivistMetadata/TubeArchivist/TubeArchivistApi.cs +++ b/Jellyfin.Plugin.TubeArchivistMetadata/TubeArchivist/TubeArchivistApi.cs @@ -75,11 +75,11 @@ namespace Jellyfin.Plugin.TubeArchivistMetadata.TubeArchivist while (response.StatusCode == HttpStatusCode.Moved) { url = response.Headers.Location; - _logger.LogInformation("{Message}", "Received redirect to: " + url); + _logger.LogDebug("{Message}", "Received redirect to: " + url); response = await client.GetAsync(url).ConfigureAwait(true); } - _logger.LogInformation("{Message}", url + ": " + response.StatusCode); + _logger.LogDebug("{Message}", url + ": " + response.StatusCode); if (response.IsSuccessStatusCode) { @@ -105,16 +105,16 @@ namespace Jellyfin.Plugin.TubeArchivistMetadata.TubeArchivist while (response.StatusCode == HttpStatusCode.Moved) { url = response.Headers.Location; - _logger.LogInformation("{Message}", "Received redirect to: " + url); + _logger.LogDebug("{Message}", "Received redirect to: " + url); response = await client.GetAsync(url).ConfigureAwait(true); } - _logger.LogInformation("{Message}", url + ": " + response.StatusCode); + _logger.LogDebug("{Message}", url + ": " + response.StatusCode); if (response.IsSuccessStatusCode) { string rawData = await response.Content.ReadAsStringAsync().ConfigureAwait(true); - _logger.LogInformation("{Message}", rawData); + _logger.LogDebug("{Message}", rawData); video = JsonConvert.DeserializeObject