From 03dfe0f3a1efffaccf18fc7057ae1e376dce21e6 Mon Sep 17 00:00:00 2001 From: Maddo Date: Tue, 26 May 2026 22:33:46 +0200 Subject: [PATCH] feat: Enhance Catalog Lite expiration handling and improve Italian localization --- CatalogLite/CatalogLite.csproj | 12 +++++++---- CatalogLite/ExpirationGuard.cs | 26 +++++++++++++++++------ CatalogLite/ExpiredWindow.cs | 4 ++-- CatalogLite/ImageProcessingCoordinator.cs | 2 +- 4 files changed, 30 insertions(+), 14 deletions(-) diff --git a/CatalogLite/CatalogLite.csproj b/CatalogLite/CatalogLite.csproj index 2573c3d..97280a9 100644 --- a/CatalogLite/CatalogLite.csproj +++ b/CatalogLite/CatalogLite.csproj @@ -15,10 +15,7 @@ - - <_Parameter1>CatalogLiteExpirationDate - <_Parameter2>$(CatalogLiteExpirationDate) - + @@ -41,4 +38,11 @@ + + + + \ No newline at end of file diff --git a/CatalogLite/ExpirationGuard.cs b/CatalogLite/ExpirationGuard.cs index 46cbbd2..b800cf2 100644 --- a/CatalogLite/ExpirationGuard.cs +++ b/CatalogLite/ExpirationGuard.cs @@ -5,23 +5,35 @@ namespace CatalogLite; internal static class ExpirationGuard { + private const string GeneratedMetadataKey = "CatalogLiteGeneratedExpirationDate"; private const string MetadataKey = "CatalogLiteExpirationDate"; public static bool IsExpired(out DateOnly? expirationDate) { expirationDate = TryReadExpirationDate(); - return expirationDate is null || DateOnly.FromDateTime(DateTime.Today) > expirationDate.Value; + return expirationDate is null || DateOnly.FromDateTime(DateTime.Now) > expirationDate.Value; } private static DateOnly? TryReadExpirationDate() { - var value = typeof(Program).Assembly - .GetCustomAttributes() - .FirstOrDefault(attribute => string.Equals(attribute.Key, MetadataKey, StringComparison.Ordinal)) - ?.Value; + if (TryParseDate(BuildExpiration.ExpirationDate, out var generatedDate)) + { + return generatedDate; + } - return DateOnly.TryParseExact(value, "yyyy-MM-dd", CultureInfo.InvariantCulture, DateTimeStyles.None, out var date) - ? date + var metadata = typeof(Program).Assembly.GetCustomAttributes(); + var metadataValue = metadata.FirstOrDefault(attribute => string.Equals(attribute.Key, GeneratedMetadataKey, StringComparison.Ordinal))?.Value + ?? metadata.FirstOrDefault(attribute => string.Equals(attribute.Key, MetadataKey, StringComparison.Ordinal))?.Value; + + return TryParseDate(metadataValue, out var metadataDate) + ? metadataDate : null; } + + private static bool TryParseDate(string? value, out DateOnly date) + { + var trimmedValue = value?.Trim(); + return DateOnly.TryParseExact(trimmedValue, "yyyy-MM-dd", CultureInfo.InvariantCulture, DateTimeStyles.None, out date) + || DateOnly.TryParse(trimmedValue, CultureInfo.CurrentCulture, DateTimeStyles.None, out date); + } } \ No newline at end of file diff --git a/CatalogLite/ExpiredWindow.cs b/CatalogLite/ExpiredWindow.cs index e3bd88f..c5b84f1 100644 --- a/CatalogLite/ExpiredWindow.cs +++ b/CatalogLite/ExpiredWindow.cs @@ -14,8 +14,8 @@ internal sealed class ExpiredWindow : Window WindowStartupLocation = WindowStartupLocation.CenterScreen; var message = expirationDate is null - ? "L'applicazione e scaduta e non puo essere utilizzata." - : $"L'applicazione e scaduta il {expirationDate:dd/MM/yyyy} e non puo essere utilizzata."; + ? "L'applicazione è scaduta e non può essere utilizzata." + : $"L'applicazione è scaduta il {expirationDate:dd/MM/yyyy} e non può essere utilizzata."; var closeButton = new Button { diff --git a/CatalogLite/ImageProcessingCoordinator.cs b/CatalogLite/ImageProcessingCoordinator.cs index 9ad61b2..dcf78d7 100644 --- a/CatalogLite/ImageProcessingCoordinator.cs +++ b/CatalogLite/ImageProcessingCoordinator.cs @@ -70,7 +70,7 @@ public sealed class ImageProcessingCoordinator } catch (Exception ex) { - _logger.LogDebug(ex, "Errore durante l'aggiornamento della velocita"); + _logger.LogDebug(ex, "Errore durante l'aggiornamento della velocità"); } }, null, TimeSpan.FromSeconds(1), TimeSpan.FromSeconds(1));