Avvisa quando la fotocamera non si apre e passa alla galleria
Se lo scatto falliva, AttachedService restituiva null come per un annullamento: il rilevatore toccava "Aggiungi una foto" e non succedeva nulla. - AttachedService: espone IsCameraAvailable (IsCaptureSupported) e, dopo aver registrato l'errore e averlo inviato a Sentry, lo rilancia invece di restituire null. - ModalFormScheda: dalla scheda il pulsante apre solo la fotocamera, quindi senza fotocamera non c'era alternativa. Ora avvisa e apre la galleria; se lo scatto fallisce mostra un errore. - ModalAddAttached: stessa gestione dell'errore di scatto. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This commit is contained in:
1 parent
fd0c218ab5
commit
7e1492d118
4 files changed
+49
-5
No files matched your search
@@ -8,6 +8,8 @@ namespace SteUp.Maui.Core.Services;
|
|||||||
|
|
||||||
public class AttachedService(ILogger<FileManager> logger) : IAttachedService
|
public class AttachedService(ILogger<FileManager> logger) : IAttachedService
|
||||||
{
|
{
|
||||||
|
public bool IsCameraAvailable => MediaPicker.Default.IsCaptureSupported;
|
||||||
|
|
||||||
public async Task<AttachedDto?> SelectImageFromCamera()
|
public async Task<AttachedDto?> SelectImageFromCamera()
|
||||||
{
|
{
|
||||||
var cameraPerm = await Permissions.RequestAsync<Permissions.Camera>();
|
var cameraPerm = await Permissions.RequestAsync<Permissions.Camera>();
|
||||||
@@ -28,7 +30,10 @@ public class AttachedService(ILogger<FileManager> logger) : IAttachedService
|
|||||||
logger.LogError(ex, ex.Message);
|
logger.LogError(ex, ex.Message);
|
||||||
Console.WriteLine($"Errore cattura foto: {ex.Message}");
|
Console.WriteLine($"Errore cattura foto: {ex.Message}");
|
||||||
SentrySdk.CaptureException(ex);
|
SentrySdk.CaptureException(ex);
|
||||||
return null;
|
|
||||||
|
// Rilancia: restituire null qui era indistinguibile da un annullamento,
|
||||||
|
// e il rilevatore toccava "Aggiungi una foto" senza vedere nulla.
|
||||||
|
throw;
|
||||||
}
|
}
|
||||||
|
|
||||||
return result is null ? null : await UtilityFile.ConvertToDto(result, AttachedDto.TypeAttached.Image);
|
return result is null ? null : await UtilityFile.ConvertToDto(result, AttachedDto.TypeAttached.Image);
|
||||||
|
|||||||
@@ -40,7 +40,17 @@
|
|||||||
|
|
||||||
private async Task OnCamera()
|
private async Task OnCamera()
|
||||||
{
|
{
|
||||||
var selectImageFromCamera = await AttachedService.SelectImageFromCamera();
|
AttachedDto? selectImageFromCamera;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
selectImageFromCamera = await AttachedService.SelectImageFromCamera();
|
||||||
|
}
|
||||||
|
catch (Exception)
|
||||||
|
{
|
||||||
|
Snackbar.Clear();
|
||||||
|
Snackbar.Add("Non è stato possibile scattare la foto, riprova", Severity.Error);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (selectImageFromCamera != null)
|
if (selectImageFromCamera != null)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -756,10 +756,36 @@
|
|||||||
|
|
||||||
private async Task OpenAddAttached()
|
private async Task OpenAddAttached()
|
||||||
{
|
{
|
||||||
var selectImageFromCamera = await AttachedService.SelectImageFromCamera();
|
List<AttachedDto>? attachedList;
|
||||||
if (selectImageFromCamera == null) return;
|
|
||||||
|
|
||||||
var attachedList = new List<AttachedDto> { selectImageFromCamera };
|
if (AttachedService.IsCameraAvailable)
|
||||||
|
{
|
||||||
|
AttachedDto? selectImageFromCamera;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
selectImageFromCamera = await AttachedService.SelectImageFromCamera();
|
||||||
|
}
|
||||||
|
catch (Exception)
|
||||||
|
{
|
||||||
|
// Gia' registrato e inviato a Sentry dal servizio
|
||||||
|
Snackbar.Clear();
|
||||||
|
Snackbar.Add("Non è stato possibile scattare la foto, riprova", Severity.Error);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (selectImageFromCamera == null) return;
|
||||||
|
attachedList = [selectImageFromCamera];
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// Senza fotocamera "Aggiungi una foto" non avrebbe altra strada:
|
||||||
|
// si passa alla galleria invece di lasciare il rilevatore fermo.
|
||||||
|
Snackbar.Clear();
|
||||||
|
Snackbar.Add("Fotocamera non disponibile: scegli la foto dalla galleria", Severity.Warning);
|
||||||
|
|
||||||
|
attachedList = await AttachedService.SelectImageFromGallery();
|
||||||
|
if (attachedList is null || attachedList.Count == 0) return;
|
||||||
|
}
|
||||||
|
|
||||||
OnLoading = true;
|
OnLoading = true;
|
||||||
await InvokeAsync(StateHasChanged);
|
await InvokeAsync(StateHasChanged);
|
||||||
|
|||||||
@@ -4,6 +4,9 @@ namespace SteUp.Shared.Core.Interface.System;
|
|||||||
|
|
||||||
public interface IAttachedService
|
public interface IAttachedService
|
||||||
{
|
{
|
||||||
|
bool IsCameraAvailable { get; }
|
||||||
|
|
||||||
|
/// <summary>Null se l'utente annulla; lancia se lo scatto fallisce.</summary>
|
||||||
Task<AttachedDto?> SelectImageFromCamera();
|
Task<AttachedDto?> SelectImageFromCamera();
|
||||||
Task<List<AttachedDto>?> SelectImageFromGallery();
|
Task<List<AttachedDto>?> SelectImageFromGallery();
|
||||||
}
|
}
|
||||||
Reference in new issue
Block a user