99 lines
3.7 KiB
C#
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();
|
|
}
|
|
}
|
|
} |