Commit Graph
12 Commits
Author SHA1 Message Date
MarcoEandClaude Opus 5.5 c4c624667d Permette di eliminare le foto di una scheda anche dopo il salvataggio
Finora la foto si poteva togliere solo prima di salvare la scheda.

- La X compare su tutte le foto (non in sola lettura, non mentre la foto e'
  ancora in elaborazione). L'eliminazione avviene al salvataggio: uscendo
  senza salvare le foto restano.
- Una foto gia' inviata si toglie prima dal server (nuovo endpoint
  steup/removeAttachment), poi dal dispositivo e da Scheda.ImageNames. Senza
  rete la X avvisa e non la toglie; se il server non conferma al salvataggio
  la foto resta ovunque e compare un avviso.
- Una foto salvata ma non ancora inviata si elimina dal dispositivo (con la
  rete si prova anche a toglierla dal server, senza bloccare).
- Togliere una foto salvata non la cancellava mai: il flag ToRemove finiva
  su un elemento appena rimosso dall'elenco. Ora le foto tolte stanno in una
  lista a parte fino al salvataggio; ToRemove e' stato eliminato.
- FileManager.GetInspectionFiles: le foto in /toUpload si filtravano per
  nome, ma ImageNames contiene il percorso completo, quindi quelle salvate
  senza rete non ricomparivano mai riaprendo la scheda. Ora si accetta sia il
  percorso sia il nome, e il DTO porta anche i byte del file per l'invio.

Richiede i Servizi con steup/removeAttachment.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-04 13:39:31 +01:00
MarcoEandClaude Opus 5.5 885b3cc6b6 Avvisa quando manca il permesso della fotocamera
Con il permesso negato "Aggiungi una foto" non faceva nulla: il servizio
restituiva null come per un annullamento. Dopo un rifiuto definitivo
Android non ripropone la richiesta, quindi il rilevatore restava bloccato
senza capire perche'.

- AttachedService: la richiesta dei permessi diventa RequestCameraPermissions,
  usata anche da SelectImageFromCamera; OpenAppSettings apre le impostazioni
  dell'app.
- ModalFormScheda e ModalAddAttached: chiedono i permessi prima di scattare
  e, se negati, mostrano un avviso con l'azione "Impostazioni".

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-21 08:49:34 +02:00
MarcoEandClaude Opus 5.5 7e1492d118 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>
2026-10-21 08:45:57 +02:00
MarcoEandClaude Opus 5.5 9799f6b0c7 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>
2026-09-28 12:10:19 +02:00
MarcoEandClaude Opus 5 3a9174f6fc Raddrizza le foto applicando l'orientamento EXIF
La fotocamera di sistema non ruota lo scatto: salva i pixel come li legge
il sensore e annota la rotazione in EXIF. SkiaSharp (SKBitmap.Decode)
ignora quel tag, quindi le foto scattate ruotate finivano storte nelle
miniature e venivano inviate cosi' al server.

- ImageOrientation: applica l'orientamento ai pixel e ricodifica senza tag
  residui, mantenendo il formato di partenza. Immagine gia' dritta: nessuna
  ricodifica, per non perdere qualita' inutilmente. In caso di errore
  restituisce i byte originali, meglio una foto storta che nessuna foto.
- UtilityFile.ConvertToDto: normalizza li', unico punto di passaggio di
  fotocamera e galleria, cosi' miniature, salvataggio locale e upload
  lavorano su pixel gia' dritti. Corretto anche DimensionBytes.
- ImageThumb: applica l'orientamento anche in fase di miniatura, per
  raddrizzare le foto gia' presenti sul dispositivo.

Nessun ritratto forzato: costringere una foto orizzontale in verticale
vorrebbe dire ruotare il contenuto o ritagliarlo, e queste foto sono prove
di ispezione.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-17 10:32:41 +02:00
MarcoE 21ee5137b0 Creato metodo per la rimozione delle ispezioni più vecchie di 60 giorni 2026-03-04 12:08:57 +01:00
MarcoE 2d938fb210 Fix gestione allegati e creato metodo di esportazione log 2026-03-04 11:51:42 +01:00
MarcoE ab9578a45f Gestiti salvataggi rest 2026-03-02 10:50:34 +01:00
MarcoE c7fb4a28a4 Gestite immagini allegate 2026-02-24 11:33:36 +01:00
MarcoE b39b7ba751 Gestiti allegati nel form 2026-02-20 15:29:32 +01:00
MarcoE 544c9e8237 Gestiti allegati da galleria e fotocamera e aggiunto sentry 2026-02-17 10:23:46 +01:00
MarcoE ecafebae7f Prima configurazione e struttura 2026-02-04 17:31:00 +01:00