dll integration
This commit is contained in:
@@ -0,0 +1,153 @@
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user