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

@@ -1,9 +1,9 @@
using System.Net.Http.Headers;
using System.Text;
using System.Text;
using System.Text.Json;
using IntegryApiClient.Core.Domain.RestClient.Contacts;
using Microsoft.Extensions.Logging;
using SteUp.Shared.Core.Dto;
using SteUp.Shared.Core.Helpers;
using SteUp.Shared.Core.Interface.IntegryApi;
namespace SteUp.Shared.Core.Services;
@@ -37,21 +37,18 @@ public class IntegryApiService(
public async Task SendEmail(SendEmailDto sendEmail)
{
var content = new MultipartFormDataContent();
using var content = new MultipartFormDataContent();
try
{
if (sendEmail.Attachments != null)
foreach (var a in sendEmail.Attachments ?? [])
{
foreach (var a in sendEmail.Attachments)
{
var fileContent = new ByteArrayContent(a.FileContent);
fileContent.Headers.ContentType = MediaTypeHeaderValue.Parse("multipart/form-data");
content.Add(fileContent, "allegati", a.FileName);
}
var mediaType = a.FileName.EndsWith(".zip", StringComparison.OrdinalIgnoreCase)
? "application/zip"
: "application/octet-stream";
content.Add(new FileHttpContent(a.FilePath, mediaType), "allegati", a.FileName);
}
sendEmail.Attachments = null;
content.Add(
new StringContent(
JsonSerializer.Serialize(sendEmail),
@@ -69,9 +66,5 @@ public class IntegryApiService(
logger.LogError(e, e.Message);
throw;
}
finally
{
content.Dispose();
}
}
}