From f4681f85e76fcb8216c37c9f7ef9fb71d76833f2 Mon Sep 17 00:00:00 2001 From: TekH Date: Tue, 9 Jun 2026 11:14:49 +0200 Subject: [PATCH] Add signature caching and logging to EnvelopeViewer Introduced `SignatureCacheService` and `ILogger` to enable caching and logging functionality. Added logic to load cached signatures when available, bypassing the signature popup. Implemented asynchronous, fire-and-forget caching of captured signatures, with error handling to ignore cache failures. Updated signature handling to integrate with the caching mechanism, improving user experience and performance. --- .../Pages/EnvelopeViewer.razor | 50 +++++++++++++++++-- 1 file changed, 46 insertions(+), 4 deletions(-) diff --git a/EnvelopeGenerator.ReceiverUI/Pages/EnvelopeViewer.razor b/EnvelopeGenerator.ReceiverUI/Pages/EnvelopeViewer.razor index 4be1e5f3..e5d3d6dc 100644 --- a/EnvelopeGenerator.ReceiverUI/Pages/EnvelopeViewer.razor +++ b/EnvelopeGenerator.ReceiverUI/Pages/EnvelopeViewer.razor @@ -12,9 +12,11 @@ @inject IOptions PdfViewerOptions @inject IJSRuntime JSRuntime @inject SignatureService SignatureService +@inject SignatureCacheService SignatureCacheService @inject EnvelopeGenerator.ReceiverUI.Services.AuthService AuthService @inject EnvelopeGenerator.ReceiverUI.Services.EnvelopeReceiverService EnvelopeReceiverService @inject AppVersionService AppVersion +@inject ILogger logger @implements IAsyncDisposable @@ -563,10 +565,34 @@ const int MaxThumbnailWidth = 400; await JSRuntime.InvokeVoidAsync("console.log", "Loaded signatures:", _signatures); - // Open signature popup on page load - _activeSignatureTab = SignatureTabDraw; - _signaturePopupVisible = true; - _popupValidationMessage = null; + // Try to load cached signature first + try + { + var cachedSignature = await SignatureCacheService.GetSignatureAsync(EnvelopeKey); + if (cachedSignature is not null) + { + _capturedSignature = cachedSignature; + _signerFullName = cachedSignature.FullName; + _signerPosition = cachedSignature.Position; + _signaturePlace = cachedSignature.Place; + _signaturePopupVisible = false; + + logger.LogInformation("Cached signature loaded for envelope {EnvelopeKey}", EnvelopeKey); + } + else + { + _activeSignatureTab = SignatureTabDraw; + _signaturePopupVisible = true; + _popupValidationMessage = null; + } + } + catch (Exception ex) + { + logger.LogWarning(ex, "Failed to load cached signature, showing popup"); + _activeSignatureTab = SignatureTabDraw; + _signaturePopupVisible = true; + _popupValidationMessage = null; + } } catch (Exception ex) { _errorMessage = $"Fehler: {ex.Message}"; @@ -881,6 +907,22 @@ const int MaxThumbnailWidth = 400; }; _signaturePopupVisible = false; + // Save to cache (fire-and-forget, ignore errors) + if (!string.IsNullOrWhiteSpace(EnvelopeKey)) + { + _ = Task.Run(async () => + { + try + { + await SignatureCacheService.SaveSignatureAsync(EnvelopeKey, _capturedSignature); + } + catch + { + // Ignore cache errors + } + }); + } + await InvokeAsync(StateHasChanged); Console.WriteLine($"Signature saved: {_signerFullName}, {_signaturePlace}"); }