various NFOguard versions
This commit is contained in:
@@ -0,0 +1,173 @@
|
||||
using System;
|
||||
using System.Linq;
|
||||
using MediaBrowser.Controller.Entities;
|
||||
using MediaBrowser.Controller.Entities.Movies;
|
||||
using MediaBrowser.Controller.Entities.TV;
|
||||
using MediaBrowser.Controller.Library;
|
||||
using MediaBrowser.Model.Logging;
|
||||
|
||||
namespace NFOGuard.Emby.Plugin
|
||||
{
|
||||
public class FreeTierManager
|
||||
{
|
||||
private readonly ILogger _logger;
|
||||
private readonly ILibraryManager _libraryManager;
|
||||
|
||||
public FreeTierManager(ILogger logger, ILibraryManager libraryManager = null)
|
||||
{
|
||||
_logger = logger;
|
||||
_libraryManager = libraryManager;
|
||||
}
|
||||
|
||||
public bool CanProcessItems(int itemCount, out string reason)
|
||||
{
|
||||
var config = Plugin.Instance.Configuration;
|
||||
reason = string.Empty;
|
||||
|
||||
// If licensed or no limit set, allow processing
|
||||
if (config.LicenseValid || config.MonthlyProcessingLimit == 0)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
// Check if month has rolled over
|
||||
ResetMonthlyCounterIfNeeded();
|
||||
|
||||
// Check if this processing would exceed the limit
|
||||
var wouldExceed = config.ProcessedThisMonth + itemCount > config.MonthlyProcessingLimit;
|
||||
|
||||
if (wouldExceed)
|
||||
{
|
||||
var remaining = Math.Max(0, config.MonthlyProcessingLimit - config.ProcessedThisMonth);
|
||||
reason = $"Free tier limit reached. {remaining} items remaining this month of {config.MonthlyProcessingLimit} allowed. Upgrade to process unlimited items.";
|
||||
_logger.Info($"NFOGuard :: {reason}");
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public void RecordProcessedItems(int count)
|
||||
{
|
||||
var config = Plugin.Instance.Configuration;
|
||||
|
||||
// Only track if using free tier limits
|
||||
if (config.MonthlyProcessingLimit > 0 && !config.LicenseValid)
|
||||
{
|
||||
config.ProcessedThisMonth += count;
|
||||
Plugin.Instance.SaveConfiguration();
|
||||
|
||||
_logger.Info($"NFOGuard :: Free tier usage: {config.ProcessedThisMonth}/{config.MonthlyProcessingLimit} items this month");
|
||||
}
|
||||
}
|
||||
|
||||
public void SetFreeTierLimits(int monthlyLimit)
|
||||
{
|
||||
var config = Plugin.Instance.Configuration;
|
||||
config.MonthlyProcessingLimit = monthlyLimit;
|
||||
config.LicenseValid = false;
|
||||
|
||||
if (config.InstallDate == DateTime.MinValue)
|
||||
{
|
||||
config.InstallDate = DateTime.UtcNow;
|
||||
}
|
||||
|
||||
ResetMonthlyCounterIfNeeded();
|
||||
Plugin.Instance.SaveConfiguration();
|
||||
|
||||
_logger.Info($"NFOGuard :: Free tier configured: {monthlyLimit} items per month");
|
||||
}
|
||||
|
||||
public void SetPercentageBasedLimits()
|
||||
{
|
||||
if (_libraryManager == null)
|
||||
{
|
||||
_logger.Warn("NFOGuard :: Cannot calculate percentage limits without LibraryManager");
|
||||
SetFreeTierLimits(500); // Fallback to fixed limit
|
||||
return;
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
// Get library counts
|
||||
var episodes = _libraryManager.GetItemList(new InternalItemsQuery
|
||||
{
|
||||
IncludeItemTypes = new[] { "Episode" },
|
||||
Recursive = true
|
||||
}).OfType<Episode>().Count();
|
||||
|
||||
var movies = _libraryManager.GetItemList(new InternalItemsQuery
|
||||
{
|
||||
IncludeItemTypes = new[] { "Movie" },
|
||||
Recursive = true
|
||||
}).OfType<Movie>().Count();
|
||||
|
||||
// Calculate 2% of TV episodes + 5% of movies
|
||||
var episodeLimit = Math.Max(1, (int)(episodes * 0.02)); // At least 1 episode
|
||||
var movieLimit = Math.Max(1, (int)(movies * 0.05)); // At least 1 movie
|
||||
var totalLimit = episodeLimit + movieLimit;
|
||||
|
||||
_logger.Info($"NFOGuard :: Library analysis - Episodes: {episodes}, Movies: {movies}");
|
||||
_logger.Info($"NFOGuard :: Free tier limits - Episodes: {episodeLimit} (2%), Movies: {movieLimit} (5%), Total: {totalLimit}");
|
||||
|
||||
var config = Plugin.Instance.Configuration;
|
||||
config.MonthlyProcessingLimit = totalLimit;
|
||||
config.LicenseValid = false;
|
||||
|
||||
if (config.InstallDate == DateTime.MinValue)
|
||||
{
|
||||
config.InstallDate = DateTime.UtcNow;
|
||||
}
|
||||
|
||||
ResetMonthlyCounterIfNeeded();
|
||||
Plugin.Instance.SaveConfiguration();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_logger.ErrorException("NFOGuard :: Error calculating percentage limits", ex);
|
||||
SetFreeTierLimits(500); // Fallback
|
||||
}
|
||||
}
|
||||
|
||||
public void EnableFullVersion()
|
||||
{
|
||||
var config = Plugin.Instance.Configuration;
|
||||
config.LicenseValid = true;
|
||||
config.MonthlyProcessingLimit = 0;
|
||||
Plugin.Instance.SaveConfiguration();
|
||||
|
||||
_logger.Info("NFOGuard :: Full version enabled - unlimited processing");
|
||||
}
|
||||
|
||||
private void ResetMonthlyCounterIfNeeded()
|
||||
{
|
||||
var config = Plugin.Instance.Configuration;
|
||||
var now = DateTime.UtcNow;
|
||||
|
||||
// Reset if last reset was more than a month ago or never set
|
||||
if (config.LastProcessingReset == DateTime.MinValue ||
|
||||
now > config.LastProcessingReset.AddMonths(1))
|
||||
{
|
||||
config.ProcessedThisMonth = 0;
|
||||
config.LastProcessingReset = new DateTime(now.Year, now.Month, 1); // First of current month
|
||||
Plugin.Instance.SaveConfiguration();
|
||||
|
||||
_logger.Info("NFOGuard :: Monthly processing counter reset");
|
||||
}
|
||||
}
|
||||
|
||||
public string GetUsageInfo()
|
||||
{
|
||||
var config = Plugin.Instance.Configuration;
|
||||
|
||||
if (config.LicenseValid || config.MonthlyProcessingLimit == 0)
|
||||
{
|
||||
return "Full version - unlimited processing";
|
||||
}
|
||||
|
||||
ResetMonthlyCounterIfNeeded();
|
||||
var remaining = Math.Max(0, config.MonthlyProcessingLimit - config.ProcessedThisMonth);
|
||||
return $"Free tier: {remaining} items remaining this month (of {config.MonthlyProcessingLimit} allowed)";
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -14,6 +14,7 @@ namespace NFOGuard.Emby.Plugin
|
||||
private readonly IItemRepository _itemRepository;
|
||||
private readonly ILogger _logger;
|
||||
private readonly LicenseManager _licenseManager;
|
||||
private readonly FreeTierManager _freeTierManager;
|
||||
|
||||
public LibraryEventHandler(ILibraryManager libraryManager, IItemRepository itemRepository, ILogger logger)
|
||||
{
|
||||
@@ -21,6 +22,7 @@ namespace NFOGuard.Emby.Plugin
|
||||
_itemRepository = itemRepository;
|
||||
_logger = logger;
|
||||
_licenseManager = new LicenseManager(_logger);
|
||||
_freeTierManager = new FreeTierManager(_logger);
|
||||
|
||||
// Subscribe to library events
|
||||
_libraryManager.ItemAdded += OnItemAdded;
|
||||
@@ -45,13 +47,21 @@ namespace NFOGuard.Emby.Plugin
|
||||
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;
|
||||
// }
|
||||
// Free tier: disable real-time processing
|
||||
var config = Plugin.Instance.Configuration;
|
||||
if (config.MonthlyProcessingLimit > 0 && !config.LicenseValid)
|
||||
{
|
||||
if (Plugin.Instance.Configuration.LogVerbose)
|
||||
_logger.Info($"NFOGuard :: Real-time processing disabled in free tier. Use scheduled task instead.");
|
||||
return;
|
||||
}
|
||||
|
||||
// Check if we can process this item
|
||||
if (!_freeTierManager.CanProcessItems(1, out string reason))
|
||||
{
|
||||
_logger.Info($"NFOGuard :: Skipping real-time processing: {reason}");
|
||||
return;
|
||||
}
|
||||
|
||||
// Process TV episodes and Movies
|
||||
if (item is Episode episode)
|
||||
@@ -92,6 +102,9 @@ namespace NFOGuard.Emby.Plugin
|
||||
// Save to repository using ItemUpdateType.MetadataEdit
|
||||
episode.UpdateToRepository(ItemUpdateType.MetadataEdit);
|
||||
_logger.Info($"NFOGuard :: Successfully updated episode :: {episode.Name}");
|
||||
|
||||
// Record usage for free tier tracking
|
||||
_freeTierManager.RecordProcessedItems(1);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
@@ -128,6 +141,9 @@ namespace NFOGuard.Emby.Plugin
|
||||
// Save to repository using ItemUpdateType.MetadataEdit
|
||||
movie.UpdateToRepository(ItemUpdateType.MetadataEdit);
|
||||
_logger.Info($"NFOGuard :: Successfully updated movie :: {movie.Name}");
|
||||
|
||||
// Record usage for free tier tracking
|
||||
_freeTierManager.RecordProcessedItems(1);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
|
||||
@@ -1,46 +1,128 @@
|
||||
using System;
|
||||
using System.Net.Http;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using MediaBrowser.Model.Logging;
|
||||
using MediaBrowser.Model.Serialization;
|
||||
|
||||
namespace NFOGuard.Emby.Plugin
|
||||
{
|
||||
public class LicenseManager
|
||||
{
|
||||
private readonly ILogger _logger;
|
||||
private readonly HttpClient _httpClient;
|
||||
private const string NFOGUARD_API_URL = "https://nfoguard.com/api"; // Your future API endpoint
|
||||
|
||||
public LicenseManager(ILogger logger)
|
||||
{
|
||||
_logger = logger;
|
||||
_httpClient = new HttpClient();
|
||||
_httpClient.Timeout = TimeSpan.FromSeconds(10); // Quick timeout for license checks
|
||||
}
|
||||
|
||||
public async Task<bool> ValidateLicenseAsync(string licenseKey)
|
||||
public async Task<bool> CheckLicenseStatusAsync()
|
||||
{
|
||||
try
|
||||
{
|
||||
// TODO: Implement actual license validation
|
||||
// For now, return true for testing
|
||||
// In production, this would call your licensing server
|
||||
var config = Plugin.Instance.Configuration;
|
||||
|
||||
if (string.IsNullOrEmpty(licenseKey))
|
||||
// Get unique identifier for this installation
|
||||
var machineId = GetMachineIdentifier();
|
||||
|
||||
_logger.Info("NFOGuard :: Checking automatic license status...");
|
||||
|
||||
// Check Patreon subscription
|
||||
var patreonValid = await CheckPatreonSubscriptionAsync(machineId);
|
||||
if (patreonValid)
|
||||
{
|
||||
_logger.Info("NFOGuard :: No license key provided, running in trial mode");
|
||||
return false;
|
||||
_logger.Info("NFOGuard :: Valid Patreon subscription found");
|
||||
return true;
|
||||
}
|
||||
|
||||
// Placeholder for license validation logic
|
||||
// You would implement your own licensing server/API here
|
||||
_logger.Info($"NFOGuard :: Validating license key: {licenseKey.Substring(0, Math.Min(8, licenseKey.Length))}...");
|
||||
// Check PayPal recurring payment
|
||||
var paypalValid = await CheckPayPalSubscriptionAsync(machineId);
|
||||
if (paypalValid)
|
||||
{
|
||||
_logger.Info("NFOGuard :: Valid PayPal subscription found");
|
||||
return true;
|
||||
}
|
||||
|
||||
// For now, accept any non-empty key as valid
|
||||
return !string.IsNullOrWhiteSpace(licenseKey);
|
||||
_logger.Info("NFOGuard :: No active subscription found, using free tier");
|
||||
return false;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_logger.ErrorException("NFOGuard :: License validation error", ex);
|
||||
return false; // Default to free tier on error
|
||||
}
|
||||
}
|
||||
|
||||
private async Task<bool> CheckPatreonSubscriptionAsync(string machineId)
|
||||
{
|
||||
try
|
||||
{
|
||||
var requestUrl = $"{NFOGUARD_API_URL}/patreon/check?machine_id={machineId}";
|
||||
var response = await _httpClient.GetStringAsync(requestUrl);
|
||||
|
||||
// Parse response (you'll implement the API to return JSON like {"active": true, "tier": "supporter"})
|
||||
return response.Contains("\"active\":true");
|
||||
}
|
||||
catch (HttpRequestException)
|
||||
{
|
||||
_logger.Info("NFOGuard :: Cannot reach license server, running in offline mode");
|
||||
return false; // Offline mode - use free tier
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_logger.ErrorException("NFOGuard :: Patreon check error", ex);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
private async Task<bool> CheckPayPalSubscriptionAsync(string machineId)
|
||||
{
|
||||
try
|
||||
{
|
||||
var requestUrl = $"{NFOGUARD_API_URL}/paypal/check?machine_id={machineId}";
|
||||
var response = await _httpClient.GetStringAsync(requestUrl);
|
||||
|
||||
// Parse response
|
||||
return response.Contains("\"active\":true");
|
||||
}
|
||||
catch (HttpRequestException)
|
||||
{
|
||||
_logger.Info("NFOGuard :: Cannot reach license server, running in offline mode");
|
||||
return false;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_logger.ErrorException("NFOGuard :: PayPal check error", ex);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public string GetMachineIdentifier()
|
||||
{
|
||||
try
|
||||
{
|
||||
// Create a unique but consistent identifier for this installation
|
||||
// Combine multiple factors to create a stable machine ID
|
||||
var machineName = Environment.MachineName ?? "unknown";
|
||||
var userDomain = Environment.UserDomainName ?? "unknown";
|
||||
var installPath = Plugin.Instance.ConfigurationFilePath;
|
||||
|
||||
var combined = $"{machineName}-{userDomain}-{installPath}".GetHashCode().ToString("X8");
|
||||
|
||||
_logger.Info($"NFOGuard :: Machine ID: {combined}");
|
||||
return combined;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_logger.ErrorException("NFOGuard :: Error generating machine ID", ex);
|
||||
return "FALLBACK-ID";
|
||||
}
|
||||
}
|
||||
|
||||
public bool IsTrialExpired()
|
||||
{
|
||||
// Implement trial logic here
|
||||
@@ -62,5 +144,131 @@ namespace NFOGuard.Emby.Plugin
|
||||
// Check if license is valid or trial is still active
|
||||
return Plugin.Instance.Configuration.LicenseValid || !IsTrialExpired();
|
||||
}
|
||||
|
||||
public async Task<bool> CheckAndActivateLicenseAsync()
|
||||
{
|
||||
try
|
||||
{
|
||||
_logger.Info("NFOGuard :: Checking for active subscriptions...");
|
||||
|
||||
var isValid = await CheckLicenseStatusAsync();
|
||||
var config = Plugin.Instance.Configuration;
|
||||
|
||||
if (isValid && !config.LicenseValid)
|
||||
{
|
||||
// Activate license
|
||||
config.LicenseValid = true;
|
||||
config.MonthlyProcessingLimit = 0; // Remove limits
|
||||
config.ProcessedThisMonth = 0; // Reset counter
|
||||
Plugin.Instance.SaveConfiguration();
|
||||
|
||||
var freeTierManager = new FreeTierManager(_logger);
|
||||
freeTierManager.EnableFullVersion();
|
||||
|
||||
_logger.Info("NFOGuard :: Subscription detected - unlimited processing activated!");
|
||||
return true;
|
||||
}
|
||||
else if (!isValid && config.LicenseValid)
|
||||
{
|
||||
// Deactivate license
|
||||
config.LicenseValid = false;
|
||||
Plugin.Instance.SaveConfiguration();
|
||||
|
||||
var freeTierManager = new FreeTierManager(_logger);
|
||||
freeTierManager.SetPercentageBasedLimits();
|
||||
|
||||
_logger.Info("NFOGuard :: No active subscription found - switched to free tier");
|
||||
return false;
|
||||
}
|
||||
|
||||
return isValid;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_logger.ErrorException("NFOGuard :: License check error", ex);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public async Task<string> RegisterMachineAsync(string userEmail)
|
||||
{
|
||||
try
|
||||
{
|
||||
var machineId = GetMachineIdentifier();
|
||||
var config = Plugin.Instance.Configuration;
|
||||
|
||||
var registrationData = new
|
||||
{
|
||||
machine_id = machineId,
|
||||
email = userEmail,
|
||||
emby_version = Environment.OSVersion.ToString(),
|
||||
plugin_version = Plugin.Instance.Description,
|
||||
install_date = config.InstallDate.ToString("yyyy-MM-dd"),
|
||||
library_stats = GetLibraryStats()
|
||||
};
|
||||
|
||||
var json = System.Text.Json.JsonSerializer.Serialize(registrationData);
|
||||
var content = new StringContent(json, Encoding.UTF8, "application/json");
|
||||
|
||||
var response = await _httpClient.PostAsync($"{NFOGUARD_API_URL}/register", content);
|
||||
var responseText = await response.Content.ReadAsStringAsync();
|
||||
|
||||
if (response.IsSuccessStatusCode)
|
||||
{
|
||||
_logger.Info($"NFOGuard :: Machine registered successfully: {machineId}");
|
||||
return $"Registration successful!\n\nMachine ID: {machineId}\n\nTo activate unlimited processing:\n• Subscribe on Patreon: https://patreon.com/nfoguard\n• Or PayPal recurring: https://nfoguard.com/paypal\n\nThe plugin will automatically detect your subscription within 24 hours.";
|
||||
}
|
||||
else
|
||||
{
|
||||
_logger.Warn($"NFOGuard :: Registration failed: {responseText}");
|
||||
return $"Registration failed. You can still use the free tier.\n\nMachine ID: {machineId}\nError: {responseText}";
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_logger.ErrorException("NFOGuard :: Registration error", ex);
|
||||
var machineId = GetMachineIdentifier();
|
||||
return $"Registration failed (offline mode).\n\nMachine ID: {machineId}\n\nTo activate later, visit: https://nfoguard.com/register";
|
||||
}
|
||||
}
|
||||
|
||||
private object GetLibraryStats()
|
||||
{
|
||||
try
|
||||
{
|
||||
// This would be used for analytics (anonymized)
|
||||
return new
|
||||
{
|
||||
episodes_estimated = "unknown",
|
||||
movies_estimated = "unknown",
|
||||
free_tier_usage = Plugin.Instance.Configuration.ProcessedThisMonth
|
||||
};
|
||||
}
|
||||
catch
|
||||
{
|
||||
return new { error = "stats_unavailable" };
|
||||
}
|
||||
}
|
||||
|
||||
public void DeactivateLicense()
|
||||
{
|
||||
try
|
||||
{
|
||||
var config = Plugin.Instance.Configuration;
|
||||
config.LicenseValid = false;
|
||||
|
||||
// Reset to percentage-based free tier
|
||||
var freeTierManager = new FreeTierManager(_logger);
|
||||
freeTierManager.SetPercentageBasedLimits();
|
||||
|
||||
Plugin.Instance.SaveConfiguration();
|
||||
|
||||
_logger.Info("NFOGuard :: License deactivated - switched to free tier");
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_logger.ErrorException("NFOGuard :: License deactivation error", ex);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -10,6 +10,8 @@
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="System.Memory" Version="4.5.5" />
|
||||
<PackageReference Include="System.Net.Http" Version="4.3.4" />
|
||||
<PackageReference Include="System.Text.Json" Version="6.0.0" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
@@ -28,8 +30,5 @@
|
||||
</ItemGroup>
|
||||
|
||||
|
||||
<ItemGroup>
|
||||
<EmbeddedResource Include="thumb.png" Condition="Exists('thumb.png')" />
|
||||
<!-- <EmbeddedResource Include="Configuration\configPage.html" /> -->
|
||||
</ItemGroup>
|
||||
<!-- All web resources disabled to prevent UI loading issues -->
|
||||
</Project>
|
||||
@@ -16,8 +16,9 @@ namespace NFOGuard.Emby.Plugin
|
||||
{
|
||||
private readonly ILibraryManager _libraryManager;
|
||||
private readonly ILogger _logger;
|
||||
private readonly FreeTierManager _freeTierManager;
|
||||
|
||||
public string Name => "NFOGuard Date Sync";
|
||||
public string Name => "DateSync Task";
|
||||
|
||||
public string Key => "NFOGuardSync";
|
||||
|
||||
@@ -29,6 +30,7 @@ namespace NFOGuard.Emby.Plugin
|
||||
{
|
||||
_libraryManager = libraryManager;
|
||||
_logger = logManager.GetLogger("NFOGuard");
|
||||
_freeTierManager = new FreeTierManager(_logger);
|
||||
}
|
||||
|
||||
public async Task Execute(CancellationToken cancellationToken, IProgress<double> progress)
|
||||
@@ -59,27 +61,79 @@ namespace NFOGuard.Emby.Plugin
|
||||
var totalItems = episodes.Count + movies.Count;
|
||||
_logger.Info($"NFOGuard :: Found {episodes.Count} episodes and {movies.Count} movies to process ({totalItems} total)");
|
||||
|
||||
// Calculate items that need processing
|
||||
var itemsNeedingSync = episodes.Where(e => e.PremiereDate.HasValue && e.DateCreated != e.PremiereDate.Value).Count() +
|
||||
movies.Where(m => m.PremiereDate.HasValue && m.DateCreated != m.PremiereDate.Value).Count();
|
||||
|
||||
_logger.Info($"NFOGuard :: {itemsNeedingSync} items need date synchronization");
|
||||
|
||||
// Check free tier limits
|
||||
if (!_freeTierManager.CanProcessItems(itemsNeedingSync, out string reason))
|
||||
{
|
||||
_logger.Info($"NFOGuard :: {reason}");
|
||||
|
||||
// In free tier, process only what we can
|
||||
var pluginConfig = Plugin.Instance.Configuration;
|
||||
if (pluginConfig.MonthlyProcessingLimit > 0 && !pluginConfig.LicenseValid)
|
||||
{
|
||||
var allowedCount = Math.Max(0, pluginConfig.MonthlyProcessingLimit - pluginConfig.ProcessedThisMonth);
|
||||
_logger.Info($"NFOGuard :: Free tier: Processing {allowedCount} items only");
|
||||
|
||||
if (allowedCount == 0)
|
||||
{
|
||||
_logger.Info("NFOGuard :: Free tier limit reached. No items will be processed this month.");
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
var processedCount = 0;
|
||||
var updatedCount = 0;
|
||||
var config = Plugin.Instance.Configuration;
|
||||
var remainingQuota = config.MonthlyProcessingLimit > 0 && !config.LicenseValid
|
||||
? Math.Max(0, config.MonthlyProcessingLimit - config.ProcessedThisMonth)
|
||||
: int.MaxValue;
|
||||
|
||||
// Process episodes
|
||||
for (int i = 0; i < episodes.Count; i++)
|
||||
for (int i = 0; i < episodes.Count && (config.LicenseValid || remainingQuota > 0); i++)
|
||||
{
|
||||
cancellationToken.ThrowIfCancellationRequested();
|
||||
|
||||
var episode = episodes[i];
|
||||
try
|
||||
{
|
||||
// Always log detailed info to diagnose the issue
|
||||
if (Plugin.Instance.Configuration.LogVerbose)
|
||||
_logger.Info($"NFOGuard :: Episode: {episode.Name} :: " +
|
||||
$"PremiereDate: {episode.PremiereDate?.ToString("yyyy-MM-dd HH:mm:ss") ?? "NULL"}, " +
|
||||
$"DateCreated: {episode.DateCreated.ToString("yyyy-MM-dd HH:mm:ss")}");
|
||||
|
||||
if (episode.PremiereDate.HasValue &&
|
||||
episode.DateCreated != episode.PremiereDate.Value)
|
||||
{
|
||||
if (Plugin.Instance.Configuration.LogVerbose)
|
||||
_logger.Info($"NFOGuard :: Syncing episode: {episode.Name} :: " +
|
||||
_logger.Info($"NFOGuard :: SYNCING episode: {episode.Name} :: " +
|
||||
$"PremiereDate: {episode.PremiereDate.Value}, DateCreated: {episode.DateCreated}");
|
||||
|
||||
episode.DateCreated = episode.PremiereDate.Value;
|
||||
episode.UpdateToRepository(ItemUpdateType.MetadataEdit);
|
||||
updatedCount++;
|
||||
|
||||
// Track usage and decrement quota
|
||||
_freeTierManager.RecordProcessedItems(1);
|
||||
if (!config.LicenseValid && config.MonthlyProcessingLimit > 0)
|
||||
{
|
||||
remainingQuota--;
|
||||
}
|
||||
}
|
||||
else if (!episode.PremiereDate.HasValue)
|
||||
{
|
||||
if (Plugin.Instance.Configuration.LogVerbose)
|
||||
_logger.Info($"NFOGuard :: Episode {episode.Name} has no PremiereDate - skipping");
|
||||
}
|
||||
else
|
||||
{
|
||||
if (Plugin.Instance.Configuration.LogVerbose)
|
||||
_logger.Info($"NFOGuard :: Episode {episode.Name} dates already match - no sync needed");
|
||||
}
|
||||
|
||||
processedCount++;
|
||||
@@ -94,23 +148,45 @@ namespace NFOGuard.Emby.Plugin
|
||||
}
|
||||
|
||||
// Process movies
|
||||
for (int i = 0; i < movies.Count; i++)
|
||||
for (int i = 0; i < movies.Count && (config.LicenseValid || remainingQuota > 0); i++)
|
||||
{
|
||||
cancellationToken.ThrowIfCancellationRequested();
|
||||
|
||||
var movie = movies[i];
|
||||
try
|
||||
{
|
||||
// Always log detailed info to diagnose the issue
|
||||
if (Plugin.Instance.Configuration.LogVerbose)
|
||||
_logger.Info($"NFOGuard :: Movie: {movie.Name} :: " +
|
||||
$"PremiereDate: {movie.PremiereDate?.ToString("yyyy-MM-dd HH:mm:ss") ?? "NULL"}, " +
|
||||
$"DateCreated: {movie.DateCreated.ToString("yyyy-MM-dd HH:mm:ss")}");
|
||||
|
||||
if (movie.PremiereDate.HasValue &&
|
||||
movie.DateCreated != movie.PremiereDate.Value)
|
||||
{
|
||||
if (Plugin.Instance.Configuration.LogVerbose)
|
||||
_logger.Info($"NFOGuard :: Syncing movie: {movie.Name} :: " +
|
||||
_logger.Info($"NFOGuard :: SYNCING movie: {movie.Name} :: " +
|
||||
$"PremiereDate: {movie.PremiereDate.Value}, DateCreated: {movie.DateCreated}");
|
||||
|
||||
movie.DateCreated = movie.PremiereDate.Value;
|
||||
movie.UpdateToRepository(ItemUpdateType.MetadataEdit);
|
||||
updatedCount++;
|
||||
|
||||
// Track usage and decrement quota
|
||||
_freeTierManager.RecordProcessedItems(1);
|
||||
if (!config.LicenseValid && config.MonthlyProcessingLimit > 0)
|
||||
{
|
||||
remainingQuota--;
|
||||
}
|
||||
}
|
||||
else if (!movie.PremiereDate.HasValue)
|
||||
{
|
||||
if (Plugin.Instance.Configuration.LogVerbose)
|
||||
_logger.Info($"NFOGuard :: Movie {movie.Name} has no PremiereDate - skipping");
|
||||
}
|
||||
else
|
||||
{
|
||||
if (Plugin.Instance.Configuration.LogVerbose)
|
||||
_logger.Info($"NFOGuard :: Movie {movie.Name} dates already match - no sync needed");
|
||||
}
|
||||
|
||||
processedCount++;
|
||||
|
||||
+104
-14
@@ -1,49 +1,139 @@
|
||||
using System;
|
||||
using System.IO;
|
||||
using System.Threading.Tasks;
|
||||
using MediaBrowser.Common.Plugins;
|
||||
using MediaBrowser.Model.Drawing;
|
||||
using MediaBrowser.Common.Configuration;
|
||||
using MediaBrowser.Model.Plugins;
|
||||
using MediaBrowser.Model.Serialization;
|
||||
using MediaBrowser.Model.Logging;
|
||||
|
||||
namespace NFOGuard.Emby.Plugin
|
||||
{
|
||||
public class Plugin : BasePlugin<PluginConfiguration>, IHasThumbImage
|
||||
public class Plugin : BasePlugin<PluginConfiguration>
|
||||
{
|
||||
private Guid _id = new Guid("A1B2C3D4-5678-9ABC-DEF0-123456789ABC");
|
||||
private Guid _id = new Guid("B2C3D4E5-6789-ABCD-EF01-23456789ABCE"); // Completely new GUID to clear cache
|
||||
|
||||
public override string Name => "NFOGuard";
|
||||
public override string Name => "DateSync";
|
||||
|
||||
public override string Description => "Synchronizes TV episode PremiereDate to DateCreated to preserve import dates in Emby";
|
||||
|
||||
public override Guid Id => _id;
|
||||
|
||||
public override string ConfigurationFileName => "nfoguard.xml";
|
||||
|
||||
public ImageFormat ThumbImageFormat => ImageFormat.Png;
|
||||
public override string ConfigurationFileName => "datesync.xml";
|
||||
|
||||
public static Plugin Instance { get; private set; }
|
||||
|
||||
public Stream GetThumbImage()
|
||||
{
|
||||
var type = GetType();
|
||||
return type.Assembly.GetManifestResourceStream(type.Namespace + ".thumb.png");
|
||||
}
|
||||
|
||||
public Plugin(IApplicationPaths applicationPaths, IXmlSerializer xmlSerializer)
|
||||
: base(applicationPaths, xmlSerializer)
|
||||
{
|
||||
Instance = this;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Registers machine and checks for automatic subscription activation
|
||||
/// </summary>
|
||||
public async Task<string> RegisterAndCheckSubscriptionAsync(string userEmail, ILogger logger)
|
||||
{
|
||||
try
|
||||
{
|
||||
var licenseManager = new LicenseManager(logger);
|
||||
|
||||
// Register machine first
|
||||
var registrationResult = await licenseManager.RegisterMachineAsync(userEmail);
|
||||
|
||||
// Then check for existing subscription
|
||||
await licenseManager.CheckAndActivateLicenseAsync();
|
||||
|
||||
return registrationResult;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
return $"Registration error: {ex.Message}";
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets current license status and usage information
|
||||
/// </summary>
|
||||
public string GetLicenseStatus(ILogger logger)
|
||||
{
|
||||
try
|
||||
{
|
||||
var freeTierManager = new FreeTierManager(logger);
|
||||
var licenseManager = new LicenseManager(logger);
|
||||
var machineId = licenseManager.GetMachineIdentifier();
|
||||
|
||||
if (Configuration.LicenseValid)
|
||||
{
|
||||
return $"✅ Subscription Active\nMachine ID: {machineId}\nStatus: Unlimited processing enabled\n\nSubscription automatically detected via Patreon/PayPal.";
|
||||
}
|
||||
else
|
||||
{
|
||||
var usageInfo = freeTierManager.GetUsageInfo();
|
||||
var trialInfo = licenseManager.IsTrialExpired() ? "Trial expired" : $"Trial active ({Math.Max(0, (Configuration.InstallDate.AddDays(30) - DateTime.UtcNow).Days)} days remaining)";
|
||||
return $"🆓 Free Tier Active\nMachine ID: {machineId}\nUsage: {usageInfo}\nTrial: {trialInfo}\n\nTo unlock unlimited processing:\n• Subscribe: https://patreon.com/nfoguard\n• PayPal: https://nfoguard.com/paypal\n\nActivation is automatic within 24 hours.";
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
return $"Error getting license status: {ex.Message}";
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Manually checks for subscription updates
|
||||
/// </summary>
|
||||
public async Task<string> RefreshSubscriptionStatusAsync(ILogger logger)
|
||||
{
|
||||
try
|
||||
{
|
||||
var licenseManager = new LicenseManager(logger);
|
||||
var wasLicensed = Configuration.LicenseValid;
|
||||
|
||||
await licenseManager.CheckAndActivateLicenseAsync();
|
||||
|
||||
if (!wasLicensed && Configuration.LicenseValid)
|
||||
{
|
||||
return "✅ Subscription found and activated! Unlimited processing enabled.";
|
||||
}
|
||||
else if (wasLicensed && !Configuration.LicenseValid)
|
||||
{
|
||||
return "⚠️ Subscription expired or cancelled. Switched to free tier.";
|
||||
}
|
||||
else if (Configuration.LicenseValid)
|
||||
{
|
||||
return "✅ Subscription is still active.";
|
||||
}
|
||||
else
|
||||
{
|
||||
return "🆓 No active subscription found. Still using free tier.";
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
return $"Error checking subscription: {ex.Message}";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public class PluginConfiguration : BasePluginConfiguration
|
||||
{
|
||||
public bool EnableRealTimeSync { get; set; } = true;
|
||||
public bool EnableScheduledTask { get; set; } = true;
|
||||
public bool LogVerbose { get; set; } = false;
|
||||
public bool LogVerbose { get; set; } = true; // Enabled by default for diagnostic version
|
||||
public bool LicenseValid { get; set; } = false;
|
||||
public string LicenseKey { get; set; } = string.Empty;
|
||||
public string RegisteredEmail { get; set; } = string.Empty;
|
||||
public DateTime InstallDate { get; set; } = DateTime.MinValue;
|
||||
public DateTime LastLicenseCheck { get; set; } = DateTime.MinValue;
|
||||
|
||||
// Free tier tracking
|
||||
public DateTime LastProcessingReset { get; set; } = DateTime.MinValue;
|
||||
public int ProcessedThisMonth { get; set; } = 0;
|
||||
public int MonthlyProcessingLimit { get; set; } = 0; // 0 = no limit (full version)
|
||||
|
||||
// Machine registration
|
||||
public bool MachineRegistered { get; set; } = false;
|
||||
public string MachineId { get; set; } = string.Empty;
|
||||
}
|
||||
}
|
||||
@@ -26,6 +26,9 @@ namespace NFOGuard.Emby.Plugin
|
||||
|
||||
try
|
||||
{
|
||||
// Initialize tier settings based on build configuration
|
||||
InitializeTierSettings();
|
||||
|
||||
_eventHandler = new LibraryEventHandler(_libraryManager, _itemRepository, _logger);
|
||||
_logger.Info("NFOGuard :: Event handlers registered successfully");
|
||||
}
|
||||
@@ -35,6 +38,58 @@ namespace NFOGuard.Emby.Plugin
|
||||
}
|
||||
}
|
||||
|
||||
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");
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
Binary file not shown.
Binary file not shown.
Executable
+58
@@ -0,0 +1,58 @@
|
||||
#!/bin/bash
|
||||
|
||||
echo "Building NFOGuard Emby Plugin - Automatic Subscription System"
|
||||
echo "============================================================"
|
||||
echo "🔥 Like TimeLord - No manual keys, automatic activation!"
|
||||
echo ""
|
||||
|
||||
# Clean previous builds
|
||||
rm -rf bin obj
|
||||
|
||||
echo "Building automatic subscription version..."
|
||||
|
||||
# Build unified version with automatic licensing
|
||||
dotnet build NFOGuard.Emby.Plugin.csproj -c Release -f net48
|
||||
|
||||
if [ $? -eq 0 ]; then
|
||||
# Create version directory
|
||||
mkdir -p ../releases/v2.0.0-automatic
|
||||
cp bin/Release/net48/NFOGuard.Emby.Plugin.dll ../releases/v2.0.0-automatic/
|
||||
|
||||
# Copy to main plugin-release directory
|
||||
cp bin/Release/net48/NFOGuard.Emby.Plugin.dll ../plugin-release/
|
||||
|
||||
echo "✅ Automatic subscription version built successfully"
|
||||
echo ""
|
||||
echo "🎉 NFOGuard v2.0.0-automatic ready!"
|
||||
echo ""
|
||||
echo "🔧 How It Works:"
|
||||
echo "1. Plugin installs with percentage-based free tier:"
|
||||
echo " • 2% of your TV episodes per month"
|
||||
echo " • 5% of your movies per month"
|
||||
echo " • Scheduled processing only (no real-time)"
|
||||
echo ""
|
||||
echo "2. Users register with email (optional but recommended)"
|
||||
echo "3. Subscribe via Patreon or PayPal recurring"
|
||||
echo "4. Plugin automatically detects subscription within 24hrs"
|
||||
echo "5. Unlimited processing + real-time sync unlocked"
|
||||
echo ""
|
||||
echo "💳 Payment Options:"
|
||||
echo "• Patreon: https://patreon.com/nfoguard (recommended)"
|
||||
echo "• PayPal Recurring: https://nfoguard.com/paypal"
|
||||
echo ""
|
||||
echo "🔒 Security Features:"
|
||||
echo "• Machine ID based activation (harder to crack)"
|
||||
echo "• Server-side subscription validation"
|
||||
echo "• Automatic deactivation if subscription expires"
|
||||
echo "• Offline mode graceful fallback to free tier"
|
||||
echo ""
|
||||
echo "📊 API Endpoints Needed (nfoguard.com):"
|
||||
echo "• POST /api/register - Machine registration"
|
||||
echo "• GET /api/patreon/check?machine_id=XXX - Patreon validation"
|
||||
echo "• GET /api/paypal/check?machine_id=XXX - PayPal validation"
|
||||
echo ""
|
||||
echo "File ready: releases/v2.0.0-automatic/NFOGuard.Emby.Plugin.dll"
|
||||
else
|
||||
echo "❌ Build failed"
|
||||
exit 1
|
||||
fi
|
||||
Executable
+52
@@ -0,0 +1,52 @@
|
||||
#!/bin/bash
|
||||
|
||||
echo "Building DateSync Emby Plugin - Clean Version"
|
||||
echo "============================================="
|
||||
echo "Completely different plugin name to avoid Emby cache issues"
|
||||
echo ""
|
||||
|
||||
# Clean previous builds
|
||||
rm -rf bin obj
|
||||
|
||||
echo "Building clean version with new name..."
|
||||
|
||||
# Build clean version
|
||||
dotnet build NFOGuard.Emby.Plugin.csproj -c Release -f net48
|
||||
|
||||
if [ $? -eq 0 ]; then
|
||||
# Create version directory
|
||||
mkdir -p ../releases/v1.0.4-clean
|
||||
cp bin/Release/net48/NFOGuard.Emby.Plugin.dll ../releases/v1.0.4-clean/DateSync.Emby.Plugin.dll
|
||||
|
||||
# Copy to main plugin-release directory with new name
|
||||
cp bin/Release/net48/NFOGuard.Emby.Plugin.dll ../plugin-release/DateSync.Emby.Plugin.dll
|
||||
|
||||
echo "✅ Clean version built successfully"
|
||||
echo ""
|
||||
echo "🧹 DateSync v1.0.4-clean ready!"
|
||||
echo ""
|
||||
echo "IMPORTANT CHANGES:"
|
||||
echo "• Plugin name: NFOGuard → DateSync"
|
||||
echo "• Config file: nfoguard.xml → datesync.xml"
|
||||
echo "• Task name: NFOGuard Date Sync → DateSync Task"
|
||||
echo "• DLL name: DateSync.Emby.Plugin.dll"
|
||||
echo "• New GUID: Completely different from NFOGuard"
|
||||
echo ""
|
||||
echo "This should avoid ALL cached references!"
|
||||
echo ""
|
||||
echo "Usage:"
|
||||
echo "1. Stop Emby Server"
|
||||
echo "2. DELETE old NFOGuard.Emby.Plugin.dll completely"
|
||||
echo "3. DELETE /config/data/nfoguard.xml if exists"
|
||||
echo "4. Clear browser cache completely"
|
||||
echo "5. Install DateSync.Emby.Plugin.dll"
|
||||
echo "6. Start Emby Server"
|
||||
echo "7. Look for 'DateSync Task' in scheduled tasks"
|
||||
echo ""
|
||||
echo "Files ready:"
|
||||
echo "• releases/v1.0.4-clean/DateSync.Emby.Plugin.dll"
|
||||
echo "• plugin-release/DateSync.Emby.Plugin.dll (for deployment)"
|
||||
else
|
||||
echo "❌ Build failed"
|
||||
exit 1
|
||||
fi
|
||||
Executable
+46
@@ -0,0 +1,46 @@
|
||||
#!/bin/bash
|
||||
|
||||
echo "Building NFOGuard Emby Plugin - Debug Version"
|
||||
echo "============================================="
|
||||
echo "Clean diagnostic version with debug enabled by default"
|
||||
echo ""
|
||||
|
||||
# Clean previous builds
|
||||
rm -rf bin obj
|
||||
|
||||
echo "Building debug version..."
|
||||
|
||||
# Build debug version
|
||||
dotnet build NFOGuard.Emby.Plugin.csproj -c Release -f net48
|
||||
|
||||
if [ $? -eq 0 ]; then
|
||||
# Create version directory
|
||||
mkdir -p ../releases/v1.0.2-debug
|
||||
cp bin/Release/net48/NFOGuard.Emby.Plugin.dll ../releases/v1.0.2-debug/
|
||||
|
||||
# Copy to main plugin-release directory for easy deployment
|
||||
cp bin/Release/net48/NFOGuard.Emby.Plugin.dll ../plugin-release/
|
||||
|
||||
echo "✅ Debug version built successfully"
|
||||
echo ""
|
||||
echo "🔍 NFOGuard v1.0.2-debug ready!"
|
||||
echo ""
|
||||
echo "Features:"
|
||||
echo "• Debug logging ENABLED by default"
|
||||
echo "• No configuration page (no crashes)"
|
||||
echo "• Enhanced episode/movie date diagnostics"
|
||||
echo "• Shows PremiereDate vs DateCreated for every item"
|
||||
echo "• Explains why episodes are skipped"
|
||||
echo ""
|
||||
echo "Usage:"
|
||||
echo "1. Replace plugin DLL and restart Emby"
|
||||
echo "2. Run 'NFOGuard Date Sync' scheduled task"
|
||||
echo "3. Check Emby logs for detailed output"
|
||||
echo ""
|
||||
echo "Files ready:"
|
||||
echo "• releases/v1.0.2-debug/NFOGuard.Emby.Plugin.dll"
|
||||
echo "• plugin-release/NFOGuard.Emby.Plugin.dll (for deployment)"
|
||||
else
|
||||
echo "❌ Build failed"
|
||||
exit 1
|
||||
fi
|
||||
+46
@@ -0,0 +1,46 @@
|
||||
#!/bin/bash
|
||||
|
||||
echo "Building NFOGuard Emby Plugin - Safe Diagnostic Version"
|
||||
echo "======================================================="
|
||||
echo "Enhanced logging WITHOUT configuration page (to avoid crashes)"
|
||||
echo ""
|
||||
|
||||
# Disable configuration page temporarily
|
||||
mv PluginConfigurationPage.cs PluginConfigurationPage.cs.disabled 2>/dev/null || true
|
||||
|
||||
# Comment out the config page in project file
|
||||
sed -i 's|<EmbeddedResource Include="Configuration\\configPage.html" />|<!-- <EmbeddedResource Include="Configuration\\configPage.html" /> -->|' NFOGuard.Emby.Plugin.csproj
|
||||
|
||||
# Clean previous builds
|
||||
rm -rf bin obj
|
||||
|
||||
echo "Building safe diagnostic version (no config page)..."
|
||||
|
||||
# Build diagnostic version
|
||||
dotnet build NFOGuard.Emby.Plugin.csproj -c Release -f net48
|
||||
|
||||
if [ $? -eq 0 ]; then
|
||||
# Create version directory
|
||||
mkdir -p ../releases/v1.0.1-diagnostic-safe
|
||||
cp bin/Release/net48/NFOGuard.Emby.Plugin.dll ../releases/v1.0.1-diagnostic-safe/
|
||||
|
||||
echo "✅ Safe diagnostic version built successfully"
|
||||
echo ""
|
||||
echo "🔍 NFOGuard v1.0.1-diagnostic-safe ready!"
|
||||
echo ""
|
||||
echo "This version includes:"
|
||||
echo "• Enhanced diagnostic logging"
|
||||
echo "• NO configuration page (avoids crashes)"
|
||||
echo "• LogVerbose is ENABLED by default"
|
||||
echo "• All other settings use defaults"
|
||||
echo ""
|
||||
echo "Safe to use without risk of configuration crashes!"
|
||||
echo ""
|
||||
echo "File ready: releases/v1.0.1-diagnostic-safe/NFOGuard.Emby.Plugin.dll"
|
||||
else
|
||||
echo "❌ Build failed"
|
||||
fi
|
||||
|
||||
# Restore configuration page files
|
||||
mv PluginConfigurationPage.cs.disabled PluginConfigurationPage.cs 2>/dev/null || true
|
||||
sed -i 's|<!-- <EmbeddedResource Include="Configuration\\configPage.html" /> -->|<EmbeddedResource Include="Configuration\\configPage.html" />|' NFOGuard.Emby.Plugin.csproj
|
||||
Executable
+43
@@ -0,0 +1,43 @@
|
||||
#!/bin/bash
|
||||
|
||||
echo "Building NFOGuard Emby Plugin - Diagnostic Version"
|
||||
echo "==================================================="
|
||||
echo "Enhanced logging to diagnose NFO date reading issue"
|
||||
echo ""
|
||||
|
||||
# Clean previous builds
|
||||
rm -rf bin obj
|
||||
|
||||
echo "Building diagnostic version..."
|
||||
|
||||
# Build diagnostic version
|
||||
dotnet build NFOGuard.Emby.Plugin.csproj -c Release -f net48
|
||||
|
||||
if [ $? -eq 0 ]; then
|
||||
# Create version directory
|
||||
mkdir -p ../releases/v1.0.1-diagnostic
|
||||
cp bin/Release/net48/NFOGuard.Emby.Plugin.dll ../releases/v1.0.1-diagnostic/
|
||||
|
||||
# Copy to main plugin-release directory
|
||||
cp bin/Release/net48/NFOGuard.Emby.Plugin.dll ../plugin-release/
|
||||
|
||||
echo "✅ Diagnostic version built successfully"
|
||||
echo ""
|
||||
echo "🔍 NFOGuard v1.0.1-diagnostic ready!"
|
||||
echo ""
|
||||
echo "This version includes enhanced logging to show:"
|
||||
echo "• PremiereDate values for every episode/movie"
|
||||
echo "• DateCreated values for comparison"
|
||||
echo "• Reason why episodes are skipped (no PremiereDate vs already synced)"
|
||||
echo ""
|
||||
echo "To use:"
|
||||
echo "1. Replace your current plugin DLL"
|
||||
echo "2. Enable 'LogVerbose' in plugin settings"
|
||||
echo "3. Run the scheduled task"
|
||||
echo "4. Check Emby logs for detailed date information"
|
||||
echo ""
|
||||
echo "File ready: releases/v1.0.1-diagnostic/NFOGuard.Emby.Plugin.dll"
|
||||
else
|
||||
echo "❌ Build failed"
|
||||
exit 1
|
||||
fi
|
||||
Executable
+51
@@ -0,0 +1,51 @@
|
||||
#!/bin/bash
|
||||
|
||||
echo "Building NFOGuard Emby Plugin - Minimal Version"
|
||||
echo "==============================================="
|
||||
echo "No web components, no thumbnails, no config pages - just core functionality"
|
||||
echo ""
|
||||
|
||||
# Clean previous builds
|
||||
rm -rf bin obj
|
||||
|
||||
echo "Building minimal version..."
|
||||
|
||||
# Build minimal version
|
||||
dotnet build NFOGuard.Emby.Plugin.csproj -c Release -f net48
|
||||
|
||||
if [ $? -eq 0 ]; then
|
||||
# Create version directory
|
||||
mkdir -p ../releases/v1.0.3-minimal
|
||||
cp bin/Release/net48/NFOGuard.Emby.Plugin.dll ../releases/v1.0.3-minimal/
|
||||
|
||||
# Copy to main plugin-release directory for easy deployment
|
||||
cp bin/Release/net48/NFOGuard.Emby.Plugin.dll ../plugin-release/
|
||||
|
||||
echo "✅ Minimal version built successfully"
|
||||
echo ""
|
||||
echo "🔍 NFOGuard v1.0.3-minimal ready!"
|
||||
echo ""
|
||||
echo "Features:"
|
||||
echo "• Debug logging ENABLED by default"
|
||||
echo "• NO web components (no UI loading issues)"
|
||||
echo "• NO configuration page"
|
||||
echo "• NO thumbnails or embedded resources"
|
||||
echo "• Core functionality only"
|
||||
echo "• New GUID to clear Emby cache completely"
|
||||
echo ""
|
||||
echo "This version should NOT cause web UI loading issues!"
|
||||
echo ""
|
||||
echo "Usage:"
|
||||
echo "1. Remove old plugin DLL completely"
|
||||
echo "2. Clear browser cache"
|
||||
echo "3. Install new minimal DLL and restart Emby"
|
||||
echo "4. Web UI should load normally"
|
||||
echo "5. Run 'NFOGuard Date Sync' scheduled task"
|
||||
echo ""
|
||||
echo "Files ready:"
|
||||
echo "• releases/v1.0.3-minimal/NFOGuard.Emby.Plugin.dll"
|
||||
echo "• plugin-release/NFOGuard.Emby.Plugin.dll (for deployment)"
|
||||
else
|
||||
echo "❌ Build failed"
|
||||
exit 1
|
||||
fi
|
||||
Executable
+43
@@ -0,0 +1,43 @@
|
||||
#!/bin/bash
|
||||
|
||||
echo "Building NFOGuard Emby Plugin - Unified Version"
|
||||
echo "==============================================="
|
||||
echo "Single DLL with license key activation system"
|
||||
echo ""
|
||||
|
||||
# Clean previous builds
|
||||
rm -rf bin obj
|
||||
|
||||
echo "Building unified version..."
|
||||
|
||||
# Build unified version without any defines
|
||||
dotnet build NFOGuard.Emby.Plugin.csproj -c Release -f net48
|
||||
|
||||
if [ $? -eq 0 ]; then
|
||||
# Create version directory
|
||||
mkdir -p ../releases/v1.3.0-unified
|
||||
cp bin/Release/net48/NFOGuard.Emby.Plugin.dll ../releases/v1.3.0-unified/
|
||||
|
||||
# Copy to main plugin-release directory
|
||||
cp bin/Release/net48/NFOGuard.Emby.Plugin.dll ../plugin-release/
|
||||
|
||||
echo "✅ Unified version built successfully"
|
||||
echo ""
|
||||
echo "🎉 NFOGuard v1.3.0-unified ready!"
|
||||
echo ""
|
||||
echo "Features:"
|
||||
echo "🆓 Free Tier: 500 items/month, scheduled processing only"
|
||||
echo "🔑 License Activation: Unlimited processing with valid license key"
|
||||
echo "💳 Payment Integration: Supports PayPal/Patreon transaction IDs"
|
||||
echo "📊 Usage Tracking: Monthly quota with automatic reset"
|
||||
echo ""
|
||||
echo "License Key Formats Supported:"
|
||||
echo "- NFOG-XXXX-XXXX-XXXX (generated keys)"
|
||||
echo "- PAYPAL-[transaction-id] (PayPal payments)"
|
||||
echo "- PATREON-[transaction-id] (Patreon subscriptions)"
|
||||
echo ""
|
||||
echo "File ready: releases/v1.3.0-unified/NFOGuard.Emby.Plugin.dll"
|
||||
else
|
||||
echo "❌ Build failed"
|
||||
exit 1
|
||||
fi
|
||||
Executable
+60
@@ -0,0 +1,60 @@
|
||||
#!/bin/bash
|
||||
|
||||
echo "Building NFOGuard Emby Plugin - All Versions"
|
||||
echo "============================================="
|
||||
|
||||
# Clean previous builds
|
||||
rm -rf bin obj releases-temp
|
||||
|
||||
# Create temporary releases directory
|
||||
mkdir -p releases-temp
|
||||
|
||||
echo ""
|
||||
echo "1. Building Free Tier Version (v1.1.0-free-tier)"
|
||||
echo "================================================="
|
||||
|
||||
# Build free tier version with FREE_TIER define
|
||||
dotnet build NFOGuard.Emby.Plugin.csproj -c Release -f net48 -p:DefineConstants="FREE_TIER"
|
||||
|
||||
if [ $? -eq 0 ]; then
|
||||
mkdir -p ../releases/v1.1.0-free-tier
|
||||
cp bin/Release/net48/NFOGuard.Emby.Plugin.dll ../releases/v1.1.0-free-tier/
|
||||
echo "✅ Free tier version built successfully"
|
||||
else
|
||||
echo "❌ Free tier build failed"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo "2. Building Full Version (v1.2.0-production)"
|
||||
echo "============================================"
|
||||
|
||||
# Clean for full version build
|
||||
rm -rf bin obj
|
||||
|
||||
# Build full version without FREE_TIER define
|
||||
dotnet build NFOGuard.Emby.Plugin.csproj -c Release -f net48
|
||||
|
||||
if [ $? -eq 0 ]; then
|
||||
mkdir -p ../releases/v1.2.0-production
|
||||
cp bin/Release/net48/NFOGuard.Emby.Plugin.dll ../releases/v1.2.0-production/
|
||||
echo "✅ Production version built successfully"
|
||||
else
|
||||
echo "❌ Production build failed"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo "3. Updating plugin-release with latest production version"
|
||||
echo "========================================================"
|
||||
cp bin/Release/net48/NFOGuard.Emby.Plugin.dll ../plugin-release/
|
||||
|
||||
echo ""
|
||||
echo "🎉 All versions built successfully!"
|
||||
echo ""
|
||||
echo "Available versions:"
|
||||
echo "📦 v1.0.0-working : Original working version (unlimited)"
|
||||
echo "🆓 v1.1.0-free-tier : Free tier (500 items/month, no real-time)"
|
||||
echo "💎 v1.2.0-production : Full version (unlimited, all features)"
|
||||
echo ""
|
||||
echo "Files ready in releases/ directory"
|
||||
@@ -52,6 +52,14 @@
|
||||
"System.Memory": {
|
||||
"target": "Package",
|
||||
"version": "[4.5.5, )"
|
||||
},
|
||||
"System.Net.Http": {
|
||||
"target": "Package",
|
||||
"version": "[4.3.4, )"
|
||||
},
|
||||
"System.Text.Json": {
|
||||
"target": "Package",
|
||||
"version": "[6.0.0, )"
|
||||
}
|
||||
},
|
||||
"runtimeIdentifierGraphPath": "/usr/share/dotnet/sdk/8.0.414/RuntimeIdentifierGraph.json"
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8" standalone="no"?>
|
||||
<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<ImportGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
|
||||
<Import Project="$(NuGetPackageRoot)system.text.json/6.0.0/build/System.Text.Json.targets" Condition="Exists('$(NuGetPackageRoot)system.text.json/6.0.0/build/System.Text.Json.targets')" />
|
||||
<Import Project="$(NuGetPackageRoot)microsoft.netframework.referenceassemblies.net48/1.0.3/build/Microsoft.NETFramework.ReferenceAssemblies.net48.targets" Condition="Exists('$(NuGetPackageRoot)microsoft.netframework.referenceassemblies.net48/1.0.3/build/Microsoft.NETFramework.ReferenceAssemblies.net48.targets')" />
|
||||
</ImportGroup>
|
||||
</Project>
|
||||
Binary file not shown.
BIN
Binary file not shown.
+1
-1
@@ -1 +1 @@
|
||||
bc9346eb5351b08e69d51772894aaede4c86d42a30ba9df1c921e5156198813e
|
||||
ac9b1d05d1517a7c47b07fdf8111e5c0cb41b1f211b4f061f560a7f28e99067e
|
||||
|
||||
+5
@@ -1,9 +1,14 @@
|
||||
/home/jskala/github/NFOguard/NFOGuard.Emby.Plugin/bin/Release/net48/NFOGuard.Emby.Plugin.dll
|
||||
/home/jskala/github/NFOguard/NFOGuard.Emby.Plugin/bin/Release/net48/NFOGuard.Emby.Plugin.pdb
|
||||
/home/jskala/github/NFOguard/NFOGuard.Emby.Plugin/bin/Release/net48/Microsoft.Bcl.AsyncInterfaces.dll
|
||||
/home/jskala/github/NFOguard/NFOGuard.Emby.Plugin/bin/Release/net48/System.Buffers.dll
|
||||
/home/jskala/github/NFOguard/NFOGuard.Emby.Plugin/bin/Release/net48/System.Memory.dll
|
||||
/home/jskala/github/NFOguard/NFOGuard.Emby.Plugin/bin/Release/net48/System.Numerics.Vectors.dll
|
||||
/home/jskala/github/NFOguard/NFOGuard.Emby.Plugin/bin/Release/net48/System.Runtime.CompilerServices.Unsafe.dll
|
||||
/home/jskala/github/NFOguard/NFOGuard.Emby.Plugin/bin/Release/net48/System.Text.Encodings.Web.dll
|
||||
/home/jskala/github/NFOguard/NFOGuard.Emby.Plugin/bin/Release/net48/System.Text.Json.dll
|
||||
/home/jskala/github/NFOguard/NFOGuard.Emby.Plugin/bin/Release/net48/System.Threading.Tasks.Extensions.dll
|
||||
/home/jskala/github/NFOguard/NFOGuard.Emby.Plugin/bin/Release/net48/System.ValueTuple.dll
|
||||
/home/jskala/github/NFOguard/NFOGuard.Emby.Plugin/obj/Release/net48/NFOGuard.Emby.Plugin.csproj.AssemblyReference.cache
|
||||
/home/jskala/github/NFOguard/NFOGuard.Emby.Plugin/obj/Release/net48/NFOGuard.Emby.Plugin.GeneratedMSBuildEditorConfig.editorconfig
|
||||
/home/jskala/github/NFOguard/NFOGuard.Emby.Plugin/obj/Release/net48/NFOGuard.Emby.Plugin.csproj.CoreCompileInputs.cache
|
||||
|
||||
Binary file not shown.
Binary file not shown.
@@ -2,6 +2,22 @@
|
||||
"version": 3,
|
||||
"targets": {
|
||||
".NETFramework,Version=v4.8": {
|
||||
"Microsoft.Bcl.AsyncInterfaces/6.0.0": {
|
||||
"type": "package",
|
||||
"dependencies": {
|
||||
"System.Threading.Tasks.Extensions": "4.5.4"
|
||||
},
|
||||
"compile": {
|
||||
"lib/net461/Microsoft.Bcl.AsyncInterfaces.dll": {
|
||||
"related": ".xml"
|
||||
}
|
||||
},
|
||||
"runtime": {
|
||||
"lib/net461/Microsoft.Bcl.AsyncInterfaces.dll": {
|
||||
"related": ".xml"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Microsoft.NETFramework.ReferenceAssemblies/1.0.3": {
|
||||
"type": "package",
|
||||
"dependencies": {
|
||||
@@ -30,6 +46,19 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"System.IO/4.3.0": {
|
||||
"type": "package",
|
||||
"frameworkAssemblies": [
|
||||
"System",
|
||||
"mscorlib"
|
||||
],
|
||||
"compile": {
|
||||
"ref/net462/System.IO.dll": {}
|
||||
},
|
||||
"runtime": {
|
||||
"lib/net462/System.IO.dll": {}
|
||||
}
|
||||
},
|
||||
"System.Memory/4.5.5": {
|
||||
"type": "package",
|
||||
"dependencies": {
|
||||
@@ -52,6 +81,33 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"System.Net.Http/4.3.4": {
|
||||
"type": "package",
|
||||
"dependencies": {
|
||||
"System.Security.Cryptography.X509Certificates": "4.3.0"
|
||||
},
|
||||
"frameworkAssemblies": [
|
||||
"System",
|
||||
"System.Core",
|
||||
"mscorlib"
|
||||
],
|
||||
"compile": {
|
||||
"ref/net46/System.Net.Http.dll": {}
|
||||
},
|
||||
"runtime": {
|
||||
"lib/net46/System.Net.Http.dll": {}
|
||||
},
|
||||
"runtimeTargets": {
|
||||
"runtimes/unix/lib/netstandard1.6/System.Net.Http.dll": {
|
||||
"assetType": "runtime",
|
||||
"rid": "unix"
|
||||
},
|
||||
"runtimes/win/lib/net46/System.Net.Http.dll": {
|
||||
"assetType": "runtime",
|
||||
"rid": "win"
|
||||
}
|
||||
}
|
||||
},
|
||||
"System.Numerics.Vectors/4.5.0": {
|
||||
"type": "package",
|
||||
"frameworkAssemblies": [
|
||||
@@ -69,13 +125,28 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"System.Runtime.CompilerServices.Unsafe/4.5.3": {
|
||||
"System.Runtime/4.3.0": {
|
||||
"type": "package",
|
||||
"frameworkAssemblies": [
|
||||
"System",
|
||||
"System.ComponentModel.Composition",
|
||||
"System.Core",
|
||||
"mscorlib"
|
||||
],
|
||||
"compile": {
|
||||
"ref/net462/System.Runtime.dll": {}
|
||||
},
|
||||
"runtime": {
|
||||
"lib/net462/System.Runtime.dll": {}
|
||||
}
|
||||
},
|
||||
"System.Runtime.CompilerServices.Unsafe/6.0.0": {
|
||||
"type": "package",
|
||||
"frameworkAssemblies": [
|
||||
"mscorlib"
|
||||
],
|
||||
"compile": {
|
||||
"ref/net461/System.Runtime.CompilerServices.Unsafe.dll": {
|
||||
"lib/net461/System.Runtime.CompilerServices.Unsafe.dll": {
|
||||
"related": ".xml"
|
||||
}
|
||||
},
|
||||
@@ -84,10 +155,204 @@
|
||||
"related": ".xml"
|
||||
}
|
||||
}
|
||||
},
|
||||
"System.Security.Cryptography.Algorithms/4.3.0": {
|
||||
"type": "package",
|
||||
"dependencies": {
|
||||
"System.IO": "4.3.0",
|
||||
"System.Runtime": "4.3.0",
|
||||
"System.Security.Cryptography.Encoding": "4.3.0",
|
||||
"System.Security.Cryptography.Primitives": "4.3.0"
|
||||
},
|
||||
"frameworkAssemblies": [
|
||||
"System.Core",
|
||||
"mscorlib"
|
||||
],
|
||||
"compile": {
|
||||
"ref/net463/System.Security.Cryptography.Algorithms.dll": {}
|
||||
},
|
||||
"runtime": {
|
||||
"lib/net463/System.Security.Cryptography.Algorithms.dll": {}
|
||||
},
|
||||
"runtimeTargets": {
|
||||
"runtimes/osx/lib/netstandard1.6/System.Security.Cryptography.Algorithms.dll": {
|
||||
"assetType": "runtime",
|
||||
"rid": "osx"
|
||||
},
|
||||
"runtimes/unix/lib/netstandard1.6/System.Security.Cryptography.Algorithms.dll": {
|
||||
"assetType": "runtime",
|
||||
"rid": "unix"
|
||||
},
|
||||
"runtimes/win/lib/net463/System.Security.Cryptography.Algorithms.dll": {
|
||||
"assetType": "runtime",
|
||||
"rid": "win"
|
||||
}
|
||||
}
|
||||
},
|
||||
"System.Security.Cryptography.Encoding/4.3.0": {
|
||||
"type": "package",
|
||||
"frameworkAssemblies": [
|
||||
"System",
|
||||
"mscorlib"
|
||||
],
|
||||
"compile": {
|
||||
"ref/net46/System.Security.Cryptography.Encoding.dll": {}
|
||||
},
|
||||
"runtime": {
|
||||
"lib/net46/System.Security.Cryptography.Encoding.dll": {}
|
||||
},
|
||||
"runtimeTargets": {
|
||||
"runtimes/unix/lib/netstandard1.3/System.Security.Cryptography.Encoding.dll": {
|
||||
"assetType": "runtime",
|
||||
"rid": "unix"
|
||||
},
|
||||
"runtimes/win/lib/net46/System.Security.Cryptography.Encoding.dll": {
|
||||
"assetType": "runtime",
|
||||
"rid": "win"
|
||||
}
|
||||
}
|
||||
},
|
||||
"System.Security.Cryptography.Primitives/4.3.0": {
|
||||
"type": "package",
|
||||
"frameworkAssemblies": [
|
||||
"mscorlib"
|
||||
],
|
||||
"compile": {
|
||||
"ref/net46/System.Security.Cryptography.Primitives.dll": {}
|
||||
},
|
||||
"runtime": {
|
||||
"lib/net46/System.Security.Cryptography.Primitives.dll": {}
|
||||
}
|
||||
},
|
||||
"System.Security.Cryptography.X509Certificates/4.3.0": {
|
||||
"type": "package",
|
||||
"dependencies": {
|
||||
"System.Security.Cryptography.Algorithms": "4.3.0",
|
||||
"System.Security.Cryptography.Encoding": "4.3.0"
|
||||
},
|
||||
"frameworkAssemblies": [
|
||||
"System",
|
||||
"System.Core",
|
||||
"mscorlib"
|
||||
],
|
||||
"compile": {
|
||||
"ref/net461/System.Security.Cryptography.X509Certificates.dll": {}
|
||||
},
|
||||
"runtime": {
|
||||
"lib/net461/System.Security.Cryptography.X509Certificates.dll": {}
|
||||
},
|
||||
"runtimeTargets": {
|
||||
"runtimes/unix/lib/netstandard1.6/System.Security.Cryptography.X509Certificates.dll": {
|
||||
"assetType": "runtime",
|
||||
"rid": "unix"
|
||||
},
|
||||
"runtimes/win/lib/net461/System.Security.Cryptography.X509Certificates.dll": {
|
||||
"assetType": "runtime",
|
||||
"rid": "win"
|
||||
}
|
||||
}
|
||||
},
|
||||
"System.Text.Encodings.Web/6.0.0": {
|
||||
"type": "package",
|
||||
"dependencies": {
|
||||
"System.Buffers": "4.5.1",
|
||||
"System.Memory": "4.5.4",
|
||||
"System.Runtime.CompilerServices.Unsafe": "6.0.0"
|
||||
},
|
||||
"compile": {
|
||||
"lib/net461/System.Text.Encodings.Web.dll": {
|
||||
"related": ".xml"
|
||||
}
|
||||
},
|
||||
"runtime": {
|
||||
"lib/net461/System.Text.Encodings.Web.dll": {
|
||||
"related": ".xml"
|
||||
}
|
||||
}
|
||||
},
|
||||
"System.Text.Json/6.0.0": {
|
||||
"type": "package",
|
||||
"dependencies": {
|
||||
"Microsoft.Bcl.AsyncInterfaces": "6.0.0",
|
||||
"System.Buffers": "4.5.1",
|
||||
"System.Memory": "4.5.4",
|
||||
"System.Numerics.Vectors": "4.5.0",
|
||||
"System.Runtime.CompilerServices.Unsafe": "6.0.0",
|
||||
"System.Text.Encodings.Web": "6.0.0",
|
||||
"System.Threading.Tasks.Extensions": "4.5.4",
|
||||
"System.ValueTuple": "4.5.0"
|
||||
},
|
||||
"compile": {
|
||||
"lib/net461/System.Text.Json.dll": {
|
||||
"related": ".xml"
|
||||
}
|
||||
},
|
||||
"runtime": {
|
||||
"lib/net461/System.Text.Json.dll": {
|
||||
"related": ".xml"
|
||||
}
|
||||
},
|
||||
"build": {
|
||||
"build/System.Text.Json.targets": {}
|
||||
}
|
||||
},
|
||||
"System.Threading.Tasks.Extensions/4.5.4": {
|
||||
"type": "package",
|
||||
"dependencies": {
|
||||
"System.Runtime.CompilerServices.Unsafe": "4.5.3"
|
||||
},
|
||||
"frameworkAssemblies": [
|
||||
"mscorlib"
|
||||
],
|
||||
"compile": {
|
||||
"lib/net461/System.Threading.Tasks.Extensions.dll": {
|
||||
"related": ".xml"
|
||||
}
|
||||
},
|
||||
"runtime": {
|
||||
"lib/net461/System.Threading.Tasks.Extensions.dll": {
|
||||
"related": ".xml"
|
||||
}
|
||||
}
|
||||
},
|
||||
"System.ValueTuple/4.5.0": {
|
||||
"type": "package",
|
||||
"frameworkAssemblies": [
|
||||
"mscorlib"
|
||||
],
|
||||
"compile": {
|
||||
"ref/net47/System.ValueTuple.dll": {}
|
||||
},
|
||||
"runtime": {
|
||||
"lib/net47/System.ValueTuple.dll": {
|
||||
"related": ".xml"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"libraries": {
|
||||
"Microsoft.Bcl.AsyncInterfaces/6.0.0": {
|
||||
"sha512": "UcSjPsst+DfAdJGVDsu346FX0ci0ah+lw3WRtn18NUwEqRt70HaOQ7lI72vy3+1LxtqI3T5GWwV39rQSrCzAeg==",
|
||||
"type": "package",
|
||||
"path": "microsoft.bcl.asyncinterfaces/6.0.0",
|
||||
"files": [
|
||||
".nupkg.metadata",
|
||||
".signature.p7s",
|
||||
"Icon.png",
|
||||
"LICENSE.TXT",
|
||||
"THIRD-PARTY-NOTICES.TXT",
|
||||
"lib/net461/Microsoft.Bcl.AsyncInterfaces.dll",
|
||||
"lib/net461/Microsoft.Bcl.AsyncInterfaces.xml",
|
||||
"lib/netstandard2.0/Microsoft.Bcl.AsyncInterfaces.dll",
|
||||
"lib/netstandard2.0/Microsoft.Bcl.AsyncInterfaces.xml",
|
||||
"lib/netstandard2.1/Microsoft.Bcl.AsyncInterfaces.dll",
|
||||
"lib/netstandard2.1/Microsoft.Bcl.AsyncInterfaces.xml",
|
||||
"microsoft.bcl.asyncinterfaces.6.0.0.nupkg.sha512",
|
||||
"microsoft.bcl.asyncinterfaces.nuspec",
|
||||
"useSharedDesignerContext.txt"
|
||||
]
|
||||
},
|
||||
"Microsoft.NETFramework.ReferenceAssemblies/1.0.3": {
|
||||
"sha512": "vUc9Npcs14QsyOD01tnv/m8sQUnGTGOw1BCmKcv77LBJY7OxhJ+zJF7UD/sCL3lYNFuqmQEVlkfS4Quif6FyYg==",
|
||||
"type": "package",
|
||||
@@ -510,6 +775,87 @@
|
||||
"version.txt"
|
||||
]
|
||||
},
|
||||
"System.IO/4.3.0": {
|
||||
"sha512": "3qjaHvxQPDpSOYICjUoTsmoq5u6QJAFRUITgeT/4gqkF1bajbSmb1kwSxEA8AHlofqgcKJcM8udgieRNhaJ5Cg==",
|
||||
"type": "package",
|
||||
"path": "system.io/4.3.0",
|
||||
"files": [
|
||||
".nupkg.metadata",
|
||||
".signature.p7s",
|
||||
"ThirdPartyNotices.txt",
|
||||
"dotnet_library_license.txt",
|
||||
"lib/MonoAndroid10/_._",
|
||||
"lib/MonoTouch10/_._",
|
||||
"lib/net45/_._",
|
||||
"lib/net462/System.IO.dll",
|
||||
"lib/portable-net45+win8+wp8+wpa81/_._",
|
||||
"lib/win8/_._",
|
||||
"lib/wp80/_._",
|
||||
"lib/wpa81/_._",
|
||||
"lib/xamarinios10/_._",
|
||||
"lib/xamarinmac20/_._",
|
||||
"lib/xamarintvos10/_._",
|
||||
"lib/xamarinwatchos10/_._",
|
||||
"ref/MonoAndroid10/_._",
|
||||
"ref/MonoTouch10/_._",
|
||||
"ref/net45/_._",
|
||||
"ref/net462/System.IO.dll",
|
||||
"ref/netcore50/System.IO.dll",
|
||||
"ref/netcore50/System.IO.xml",
|
||||
"ref/netcore50/de/System.IO.xml",
|
||||
"ref/netcore50/es/System.IO.xml",
|
||||
"ref/netcore50/fr/System.IO.xml",
|
||||
"ref/netcore50/it/System.IO.xml",
|
||||
"ref/netcore50/ja/System.IO.xml",
|
||||
"ref/netcore50/ko/System.IO.xml",
|
||||
"ref/netcore50/ru/System.IO.xml",
|
||||
"ref/netcore50/zh-hans/System.IO.xml",
|
||||
"ref/netcore50/zh-hant/System.IO.xml",
|
||||
"ref/netstandard1.0/System.IO.dll",
|
||||
"ref/netstandard1.0/System.IO.xml",
|
||||
"ref/netstandard1.0/de/System.IO.xml",
|
||||
"ref/netstandard1.0/es/System.IO.xml",
|
||||
"ref/netstandard1.0/fr/System.IO.xml",
|
||||
"ref/netstandard1.0/it/System.IO.xml",
|
||||
"ref/netstandard1.0/ja/System.IO.xml",
|
||||
"ref/netstandard1.0/ko/System.IO.xml",
|
||||
"ref/netstandard1.0/ru/System.IO.xml",
|
||||
"ref/netstandard1.0/zh-hans/System.IO.xml",
|
||||
"ref/netstandard1.0/zh-hant/System.IO.xml",
|
||||
"ref/netstandard1.3/System.IO.dll",
|
||||
"ref/netstandard1.3/System.IO.xml",
|
||||
"ref/netstandard1.3/de/System.IO.xml",
|
||||
"ref/netstandard1.3/es/System.IO.xml",
|
||||
"ref/netstandard1.3/fr/System.IO.xml",
|
||||
"ref/netstandard1.3/it/System.IO.xml",
|
||||
"ref/netstandard1.3/ja/System.IO.xml",
|
||||
"ref/netstandard1.3/ko/System.IO.xml",
|
||||
"ref/netstandard1.3/ru/System.IO.xml",
|
||||
"ref/netstandard1.3/zh-hans/System.IO.xml",
|
||||
"ref/netstandard1.3/zh-hant/System.IO.xml",
|
||||
"ref/netstandard1.5/System.IO.dll",
|
||||
"ref/netstandard1.5/System.IO.xml",
|
||||
"ref/netstandard1.5/de/System.IO.xml",
|
||||
"ref/netstandard1.5/es/System.IO.xml",
|
||||
"ref/netstandard1.5/fr/System.IO.xml",
|
||||
"ref/netstandard1.5/it/System.IO.xml",
|
||||
"ref/netstandard1.5/ja/System.IO.xml",
|
||||
"ref/netstandard1.5/ko/System.IO.xml",
|
||||
"ref/netstandard1.5/ru/System.IO.xml",
|
||||
"ref/netstandard1.5/zh-hans/System.IO.xml",
|
||||
"ref/netstandard1.5/zh-hant/System.IO.xml",
|
||||
"ref/portable-net45+win8+wp8+wpa81/_._",
|
||||
"ref/win8/_._",
|
||||
"ref/wp80/_._",
|
||||
"ref/wpa81/_._",
|
||||
"ref/xamarinios10/_._",
|
||||
"ref/xamarinmac20/_._",
|
||||
"ref/xamarintvos10/_._",
|
||||
"ref/xamarinwatchos10/_._",
|
||||
"system.io.4.3.0.nupkg.sha512",
|
||||
"system.io.nuspec"
|
||||
]
|
||||
},
|
||||
"System.Memory/4.5.5": {
|
||||
"sha512": "XIWiDvKPXaTveaB7HVganDlOCRoj03l+jrwNvcge/t8vhGYKvqV+dMv6G4SAX2NoNmN0wZfVPTAlFwZcZvVOUw==",
|
||||
"type": "package",
|
||||
@@ -533,6 +879,48 @@
|
||||
"version.txt"
|
||||
]
|
||||
},
|
||||
"System.Net.Http/4.3.4": {
|
||||
"sha512": "aOa2d51SEbmM+H+Csw7yJOuNZoHkrP2XnAurye5HWYgGVVU54YZDvsLUYRv6h18X3sPnjNCANmN7ZhIPiqMcjA==",
|
||||
"type": "package",
|
||||
"path": "system.net.http/4.3.4",
|
||||
"files": [
|
||||
".nupkg.metadata",
|
||||
".signature.p7s",
|
||||
"ThirdPartyNotices.txt",
|
||||
"dotnet_library_license.txt",
|
||||
"lib/Xamarinmac20/_._",
|
||||
"lib/monoandroid10/_._",
|
||||
"lib/monotouch10/_._",
|
||||
"lib/net45/_._",
|
||||
"lib/net46/System.Net.Http.dll",
|
||||
"lib/portable-net45+win8+wpa81/_._",
|
||||
"lib/win8/_._",
|
||||
"lib/wpa81/_._",
|
||||
"lib/xamarinios10/_._",
|
||||
"lib/xamarintvos10/_._",
|
||||
"lib/xamarinwatchos10/_._",
|
||||
"ref/Xamarinmac20/_._",
|
||||
"ref/monoandroid10/_._",
|
||||
"ref/monotouch10/_._",
|
||||
"ref/net45/_._",
|
||||
"ref/net46/System.Net.Http.dll",
|
||||
"ref/netcore50/System.Net.Http.dll",
|
||||
"ref/netstandard1.1/System.Net.Http.dll",
|
||||
"ref/netstandard1.3/System.Net.Http.dll",
|
||||
"ref/portable-net45+win8+wpa81/_._",
|
||||
"ref/win8/_._",
|
||||
"ref/wpa81/_._",
|
||||
"ref/xamarinios10/_._",
|
||||
"ref/xamarintvos10/_._",
|
||||
"ref/xamarinwatchos10/_._",
|
||||
"runtimes/unix/lib/netstandard1.6/System.Net.Http.dll",
|
||||
"runtimes/win/lib/net46/System.Net.Http.dll",
|
||||
"runtimes/win/lib/netcore50/System.Net.Http.dll",
|
||||
"runtimes/win/lib/netstandard1.3/System.Net.Http.dll",
|
||||
"system.net.http.4.3.4.nupkg.sha512",
|
||||
"system.net.http.nuspec"
|
||||
]
|
||||
},
|
||||
"System.Numerics.Vectors/4.5.0": {
|
||||
"sha512": "QQTlPTl06J/iiDbJCiepZ4H//BVraReU4O4EoRw1U02H5TLUIT7xn3GnDp9AXPSlJUDyFs4uWjWafNX6WrAojQ==",
|
||||
"type": "package",
|
||||
@@ -580,31 +968,448 @@
|
||||
"version.txt"
|
||||
]
|
||||
},
|
||||
"System.Runtime.CompilerServices.Unsafe/4.5.3": {
|
||||
"sha512": "3TIsJhD1EiiT0w2CcDMN/iSSwnNnsrnbzeVHSKkaEgV85txMprmuO+Yq2AdSbeVGcg28pdNDTPK87tJhX7VFHw==",
|
||||
"System.Runtime/4.3.0": {
|
||||
"sha512": "JufQi0vPQ0xGnAczR13AUFglDyVYt4Kqnz1AZaiKZ5+GICq0/1MH/mO/eAJHt/mHW1zjKBJd7kV26SrxddAhiw==",
|
||||
"type": "package",
|
||||
"path": "system.runtime.compilerservices.unsafe/4.5.3",
|
||||
"path": "system.runtime/4.3.0",
|
||||
"files": [
|
||||
".nupkg.metadata",
|
||||
".signature.p7s",
|
||||
"ThirdPartyNotices.txt",
|
||||
"dotnet_library_license.txt",
|
||||
"lib/MonoAndroid10/_._",
|
||||
"lib/MonoTouch10/_._",
|
||||
"lib/net45/_._",
|
||||
"lib/net462/System.Runtime.dll",
|
||||
"lib/portable-net45+win8+wp80+wpa81/_._",
|
||||
"lib/win8/_._",
|
||||
"lib/wp80/_._",
|
||||
"lib/wpa81/_._",
|
||||
"lib/xamarinios10/_._",
|
||||
"lib/xamarinmac20/_._",
|
||||
"lib/xamarintvos10/_._",
|
||||
"lib/xamarinwatchos10/_._",
|
||||
"ref/MonoAndroid10/_._",
|
||||
"ref/MonoTouch10/_._",
|
||||
"ref/net45/_._",
|
||||
"ref/net462/System.Runtime.dll",
|
||||
"ref/netcore50/System.Runtime.dll",
|
||||
"ref/netcore50/System.Runtime.xml",
|
||||
"ref/netcore50/de/System.Runtime.xml",
|
||||
"ref/netcore50/es/System.Runtime.xml",
|
||||
"ref/netcore50/fr/System.Runtime.xml",
|
||||
"ref/netcore50/it/System.Runtime.xml",
|
||||
"ref/netcore50/ja/System.Runtime.xml",
|
||||
"ref/netcore50/ko/System.Runtime.xml",
|
||||
"ref/netcore50/ru/System.Runtime.xml",
|
||||
"ref/netcore50/zh-hans/System.Runtime.xml",
|
||||
"ref/netcore50/zh-hant/System.Runtime.xml",
|
||||
"ref/netstandard1.0/System.Runtime.dll",
|
||||
"ref/netstandard1.0/System.Runtime.xml",
|
||||
"ref/netstandard1.0/de/System.Runtime.xml",
|
||||
"ref/netstandard1.0/es/System.Runtime.xml",
|
||||
"ref/netstandard1.0/fr/System.Runtime.xml",
|
||||
"ref/netstandard1.0/it/System.Runtime.xml",
|
||||
"ref/netstandard1.0/ja/System.Runtime.xml",
|
||||
"ref/netstandard1.0/ko/System.Runtime.xml",
|
||||
"ref/netstandard1.0/ru/System.Runtime.xml",
|
||||
"ref/netstandard1.0/zh-hans/System.Runtime.xml",
|
||||
"ref/netstandard1.0/zh-hant/System.Runtime.xml",
|
||||
"ref/netstandard1.2/System.Runtime.dll",
|
||||
"ref/netstandard1.2/System.Runtime.xml",
|
||||
"ref/netstandard1.2/de/System.Runtime.xml",
|
||||
"ref/netstandard1.2/es/System.Runtime.xml",
|
||||
"ref/netstandard1.2/fr/System.Runtime.xml",
|
||||
"ref/netstandard1.2/it/System.Runtime.xml",
|
||||
"ref/netstandard1.2/ja/System.Runtime.xml",
|
||||
"ref/netstandard1.2/ko/System.Runtime.xml",
|
||||
"ref/netstandard1.2/ru/System.Runtime.xml",
|
||||
"ref/netstandard1.2/zh-hans/System.Runtime.xml",
|
||||
"ref/netstandard1.2/zh-hant/System.Runtime.xml",
|
||||
"ref/netstandard1.3/System.Runtime.dll",
|
||||
"ref/netstandard1.3/System.Runtime.xml",
|
||||
"ref/netstandard1.3/de/System.Runtime.xml",
|
||||
"ref/netstandard1.3/es/System.Runtime.xml",
|
||||
"ref/netstandard1.3/fr/System.Runtime.xml",
|
||||
"ref/netstandard1.3/it/System.Runtime.xml",
|
||||
"ref/netstandard1.3/ja/System.Runtime.xml",
|
||||
"ref/netstandard1.3/ko/System.Runtime.xml",
|
||||
"ref/netstandard1.3/ru/System.Runtime.xml",
|
||||
"ref/netstandard1.3/zh-hans/System.Runtime.xml",
|
||||
"ref/netstandard1.3/zh-hant/System.Runtime.xml",
|
||||
"ref/netstandard1.5/System.Runtime.dll",
|
||||
"ref/netstandard1.5/System.Runtime.xml",
|
||||
"ref/netstandard1.5/de/System.Runtime.xml",
|
||||
"ref/netstandard1.5/es/System.Runtime.xml",
|
||||
"ref/netstandard1.5/fr/System.Runtime.xml",
|
||||
"ref/netstandard1.5/it/System.Runtime.xml",
|
||||
"ref/netstandard1.5/ja/System.Runtime.xml",
|
||||
"ref/netstandard1.5/ko/System.Runtime.xml",
|
||||
"ref/netstandard1.5/ru/System.Runtime.xml",
|
||||
"ref/netstandard1.5/zh-hans/System.Runtime.xml",
|
||||
"ref/netstandard1.5/zh-hant/System.Runtime.xml",
|
||||
"ref/portable-net45+win8+wp80+wpa81/_._",
|
||||
"ref/win8/_._",
|
||||
"ref/wp80/_._",
|
||||
"ref/wpa81/_._",
|
||||
"ref/xamarinios10/_._",
|
||||
"ref/xamarinmac20/_._",
|
||||
"ref/xamarintvos10/_._",
|
||||
"ref/xamarinwatchos10/_._",
|
||||
"system.runtime.4.3.0.nupkg.sha512",
|
||||
"system.runtime.nuspec"
|
||||
]
|
||||
},
|
||||
"System.Runtime.CompilerServices.Unsafe/6.0.0": {
|
||||
"sha512": "/iUeP3tq1S0XdNNoMz5C9twLSrM/TH+qElHkXWaPvuNOt+99G75NrV0OS2EqHx5wMN7popYjpc8oTjC1y16DLg==",
|
||||
"type": "package",
|
||||
"path": "system.runtime.compilerservices.unsafe/6.0.0",
|
||||
"files": [
|
||||
".nupkg.metadata",
|
||||
".signature.p7s",
|
||||
"Icon.png",
|
||||
"LICENSE.TXT",
|
||||
"THIRD-PARTY-NOTICES.TXT",
|
||||
"buildTransitive/netcoreapp2.0/System.Runtime.CompilerServices.Unsafe.targets",
|
||||
"buildTransitive/netcoreapp3.1/_._",
|
||||
"lib/net461/System.Runtime.CompilerServices.Unsafe.dll",
|
||||
"lib/net461/System.Runtime.CompilerServices.Unsafe.xml",
|
||||
"lib/net6.0/System.Runtime.CompilerServices.Unsafe.dll",
|
||||
"lib/net6.0/System.Runtime.CompilerServices.Unsafe.xml",
|
||||
"lib/netcoreapp3.1/System.Runtime.CompilerServices.Unsafe.dll",
|
||||
"lib/netcoreapp3.1/System.Runtime.CompilerServices.Unsafe.xml",
|
||||
"lib/netstandard2.0/System.Runtime.CompilerServices.Unsafe.dll",
|
||||
"lib/netstandard2.0/System.Runtime.CompilerServices.Unsafe.xml",
|
||||
"system.runtime.compilerservices.unsafe.6.0.0.nupkg.sha512",
|
||||
"system.runtime.compilerservices.unsafe.nuspec",
|
||||
"useSharedDesignerContext.txt"
|
||||
]
|
||||
},
|
||||
"System.Security.Cryptography.Algorithms/4.3.0": {
|
||||
"sha512": "W1kd2Y8mYSCgc3ULTAZ0hOP2dSdG5YauTb1089T0/kRcN2MpSAW1izOFROrJgxSlMn3ArsgHXagigyi+ibhevg==",
|
||||
"type": "package",
|
||||
"path": "system.security.cryptography.algorithms/4.3.0",
|
||||
"files": [
|
||||
".nupkg.metadata",
|
||||
".signature.p7s",
|
||||
"ThirdPartyNotices.txt",
|
||||
"dotnet_library_license.txt",
|
||||
"lib/MonoAndroid10/_._",
|
||||
"lib/MonoTouch10/_._",
|
||||
"lib/net46/System.Security.Cryptography.Algorithms.dll",
|
||||
"lib/net461/System.Security.Cryptography.Algorithms.dll",
|
||||
"lib/net463/System.Security.Cryptography.Algorithms.dll",
|
||||
"lib/xamarinios10/_._",
|
||||
"lib/xamarinmac20/_._",
|
||||
"lib/xamarintvos10/_._",
|
||||
"lib/xamarinwatchos10/_._",
|
||||
"ref/MonoAndroid10/_._",
|
||||
"ref/MonoTouch10/_._",
|
||||
"ref/net46/System.Security.Cryptography.Algorithms.dll",
|
||||
"ref/net461/System.Security.Cryptography.Algorithms.dll",
|
||||
"ref/net463/System.Security.Cryptography.Algorithms.dll",
|
||||
"ref/netstandard1.3/System.Security.Cryptography.Algorithms.dll",
|
||||
"ref/netstandard1.4/System.Security.Cryptography.Algorithms.dll",
|
||||
"ref/netstandard1.6/System.Security.Cryptography.Algorithms.dll",
|
||||
"ref/xamarinios10/_._",
|
||||
"ref/xamarinmac20/_._",
|
||||
"ref/xamarintvos10/_._",
|
||||
"ref/xamarinwatchos10/_._",
|
||||
"runtimes/osx/lib/netstandard1.6/System.Security.Cryptography.Algorithms.dll",
|
||||
"runtimes/unix/lib/netstandard1.6/System.Security.Cryptography.Algorithms.dll",
|
||||
"runtimes/win/lib/net46/System.Security.Cryptography.Algorithms.dll",
|
||||
"runtimes/win/lib/net461/System.Security.Cryptography.Algorithms.dll",
|
||||
"runtimes/win/lib/net463/System.Security.Cryptography.Algorithms.dll",
|
||||
"runtimes/win/lib/netcore50/System.Security.Cryptography.Algorithms.dll",
|
||||
"runtimes/win/lib/netstandard1.6/System.Security.Cryptography.Algorithms.dll",
|
||||
"system.security.cryptography.algorithms.4.3.0.nupkg.sha512",
|
||||
"system.security.cryptography.algorithms.nuspec"
|
||||
]
|
||||
},
|
||||
"System.Security.Cryptography.Encoding/4.3.0": {
|
||||
"sha512": "1DEWjZZly9ae9C79vFwqaO5kaOlI5q+3/55ohmq/7dpDyDfc8lYe7YVxJUZ5MF/NtbkRjwFRo14yM4OEo9EmDw==",
|
||||
"type": "package",
|
||||
"path": "system.security.cryptography.encoding/4.3.0",
|
||||
"files": [
|
||||
".nupkg.metadata",
|
||||
".signature.p7s",
|
||||
"ThirdPartyNotices.txt",
|
||||
"dotnet_library_license.txt",
|
||||
"lib/MonoAndroid10/_._",
|
||||
"lib/MonoTouch10/_._",
|
||||
"lib/net46/System.Security.Cryptography.Encoding.dll",
|
||||
"lib/xamarinios10/_._",
|
||||
"lib/xamarinmac20/_._",
|
||||
"lib/xamarintvos10/_._",
|
||||
"lib/xamarinwatchos10/_._",
|
||||
"ref/MonoAndroid10/_._",
|
||||
"ref/MonoTouch10/_._",
|
||||
"ref/net46/System.Security.Cryptography.Encoding.dll",
|
||||
"ref/netstandard1.3/System.Security.Cryptography.Encoding.dll",
|
||||
"ref/netstandard1.3/System.Security.Cryptography.Encoding.xml",
|
||||
"ref/netstandard1.3/de/System.Security.Cryptography.Encoding.xml",
|
||||
"ref/netstandard1.3/es/System.Security.Cryptography.Encoding.xml",
|
||||
"ref/netstandard1.3/fr/System.Security.Cryptography.Encoding.xml",
|
||||
"ref/netstandard1.3/it/System.Security.Cryptography.Encoding.xml",
|
||||
"ref/netstandard1.3/ja/System.Security.Cryptography.Encoding.xml",
|
||||
"ref/netstandard1.3/ko/System.Security.Cryptography.Encoding.xml",
|
||||
"ref/netstandard1.3/ru/System.Security.Cryptography.Encoding.xml",
|
||||
"ref/netstandard1.3/zh-hans/System.Security.Cryptography.Encoding.xml",
|
||||
"ref/netstandard1.3/zh-hant/System.Security.Cryptography.Encoding.xml",
|
||||
"ref/xamarinios10/_._",
|
||||
"ref/xamarinmac20/_._",
|
||||
"ref/xamarintvos10/_._",
|
||||
"ref/xamarinwatchos10/_._",
|
||||
"runtimes/unix/lib/netstandard1.3/System.Security.Cryptography.Encoding.dll",
|
||||
"runtimes/win/lib/net46/System.Security.Cryptography.Encoding.dll",
|
||||
"runtimes/win/lib/netstandard1.3/System.Security.Cryptography.Encoding.dll",
|
||||
"system.security.cryptography.encoding.4.3.0.nupkg.sha512",
|
||||
"system.security.cryptography.encoding.nuspec"
|
||||
]
|
||||
},
|
||||
"System.Security.Cryptography.Primitives/4.3.0": {
|
||||
"sha512": "7bDIyVFNL/xKeFHjhobUAQqSpJq9YTOpbEs6mR233Et01STBMXNAc/V+BM6dwYGc95gVh/Zf+iVXWzj3mE8DWg==",
|
||||
"type": "package",
|
||||
"path": "system.security.cryptography.primitives/4.3.0",
|
||||
"files": [
|
||||
".nupkg.metadata",
|
||||
".signature.p7s",
|
||||
"ThirdPartyNotices.txt",
|
||||
"dotnet_library_license.txt",
|
||||
"lib/MonoAndroid10/_._",
|
||||
"lib/MonoTouch10/_._",
|
||||
"lib/net46/System.Security.Cryptography.Primitives.dll",
|
||||
"lib/netstandard1.3/System.Security.Cryptography.Primitives.dll",
|
||||
"lib/xamarinios10/_._",
|
||||
"lib/xamarinmac20/_._",
|
||||
"lib/xamarintvos10/_._",
|
||||
"lib/xamarinwatchos10/_._",
|
||||
"ref/MonoAndroid10/_._",
|
||||
"ref/MonoTouch10/_._",
|
||||
"ref/net46/System.Security.Cryptography.Primitives.dll",
|
||||
"ref/netstandard1.3/System.Security.Cryptography.Primitives.dll",
|
||||
"ref/xamarinios10/_._",
|
||||
"ref/xamarinmac20/_._",
|
||||
"ref/xamarintvos10/_._",
|
||||
"ref/xamarinwatchos10/_._",
|
||||
"system.security.cryptography.primitives.4.3.0.nupkg.sha512",
|
||||
"system.security.cryptography.primitives.nuspec"
|
||||
]
|
||||
},
|
||||
"System.Security.Cryptography.X509Certificates/4.3.0": {
|
||||
"sha512": "t2Tmu6Y2NtJ2um0RtcuhP7ZdNNxXEgUm2JeoA/0NvlMjAhKCnM1NX07TDl3244mVp3QU6LPEhT3HTtH1uF7IYw==",
|
||||
"type": "package",
|
||||
"path": "system.security.cryptography.x509certificates/4.3.0",
|
||||
"files": [
|
||||
".nupkg.metadata",
|
||||
".signature.p7s",
|
||||
"ThirdPartyNotices.txt",
|
||||
"dotnet_library_license.txt",
|
||||
"lib/MonoAndroid10/_._",
|
||||
"lib/MonoTouch10/_._",
|
||||
"lib/net46/System.Security.Cryptography.X509Certificates.dll",
|
||||
"lib/net461/System.Security.Cryptography.X509Certificates.dll",
|
||||
"lib/xamarinios10/_._",
|
||||
"lib/xamarinmac20/_._",
|
||||
"lib/xamarintvos10/_._",
|
||||
"lib/xamarinwatchos10/_._",
|
||||
"ref/MonoAndroid10/_._",
|
||||
"ref/MonoTouch10/_._",
|
||||
"ref/net46/System.Security.Cryptography.X509Certificates.dll",
|
||||
"ref/net461/System.Security.Cryptography.X509Certificates.dll",
|
||||
"ref/netstandard1.3/System.Security.Cryptography.X509Certificates.dll",
|
||||
"ref/netstandard1.3/System.Security.Cryptography.X509Certificates.xml",
|
||||
"ref/netstandard1.3/de/System.Security.Cryptography.X509Certificates.xml",
|
||||
"ref/netstandard1.3/es/System.Security.Cryptography.X509Certificates.xml",
|
||||
"ref/netstandard1.3/fr/System.Security.Cryptography.X509Certificates.xml",
|
||||
"ref/netstandard1.3/it/System.Security.Cryptography.X509Certificates.xml",
|
||||
"ref/netstandard1.3/ja/System.Security.Cryptography.X509Certificates.xml",
|
||||
"ref/netstandard1.3/ko/System.Security.Cryptography.X509Certificates.xml",
|
||||
"ref/netstandard1.3/ru/System.Security.Cryptography.X509Certificates.xml",
|
||||
"ref/netstandard1.3/zh-hans/System.Security.Cryptography.X509Certificates.xml",
|
||||
"ref/netstandard1.3/zh-hant/System.Security.Cryptography.X509Certificates.xml",
|
||||
"ref/netstandard1.4/System.Security.Cryptography.X509Certificates.dll",
|
||||
"ref/netstandard1.4/System.Security.Cryptography.X509Certificates.xml",
|
||||
"ref/netstandard1.4/de/System.Security.Cryptography.X509Certificates.xml",
|
||||
"ref/netstandard1.4/es/System.Security.Cryptography.X509Certificates.xml",
|
||||
"ref/netstandard1.4/fr/System.Security.Cryptography.X509Certificates.xml",
|
||||
"ref/netstandard1.4/it/System.Security.Cryptography.X509Certificates.xml",
|
||||
"ref/netstandard1.4/ja/System.Security.Cryptography.X509Certificates.xml",
|
||||
"ref/netstandard1.4/ko/System.Security.Cryptography.X509Certificates.xml",
|
||||
"ref/netstandard1.4/ru/System.Security.Cryptography.X509Certificates.xml",
|
||||
"ref/netstandard1.4/zh-hans/System.Security.Cryptography.X509Certificates.xml",
|
||||
"ref/netstandard1.4/zh-hant/System.Security.Cryptography.X509Certificates.xml",
|
||||
"ref/xamarinios10/_._",
|
||||
"ref/xamarinmac20/_._",
|
||||
"ref/xamarintvos10/_._",
|
||||
"ref/xamarinwatchos10/_._",
|
||||
"runtimes/unix/lib/netstandard1.6/System.Security.Cryptography.X509Certificates.dll",
|
||||
"runtimes/win/lib/net46/System.Security.Cryptography.X509Certificates.dll",
|
||||
"runtimes/win/lib/net461/System.Security.Cryptography.X509Certificates.dll",
|
||||
"runtimes/win/lib/netcore50/System.Security.Cryptography.X509Certificates.dll",
|
||||
"runtimes/win/lib/netstandard1.6/System.Security.Cryptography.X509Certificates.dll",
|
||||
"system.security.cryptography.x509certificates.4.3.0.nupkg.sha512",
|
||||
"system.security.cryptography.x509certificates.nuspec"
|
||||
]
|
||||
},
|
||||
"System.Text.Encodings.Web/6.0.0": {
|
||||
"sha512": "Vg8eB5Tawm1IFqj4TVK1czJX89rhFxJo9ELqc/Eiq0eXy13RK00eubyU6TJE6y+GQXjyV5gSfiewDUZjQgSE0w==",
|
||||
"type": "package",
|
||||
"path": "system.text.encodings.web/6.0.0",
|
||||
"files": [
|
||||
".nupkg.metadata",
|
||||
".signature.p7s",
|
||||
"Icon.png",
|
||||
"LICENSE.TXT",
|
||||
"THIRD-PARTY-NOTICES.TXT",
|
||||
"buildTransitive/netcoreapp2.0/System.Text.Encodings.Web.targets",
|
||||
"buildTransitive/netcoreapp3.1/_._",
|
||||
"lib/net461/System.Text.Encodings.Web.dll",
|
||||
"lib/net461/System.Text.Encodings.Web.xml",
|
||||
"lib/net6.0/System.Text.Encodings.Web.dll",
|
||||
"lib/net6.0/System.Text.Encodings.Web.xml",
|
||||
"lib/netcoreapp3.1/System.Text.Encodings.Web.dll",
|
||||
"lib/netcoreapp3.1/System.Text.Encodings.Web.xml",
|
||||
"lib/netstandard2.0/System.Text.Encodings.Web.dll",
|
||||
"lib/netstandard2.0/System.Text.Encodings.Web.xml",
|
||||
"runtimes/browser/lib/net6.0/System.Text.Encodings.Web.dll",
|
||||
"runtimes/browser/lib/net6.0/System.Text.Encodings.Web.xml",
|
||||
"system.text.encodings.web.6.0.0.nupkg.sha512",
|
||||
"system.text.encodings.web.nuspec",
|
||||
"useSharedDesignerContext.txt"
|
||||
]
|
||||
},
|
||||
"System.Text.Json/6.0.0": {
|
||||
"sha512": "zaJsHfESQvJ11vbXnNlkrR46IaMULk/gHxYsJphzSF+07kTjPHv+Oc14w6QEOfo3Q4hqLJgStUaYB9DBl0TmWg==",
|
||||
"type": "package",
|
||||
"path": "system.text.json/6.0.0",
|
||||
"files": [
|
||||
".nupkg.metadata",
|
||||
".signature.p7s",
|
||||
"Icon.png",
|
||||
"LICENSE.TXT",
|
||||
"THIRD-PARTY-NOTICES.TXT",
|
||||
"analyzers/dotnet/roslyn3.11/cs/System.Text.Json.SourceGeneration.dll",
|
||||
"analyzers/dotnet/roslyn3.11/cs/cs/System.Text.Json.SourceGeneration.resources.dll",
|
||||
"analyzers/dotnet/roslyn3.11/cs/de/System.Text.Json.SourceGeneration.resources.dll",
|
||||
"analyzers/dotnet/roslyn3.11/cs/es/System.Text.Json.SourceGeneration.resources.dll",
|
||||
"analyzers/dotnet/roslyn3.11/cs/fr/System.Text.Json.SourceGeneration.resources.dll",
|
||||
"analyzers/dotnet/roslyn3.11/cs/it/System.Text.Json.SourceGeneration.resources.dll",
|
||||
"analyzers/dotnet/roslyn3.11/cs/ja/System.Text.Json.SourceGeneration.resources.dll",
|
||||
"analyzers/dotnet/roslyn3.11/cs/ko/System.Text.Json.SourceGeneration.resources.dll",
|
||||
"analyzers/dotnet/roslyn3.11/cs/pl/System.Text.Json.SourceGeneration.resources.dll",
|
||||
"analyzers/dotnet/roslyn3.11/cs/pt-BR/System.Text.Json.SourceGeneration.resources.dll",
|
||||
"analyzers/dotnet/roslyn3.11/cs/ru/System.Text.Json.SourceGeneration.resources.dll",
|
||||
"analyzers/dotnet/roslyn3.11/cs/tr/System.Text.Json.SourceGeneration.resources.dll",
|
||||
"analyzers/dotnet/roslyn3.11/cs/zh-Hans/System.Text.Json.SourceGeneration.resources.dll",
|
||||
"analyzers/dotnet/roslyn3.11/cs/zh-Hant/System.Text.Json.SourceGeneration.resources.dll",
|
||||
"analyzers/dotnet/roslyn4.0/cs/System.Text.Json.SourceGeneration.dll",
|
||||
"analyzers/dotnet/roslyn4.0/cs/cs/System.Text.Json.SourceGeneration.resources.dll",
|
||||
"analyzers/dotnet/roslyn4.0/cs/de/System.Text.Json.SourceGeneration.resources.dll",
|
||||
"analyzers/dotnet/roslyn4.0/cs/es/System.Text.Json.SourceGeneration.resources.dll",
|
||||
"analyzers/dotnet/roslyn4.0/cs/fr/System.Text.Json.SourceGeneration.resources.dll",
|
||||
"analyzers/dotnet/roslyn4.0/cs/it/System.Text.Json.SourceGeneration.resources.dll",
|
||||
"analyzers/dotnet/roslyn4.0/cs/ja/System.Text.Json.SourceGeneration.resources.dll",
|
||||
"analyzers/dotnet/roslyn4.0/cs/ko/System.Text.Json.SourceGeneration.resources.dll",
|
||||
"analyzers/dotnet/roslyn4.0/cs/pl/System.Text.Json.SourceGeneration.resources.dll",
|
||||
"analyzers/dotnet/roslyn4.0/cs/pt-BR/System.Text.Json.SourceGeneration.resources.dll",
|
||||
"analyzers/dotnet/roslyn4.0/cs/ru/System.Text.Json.SourceGeneration.resources.dll",
|
||||
"analyzers/dotnet/roslyn4.0/cs/tr/System.Text.Json.SourceGeneration.resources.dll",
|
||||
"analyzers/dotnet/roslyn4.0/cs/zh-Hans/System.Text.Json.SourceGeneration.resources.dll",
|
||||
"analyzers/dotnet/roslyn4.0/cs/zh-Hant/System.Text.Json.SourceGeneration.resources.dll",
|
||||
"build/System.Text.Json.targets",
|
||||
"buildTransitive/netcoreapp2.0/System.Text.Json.targets",
|
||||
"buildTransitive/netcoreapp3.1/_._",
|
||||
"lib/net461/System.Text.Json.dll",
|
||||
"lib/net461/System.Text.Json.xml",
|
||||
"lib/net6.0/System.Text.Json.dll",
|
||||
"lib/net6.0/System.Text.Json.xml",
|
||||
"lib/netcoreapp3.1/System.Text.Json.dll",
|
||||
"lib/netcoreapp3.1/System.Text.Json.xml",
|
||||
"lib/netstandard2.0/System.Text.Json.dll",
|
||||
"lib/netstandard2.0/System.Text.Json.xml",
|
||||
"system.text.json.6.0.0.nupkg.sha512",
|
||||
"system.text.json.nuspec",
|
||||
"useSharedDesignerContext.txt"
|
||||
]
|
||||
},
|
||||
"System.Threading.Tasks.Extensions/4.5.4": {
|
||||
"sha512": "zteT+G8xuGu6mS+mzDzYXbzS7rd3K6Fjb9RiZlYlJPam2/hU7JCBZBVEcywNuR+oZ1ncTvc/cq0faRr3P01OVg==",
|
||||
"type": "package",
|
||||
"path": "system.threading.tasks.extensions/4.5.4",
|
||||
"files": [
|
||||
".nupkg.metadata",
|
||||
".signature.p7s",
|
||||
"LICENSE.TXT",
|
||||
"THIRD-PARTY-NOTICES.TXT",
|
||||
"lib/net461/System.Runtime.CompilerServices.Unsafe.dll",
|
||||
"lib/net461/System.Runtime.CompilerServices.Unsafe.xml",
|
||||
"lib/netcoreapp2.0/System.Runtime.CompilerServices.Unsafe.dll",
|
||||
"lib/netcoreapp2.0/System.Runtime.CompilerServices.Unsafe.xml",
|
||||
"lib/netstandard1.0/System.Runtime.CompilerServices.Unsafe.dll",
|
||||
"lib/netstandard1.0/System.Runtime.CompilerServices.Unsafe.xml",
|
||||
"lib/netstandard2.0/System.Runtime.CompilerServices.Unsafe.dll",
|
||||
"lib/netstandard2.0/System.Runtime.CompilerServices.Unsafe.xml",
|
||||
"ref/net461/System.Runtime.CompilerServices.Unsafe.dll",
|
||||
"ref/net461/System.Runtime.CompilerServices.Unsafe.xml",
|
||||
"ref/netstandard1.0/System.Runtime.CompilerServices.Unsafe.dll",
|
||||
"ref/netstandard1.0/System.Runtime.CompilerServices.Unsafe.xml",
|
||||
"ref/netstandard2.0/System.Runtime.CompilerServices.Unsafe.dll",
|
||||
"ref/netstandard2.0/System.Runtime.CompilerServices.Unsafe.xml",
|
||||
"system.runtime.compilerservices.unsafe.4.5.3.nupkg.sha512",
|
||||
"system.runtime.compilerservices.unsafe.nuspec",
|
||||
"lib/MonoAndroid10/_._",
|
||||
"lib/MonoTouch10/_._",
|
||||
"lib/net461/System.Threading.Tasks.Extensions.dll",
|
||||
"lib/net461/System.Threading.Tasks.Extensions.xml",
|
||||
"lib/netcoreapp2.1/_._",
|
||||
"lib/netstandard1.0/System.Threading.Tasks.Extensions.dll",
|
||||
"lib/netstandard1.0/System.Threading.Tasks.Extensions.xml",
|
||||
"lib/netstandard2.0/System.Threading.Tasks.Extensions.dll",
|
||||
"lib/netstandard2.0/System.Threading.Tasks.Extensions.xml",
|
||||
"lib/portable-net45+win8+wp8+wpa81/System.Threading.Tasks.Extensions.dll",
|
||||
"lib/portable-net45+win8+wp8+wpa81/System.Threading.Tasks.Extensions.xml",
|
||||
"lib/xamarinios10/_._",
|
||||
"lib/xamarinmac20/_._",
|
||||
"lib/xamarintvos10/_._",
|
||||
"lib/xamarinwatchos10/_._",
|
||||
"ref/MonoAndroid10/_._",
|
||||
"ref/MonoTouch10/_._",
|
||||
"ref/netcoreapp2.1/_._",
|
||||
"ref/xamarinios10/_._",
|
||||
"ref/xamarinmac20/_._",
|
||||
"ref/xamarintvos10/_._",
|
||||
"ref/xamarinwatchos10/_._",
|
||||
"system.threading.tasks.extensions.4.5.4.nupkg.sha512",
|
||||
"system.threading.tasks.extensions.nuspec",
|
||||
"useSharedDesignerContext.txt",
|
||||
"version.txt"
|
||||
]
|
||||
},
|
||||
"System.ValueTuple/4.5.0": {
|
||||
"sha512": "okurQJO6NRE/apDIP23ajJ0hpiNmJ+f0BwOlB/cSqTLQlw5upkf+5+96+iG2Jw40G1fCVCyPz/FhIABUjMR+RQ==",
|
||||
"type": "package",
|
||||
"path": "system.valuetuple/4.5.0",
|
||||
"files": [
|
||||
".nupkg.metadata",
|
||||
".signature.p7s",
|
||||
"LICENSE.TXT",
|
||||
"THIRD-PARTY-NOTICES.TXT",
|
||||
"lib/MonoAndroid10/_._",
|
||||
"lib/MonoTouch10/_._",
|
||||
"lib/net461/System.ValueTuple.dll",
|
||||
"lib/net461/System.ValueTuple.xml",
|
||||
"lib/net47/System.ValueTuple.dll",
|
||||
"lib/net47/System.ValueTuple.xml",
|
||||
"lib/netcoreapp2.0/_._",
|
||||
"lib/netstandard1.0/System.ValueTuple.dll",
|
||||
"lib/netstandard1.0/System.ValueTuple.xml",
|
||||
"lib/netstandard2.0/_._",
|
||||
"lib/portable-net40+sl4+win8+wp8/System.ValueTuple.dll",
|
||||
"lib/portable-net40+sl4+win8+wp8/System.ValueTuple.xml",
|
||||
"lib/uap10.0.16299/_._",
|
||||
"lib/xamarinios10/_._",
|
||||
"lib/xamarinmac20/_._",
|
||||
"lib/xamarintvos10/_._",
|
||||
"lib/xamarinwatchos10/_._",
|
||||
"ref/MonoAndroid10/_._",
|
||||
"ref/MonoTouch10/_._",
|
||||
"ref/net461/System.ValueTuple.dll",
|
||||
"ref/net47/System.ValueTuple.dll",
|
||||
"ref/netcoreapp2.0/_._",
|
||||
"ref/netstandard2.0/_._",
|
||||
"ref/portable-net40+sl4+win8+wp8/System.ValueTuple.dll",
|
||||
"ref/uap10.0.16299/_._",
|
||||
"ref/xamarinios10/_._",
|
||||
"ref/xamarinmac20/_._",
|
||||
"ref/xamarintvos10/_._",
|
||||
"ref/xamarinwatchos10/_._",
|
||||
"system.valuetuple.4.5.0.nupkg.sha512",
|
||||
"system.valuetuple.nuspec",
|
||||
"useSharedDesignerContext.txt",
|
||||
"version.txt"
|
||||
]
|
||||
@@ -613,7 +1418,9 @@
|
||||
"projectFileDependencyGroups": {
|
||||
".NETFramework,Version=v4.8": [
|
||||
"Microsoft.NETFramework.ReferenceAssemblies >= 1.0.3",
|
||||
"System.Memory >= 4.5.5"
|
||||
"System.Memory >= 4.5.5",
|
||||
"System.Net.Http >= 4.3.4",
|
||||
"System.Text.Json >= 6.0.0"
|
||||
]
|
||||
},
|
||||
"packageFolders": {
|
||||
@@ -667,10 +1474,30 @@
|
||||
"System.Memory": {
|
||||
"target": "Package",
|
||||
"version": "[4.5.5, )"
|
||||
},
|
||||
"System.Net.Http": {
|
||||
"target": "Package",
|
||||
"version": "[4.3.4, )"
|
||||
},
|
||||
"System.Text.Json": {
|
||||
"target": "Package",
|
||||
"version": "[6.0.0, )"
|
||||
}
|
||||
},
|
||||
"runtimeIdentifierGraphPath": "/usr/share/dotnet/sdk/8.0.414/RuntimeIdentifierGraph.json"
|
||||
}
|
||||
}
|
||||
},
|
||||
"logs": [
|
||||
{
|
||||
"code": "NU1903",
|
||||
"level": "Warning",
|
||||
"warningLevel": 1,
|
||||
"message": "Package 'System.Text.Json' 6.0.0 has a known high severity vulnerability, https://github.com/advisories/GHSA-8g4q-xg66-9fp4",
|
||||
"libraryId": "System.Text.Json",
|
||||
"targetGraphs": [
|
||||
".NETFramework,Version=v4.8"
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -1,15 +1,38 @@
|
||||
{
|
||||
"version": 2,
|
||||
"dgSpecHash": "+Vupasg2dYE=",
|
||||
"dgSpecHash": "1tbmKnFkad0=",
|
||||
"success": true,
|
||||
"projectFilePath": "/home/jskala/github/NFOguard/NFOGuard.Emby.Plugin/NFOGuard.Emby.Plugin.csproj",
|
||||
"expectedPackageFiles": [
|
||||
"/home/jskala/.nuget/packages/microsoft.bcl.asyncinterfaces/6.0.0/microsoft.bcl.asyncinterfaces.6.0.0.nupkg.sha512",
|
||||
"/home/jskala/.nuget/packages/microsoft.netframework.referenceassemblies/1.0.3/microsoft.netframework.referenceassemblies.1.0.3.nupkg.sha512",
|
||||
"/home/jskala/.nuget/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/microsoft.netframework.referenceassemblies.net48.1.0.3.nupkg.sha512",
|
||||
"/home/jskala/.nuget/packages/system.buffers/4.5.1/system.buffers.4.5.1.nupkg.sha512",
|
||||
"/home/jskala/.nuget/packages/system.io/4.3.0/system.io.4.3.0.nupkg.sha512",
|
||||
"/home/jskala/.nuget/packages/system.memory/4.5.5/system.memory.4.5.5.nupkg.sha512",
|
||||
"/home/jskala/.nuget/packages/system.net.http/4.3.4/system.net.http.4.3.4.nupkg.sha512",
|
||||
"/home/jskala/.nuget/packages/system.numerics.vectors/4.5.0/system.numerics.vectors.4.5.0.nupkg.sha512",
|
||||
"/home/jskala/.nuget/packages/system.runtime.compilerservices.unsafe/4.5.3/system.runtime.compilerservices.unsafe.4.5.3.nupkg.sha512"
|
||||
"/home/jskala/.nuget/packages/system.runtime/4.3.0/system.runtime.4.3.0.nupkg.sha512",
|
||||
"/home/jskala/.nuget/packages/system.runtime.compilerservices.unsafe/6.0.0/system.runtime.compilerservices.unsafe.6.0.0.nupkg.sha512",
|
||||
"/home/jskala/.nuget/packages/system.security.cryptography.algorithms/4.3.0/system.security.cryptography.algorithms.4.3.0.nupkg.sha512",
|
||||
"/home/jskala/.nuget/packages/system.security.cryptography.encoding/4.3.0/system.security.cryptography.encoding.4.3.0.nupkg.sha512",
|
||||
"/home/jskala/.nuget/packages/system.security.cryptography.primitives/4.3.0/system.security.cryptography.primitives.4.3.0.nupkg.sha512",
|
||||
"/home/jskala/.nuget/packages/system.security.cryptography.x509certificates/4.3.0/system.security.cryptography.x509certificates.4.3.0.nupkg.sha512",
|
||||
"/home/jskala/.nuget/packages/system.text.encodings.web/6.0.0/system.text.encodings.web.6.0.0.nupkg.sha512",
|
||||
"/home/jskala/.nuget/packages/system.text.json/6.0.0/system.text.json.6.0.0.nupkg.sha512",
|
||||
"/home/jskala/.nuget/packages/system.threading.tasks.extensions/4.5.4/system.threading.tasks.extensions.4.5.4.nupkg.sha512",
|
||||
"/home/jskala/.nuget/packages/system.valuetuple/4.5.0/system.valuetuple.4.5.0.nupkg.sha512"
|
||||
],
|
||||
"logs": []
|
||||
"logs": [
|
||||
{
|
||||
"code": "NU1903",
|
||||
"level": "Warning",
|
||||
"warningLevel": 1,
|
||||
"message": "Package 'System.Text.Json' 6.0.0 has a known high severity vulnerability, https://github.com/advisories/GHSA-8g4q-xg66-9fp4",
|
||||
"libraryId": "System.Text.Json",
|
||||
"targetGraphs": [
|
||||
".NETFramework,Version=v4.8"
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
Binary file not shown.
Binary file not shown.
+31
-17
@@ -17,11 +17,11 @@ NFOGuard is a comprehensive solution to protect and preserve date metadata for T
|
||||
- `<aired>` maps to Emby's `PremiereDate` field
|
||||
- **Current Fix**: Writing import date to `<aired>` field (goes to PremiereDate)
|
||||
|
||||
### 2. NFOGuard Emby Plugin (C# DLL) - v1.0.0 🚧
|
||||
**Status**: Built, ready for testing
|
||||
### 2. NFOGuard Emby Plugin (C# DLL) - v2.0.0-automatic ✅
|
||||
**Status**: Production-ready with automatic subscription system
|
||||
- **Purpose**: Automatically sync `PremiereDate` → `DateCreated` in Emby
|
||||
- **Approach**: Real-time processing via library events (not scheduled tasks)
|
||||
- **Architecture**: Clean, standards-compliant Emby plugin
|
||||
- **Approach**: Real-time processing + scheduled tasks with licensing tiers
|
||||
- **Architecture**: Professional plugin with automatic subscription validation
|
||||
|
||||
## What We've Tried
|
||||
|
||||
@@ -43,16 +43,17 @@ NFOGuard is a comprehensive solution to protect and preserve date metadata for T
|
||||
- Comprehensive logging and error handling
|
||||
- CI/CD pipeline with automated testing
|
||||
|
||||
### Emby Plugin Features ✅ - READY FOR TESTING
|
||||
### Emby Plugin Features ✅ - PRODUCTION READY
|
||||
- **Real-time processing**: Library event hooks (`ItemAdded`/`ItemUpdated`)
|
||||
- **Scheduled task mode**: Weekly batch processing of existing episodes
|
||||
- **Flexible processing modes**: Real-time only, scheduled only, or both
|
||||
- **Configuration UI**: Full settings page in Emby dashboard
|
||||
- **TV episode detection**: Automatic filtering and processing
|
||||
- **Scheduled task mode**: Weekly batch processing with free tier limits
|
||||
- **Percentage-based free tier**: 2% of TV episodes + 5% of movies per month
|
||||
- **Automatic subscription system**: Patreon/PayPal integration (no manual keys)
|
||||
- **Machine-based activation**: Unique installation IDs prevent piracy
|
||||
- **Usage tracking**: Monthly quotas with automatic reset
|
||||
- **TV + Movie support**: Full media library coverage
|
||||
- **Core sync logic**: `PremiereDate` → `DateCreated` synchronization
|
||||
- **Verbose logging**: Configurable detailed logging for troubleshooting
|
||||
- **License framework**: Ready for future licensing (currently disabled)
|
||||
- **Standard architecture**: Follows official Emby plugin guidelines
|
||||
- **Professional licensing**: TimeLord-style automatic activation
|
||||
- **Offline mode**: Graceful fallback to free tier
|
||||
|
||||
## Technical Details
|
||||
|
||||
@@ -106,11 +107,24 @@ episode.UpdateToRepository(ItemUpdateType.MetadataEdit);
|
||||
4. **Verify database sync**: `DateCreated` = `PremiereDate`
|
||||
5. **Monitor logs for proper operation**
|
||||
|
||||
### Production Features
|
||||
8. **Add licensing system** - Custom server integration
|
||||
9. **Performance optimization**
|
||||
10. **Error handling improvements**
|
||||
11. **Documentation and user guides**
|
||||
### Plugin Version History
|
||||
- **v1.0.0-working**: Basic functionality, unlimited processing (TESTED ✅)
|
||||
- **v1.1.0-free-tier**: Fixed 500 items/month, no real-time
|
||||
- **v1.2.0-production**: Unlimited with manual license keys
|
||||
- **v1.3.0-unified**: Single DLL with license key activation
|
||||
- **v2.0.0-automatic**: Professional subscription system (CURRENT 🚀)
|
||||
|
||||
### Version Recommendations
|
||||
- **Development/Testing**: Use v1.0.0-working (unlimited, no licensing)
|
||||
- **Production/Commercial**: Use v2.0.0-automatic (percentage-based free tier + subscriptions)
|
||||
|
||||
### API Requirements for v2.0.0-automatic
|
||||
```
|
||||
Domain: nfoguard.com
|
||||
POST /api/register # Machine registration
|
||||
GET /api/patreon/check?machine_id=XXX # Patreon validation
|
||||
GET /api/paypal/check?machine_id=XXX # PayPal validation
|
||||
```
|
||||
|
||||
## File Structure
|
||||
```
|
||||
|
||||
@@ -0,0 +1,28 @@
|
||||
# NFOGuard Emby Plugin Releases
|
||||
|
||||
This directory contains versioned releases of the NFOGuard Emby plugin DLL.
|
||||
|
||||
## Release Structure
|
||||
```
|
||||
releases/
|
||||
├── v1.0.0-working/ # Current proven working version
|
||||
├── v1.1.0-free-tier/ # Version with free tier limitations
|
||||
├── v1.2.0-production/ # Full production version
|
||||
└── changelog.md # Version history and changes
|
||||
```
|
||||
|
||||
## Installation
|
||||
1. Choose your version from the appropriate folder
|
||||
2. Copy `NFOGuard.Emby.Plugin.dll` to your Emby plugins folder
|
||||
3. Restart Emby Server
|
||||
4. Check version in Emby Dashboard → Plugins
|
||||
|
||||
## Version Guidelines
|
||||
- **Working versions**: Proven stable in testing
|
||||
- **Free tier versions**: Limited functionality for trial users
|
||||
- **Production versions**: Full-featured, licensed versions
|
||||
|
||||
## Current Status
|
||||
- **Latest Working**: v1.0.0 - Full functionality, no restrictions
|
||||
- **Latest Free Tier**: Not yet released
|
||||
- **Latest Production**: Not yet released
|
||||
Binary file not shown.
@@ -0,0 +1,37 @@
|
||||
# NFOGuard Emby Plugin v1.0.0 - Working Version
|
||||
|
||||
**Release Date**: 2025-01-12
|
||||
**Status**: ✅ PROVEN WORKING
|
||||
**License**: Full functionality, no restrictions
|
||||
|
||||
## 🎉 Test Results
|
||||
- **Episodes Processed**: 15,039
|
||||
- **Successfully Updated**: 14,661
|
||||
- **Success Rate**: 97.5%
|
||||
- **Processing Speed**: ~1,500 episodes/second
|
||||
|
||||
## ✅ Features
|
||||
- **Real-time Processing**: Automatic sync on media add/update
|
||||
- **Scheduled Task**: Weekly batch processing (enabled by default)
|
||||
- **TV Episodes Support**: Full episode date synchronization
|
||||
- **Movies Support**: Full movie date synchronization
|
||||
- **High Performance**: Processes thousands of items in seconds
|
||||
|
||||
## 🔧 Configuration
|
||||
- `EnableRealTimeSync = true` (default)
|
||||
- `EnableScheduledTask = true` (default)
|
||||
- `LogVerbose = false` (default)
|
||||
|
||||
## 📋 Installation
|
||||
1. Copy `NFOGuard.Emby.Plugin.dll` to Emby plugins folder
|
||||
2. Restart Emby Server
|
||||
3. Plugin loads automatically - no configuration needed
|
||||
4. Check "Scheduled Tasks" for "NFOGuard Date Sync"
|
||||
|
||||
## 🎯 What It Does
|
||||
Syncs `PremiereDate` → `DateCreated` so Emby displays import dates from NFO files instead of scan dates.
|
||||
|
||||
## ⚠️ Notes
|
||||
- No configuration UI (disabled to prevent crashes)
|
||||
- All settings hardcoded to optimal values
|
||||
- Licensing framework present but disabled
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Reference in New Issue
Block a user