153 lines
5.8 KiB
C#
153 lines
5.8 KiB
C#
using System;
|
|
using MediaBrowser.Controller.Entities;
|
|
using MediaBrowser.Controller.Entities.Movies;
|
|
using MediaBrowser.Controller.Entities.TV;
|
|
using MediaBrowser.Controller.Library;
|
|
using MediaBrowser.Controller.Persistence;
|
|
using MediaBrowser.Model.Logging;
|
|
|
|
namespace NFOGuard.Emby.Plugin
|
|
{
|
|
public class LibraryEventHandler : IDisposable
|
|
{
|
|
private readonly ILibraryManager _libraryManager;
|
|
private readonly IItemRepository _itemRepository;
|
|
private readonly ILogger _logger;
|
|
private readonly LicenseManager _licenseManager;
|
|
|
|
public LibraryEventHandler(ILibraryManager libraryManager, IItemRepository itemRepository, ILogger logger)
|
|
{
|
|
_libraryManager = libraryManager;
|
|
_itemRepository = itemRepository;
|
|
_logger = logger;
|
|
_licenseManager = new LicenseManager(_logger);
|
|
|
|
// Subscribe to library events
|
|
_libraryManager.ItemAdded += OnItemAdded;
|
|
_libraryManager.ItemUpdated += OnItemUpdated;
|
|
}
|
|
|
|
private void OnItemAdded(object sender, ItemChangeEventArgs e)
|
|
{
|
|
ProcessItem(e.Item, "Added");
|
|
}
|
|
|
|
private void OnItemUpdated(object sender, ItemChangeEventArgs e)
|
|
{
|
|
ProcessItem(e.Item, "Updated");
|
|
}
|
|
|
|
private void ProcessItem(BaseItem item, string eventType)
|
|
{
|
|
try
|
|
{
|
|
// Check if real-time sync is enabled
|
|
if (!Plugin.Instance.Configuration.EnableRealTimeSync)
|
|
return;
|
|
|
|
// TODO: Re-enable licensing when ready for production
|
|
// Check license/trial status
|
|
// if (!_licenseManager.CanUseFeature())
|
|
// {
|
|
// _logger.Info("NFOGuard :: License expired or invalid. Please purchase a license to continue using NFOGuard.");
|
|
// return;
|
|
// }
|
|
|
|
// Process TV episodes and Movies
|
|
if (item is Episode episode)
|
|
{
|
|
ProcessEpisode(episode, eventType);
|
|
}
|
|
else if (item is Movie movie)
|
|
{
|
|
ProcessMovie(movie, eventType);
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
_logger.ErrorException($"NFOGuard :: Error processing item {item?.Name}", ex);
|
|
}
|
|
}
|
|
|
|
private void ProcessEpisode(Episode episode, string eventType)
|
|
{
|
|
try
|
|
{
|
|
if (Plugin.Instance.Configuration.LogVerbose)
|
|
_logger.Info($"NFOGuard :: Processing {eventType} Episode :: {episode.Name}");
|
|
|
|
// Check if PremiereDate exists and differs from DateCreated
|
|
if (episode.PremiereDate.HasValue &&
|
|
episode.DateCreated != episode.PremiereDate.Value)
|
|
{
|
|
if (Plugin.Instance.Configuration.LogVerbose)
|
|
_logger.Info($"NFOGuard :: Syncing PremiereDate to DateCreated :: {episode.Name} :: " +
|
|
$"PremiereDate: {episode.PremiereDate.Value}, DateCreated: {episode.DateCreated}");
|
|
|
|
// Update DateCreated to match PremiereDate
|
|
episode.DateCreated = episode.PremiereDate.Value;
|
|
|
|
try
|
|
{
|
|
// Save to repository using ItemUpdateType.MetadataEdit
|
|
episode.UpdateToRepository(ItemUpdateType.MetadataEdit);
|
|
_logger.Info($"NFOGuard :: Successfully updated episode :: {episode.Name}");
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
_logger.ErrorException($"NFOGuard :: Failed to update episode {episode.Name}", ex);
|
|
}
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
_logger.ErrorException($"NFOGuard :: Error processing episode {episode?.Name}", ex);
|
|
}
|
|
}
|
|
|
|
private void ProcessMovie(Movie movie, string eventType)
|
|
{
|
|
try
|
|
{
|
|
if (Plugin.Instance.Configuration.LogVerbose)
|
|
_logger.Info($"NFOGuard :: Processing {eventType} Movie :: {movie.Name}");
|
|
|
|
// Check if PremiereDate exists and differs from DateCreated
|
|
if (movie.PremiereDate.HasValue &&
|
|
movie.DateCreated != movie.PremiereDate.Value)
|
|
{
|
|
if (Plugin.Instance.Configuration.LogVerbose)
|
|
_logger.Info($"NFOGuard :: Syncing PremiereDate to DateCreated :: {movie.Name} :: " +
|
|
$"PremiereDate: {movie.PremiereDate.Value}, DateCreated: {movie.DateCreated}");
|
|
|
|
// Update DateCreated to match PremiereDate
|
|
movie.DateCreated = movie.PremiereDate.Value;
|
|
|
|
try
|
|
{
|
|
// Save to repository using ItemUpdateType.MetadataEdit
|
|
movie.UpdateToRepository(ItemUpdateType.MetadataEdit);
|
|
_logger.Info($"NFOGuard :: Successfully updated movie :: {movie.Name}");
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
_logger.ErrorException($"NFOGuard :: Failed to update movie {movie.Name}", ex);
|
|
}
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
_logger.ErrorException($"NFOGuard :: Error processing movie {movie?.Name}", ex);
|
|
}
|
|
}
|
|
|
|
public void Dispose()
|
|
{
|
|
if (_libraryManager != null)
|
|
{
|
|
_libraryManager.ItemAdded -= OnItemAdded;
|
|
_libraryManager.ItemUpdated -= OnItemUpdated;
|
|
}
|
|
}
|
|
}
|
|
} |