Invia i log a parti e chiedi se includere le foto

Le foto venivano zippate tutte in un unico allegato: oltre i 100 MB i servizi
rifiutavano l'invio (MaxUploadSizeExceededException) e, costruendo tutto in RAM
sul thread della UI, il dispositivo si bloccava.

- Invio diviso in più email da massimo ~40 MB ciascuna
- Zip scritti su disco una parte alla volta e caricati in streaming
- Preparazione in background, avanzamento "parte X di N"
- Richiesta se includere le foto, con il loro peso (default: solo i log)
- Database inviato insieme al file -wal
- Avviso subito se si è offline

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This commit is contained in:
MarcoEandClaude Opus 5.5 committed 2026-09-28 12:10:19 +02:00
1 parent a4e5709be6
commit 9799f6b0c7
9 files changed
+403 -183

No files matched your search

@@ -26,5 +26,6 @@ public interface IFileManager
Task<(string originalUrl, string thumbUrl)> SaveAndCreateThumbAsync(byte[] bytes, string fileName,
CancellationToken ct = default);
List<SendEmailDto.AttachmentsDto> GetFileForExport();
Task<long> GetLogExportImagesSizeAsync(CancellationToken ct = default);
Task<ILogExport> PrepareLogExportAsync(bool includeImages, CancellationToken ct = default);
}
@@ -0,0 +1,15 @@
using SteUp.Shared.Core.Dto;
namespace SteUp.Shared.Core.Interface.System;
/// <summary>
/// Invio dei log diviso in parti: ogni parte diventa un'email separata, sotto i limiti di upload
/// dei servizi. Gli zip di una parte vengono creati solo quando la si chiede e cancellati alla
/// parte successiva; il dispose elimina tutto quello che resta su disco.
/// </summary>
public interface ILogExport : IAsyncDisposable
{
int PartCount { get; }
Task<List<SendEmailDto.AttachmentsDto>> BuildPartAsync(int index, CancellationToken ct = default);
}