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(); } } }