Files
nfoguard/NFOGuard.Emby.Plugin/PluginEntryPoint.cs
T
2025-09-12 10:30:12 -04:00

99 lines
3.7 KiB
C#

using System;
using MediaBrowser.Controller.Library;
using MediaBrowser.Controller.Persistence;
using MediaBrowser.Controller.Plugins;
using MediaBrowser.Model.Logging;
namespace NFOGuard.Emby.Plugin
{
public class PluginEntryPoint : IServerEntryPoint
{
private readonly ILibraryManager _libraryManager;
private readonly IItemRepository _itemRepository;
private readonly ILogger _logger;
private LibraryEventHandler _eventHandler;
public PluginEntryPoint(ILibraryManager libraryManager, IItemRepository itemRepository, ILogManager logManager)
{
_libraryManager = libraryManager;
_itemRepository = itemRepository;
_logger = logManager.GetLogger("NFOGuard");
}
public void Run()
{
_logger.Info("NFOGuard :: Plugin starting up");
try
{
// Initialize tier settings based on build configuration
InitializeTierSettings();
_eventHandler = new LibraryEventHandler(_libraryManager, _itemRepository, _logger);
_logger.Info("NFOGuard :: Event handlers registered successfully");
}
catch (Exception ex)
{
_logger.ErrorException("NFOGuard :: Failed to initialize event handlers", ex);
}
}
private void InitializeTierSettings()
{
var freeTierManager = new FreeTierManager(_logger, _libraryManager);
var config = Plugin.Instance.Configuration;
// Initialize as percentage-based free tier by default if not configured
if (config.MonthlyProcessingLimit == 0 && !config.LicenseValid)
{
freeTierManager.SetPercentageBasedLimits(); // 2% episodes, 5% movies
_logger.Info("NFOGuard :: Free tier initialized - 2% of TV episodes + 5% of movies per month. Subscribe to unlock unlimited processing.");
}
else if (config.LicenseValid)
{
_logger.Info("NFOGuard :: Licensed version active - unlimited processing enabled");
}
else
{
_logger.Info($"NFOGuard :: Free tier active - {freeTierManager.GetUsageInfo()}");
}
// Start periodic license checking
StartPeriodicLicenseCheck();
}
private async void StartPeriodicLicenseCheck()
{
try
{
// Check every 24 hours for subscription changes
var timer = new System.Threading.Timer(async _ =>
{
try
{
var licenseManager = new LicenseManager(_logger);
await licenseManager.CheckAndActivateLicenseAsync();
var config = Plugin.Instance.Configuration;
config.LastLicenseCheck = DateTime.UtcNow;
Plugin.Instance.SaveConfiguration();
}
catch (Exception ex)
{
_logger.ErrorException("NFOGuard :: Periodic license check failed", ex);
}
}, null, TimeSpan.FromHours(1), TimeSpan.FromHours(24)); // First check in 1 hour, then every 24 hours
}
catch (Exception ex)
{
_logger.ErrorException("NFOGuard :: Failed to start periodic license check", ex);
}
}
public void Dispose()
{
_logger.Info("NFOGuard :: Plugin shutting down");
_eventHandler?.Dispose();
}
}
}