# Richieste di Elena - Wizard foto / leNostre

_File di passaggio consegne fra le chat (MastroLindo e gli altri Claude) e Vitti.
In ASCII puro come da [B200](VRP_B200_architettura.md) sez. 1.7.
Ultimo aggiornamento: 2026-08-05 (mattina)_

---

## 1. Come funziona il giro oggi

**Nextcloud = transito, leNostre = archivio.**

- Le foto arrivano su Nextcloud dai telefoni (`vitti` -> Xiaomi, `lella` -> iPhone)
  in `Photos/AAAA/MM/GG`.
- Da PC si caricano dal browser (`cloud.casarosini.duckdns.org`), **col pulsante `+` ->
  Carica file**: in Safari il drag&drop fallisce con `NSPOSIXErrorDomain:1` (il Mac non
  da' a Safari il permesso di leggere il file trascinato).
- Il Wizard (`/srv/http/lab/public/wiz_foto/nextcloud_import.php`) **copia** in leNostre,
  non sposta: i doppioni su Nextcloud sono normali e vanno puliti a mano.
- La cartella-giorno su Nextcloud **non** decide la destinazione: conta l'EXIF, poi
  (per i filmati) ffprobe, poi il nome file, poi l'mtime se spuntato. Senza data ->
  `ANNO/ANNO_da_archiviare/indecise/nextcloud_<acct>/`.
- **Verifica "posso cancellare da Nextcloud?"**: rilanciare l'import del giorno con la
  spunta *anteprima*. Tutto `SKIPPED` (doppione by size) -> e' gia' in leNostre, si puo'
  cancellare. Ancora `IMPORTED` -> manca roba.
- leNostre e' nel backup notturno su NAS (`vv_backup_sacro.sh`, 03:10). Nextcloud non e'
  un archivio (quota 40 GB a testa).

---

## 2. FATTA (02/08/2026) - il Wizard gestisce i filmati

> Implementata e collaudata con Vitti ed Elena la sera del 02/08. Dettaglio tecnico e
> collaudo nel [diario di coding](VRP_B300_diario_coding.md), voci **2026-08-02** e
> **2026-08-02 (2)**.

In breve: i filmati si importano da Nextcloud (datati con `ffprobe`, in mancanza dal nome
del file), finiscono nella cartella-giorno **insieme alle foto**, e nel Gestore si vedono
come mattonelle col fotogramma e il bollino play (il clic apre il filmato). Le clip Live
Photo dell'iPhone vengono scartate.

### Il problema com'era

Il Wizard **non importava i video** (`nextcloud_import.php` prendeva solo
`vrw_is_jpeg()`/`vrw_is_heic()`) e il Gestore **non li mostrava** (`vrw_provider.php`
elencava solo `jpg/jpeg/png`). Conseguenze misurate il 02/08:

- leNostre ha **424 filmati** (`.mov`, `.mp4`, `.mpg`, `.avi`), ma per anno:
  2023 -> 79, 2024 -> 130, **2025 -> 3, 2026 -> 0**.
- Nel 2023/24 Elena li metteva **a mano** in `ANNO/9999 Filmati` (209 file, nomi
  originali `IMG_*.mov`). Da quando il giro passa dal Wizard, non entravano piu'.
- I video gia' in archivio erano **invisibili nel Gestore**.
- **Rischio concreto:** pulendo Nextcloud dopo l'import si cancellavano filmati mai
  archiviati. Successo davvero: 3 filmati recuperati a mano dal cestino di Nextcloud.

### La decisione presa con Elena

> **I filmati vanno nella cartella-giorno insieme alle foto**, non in `9999 Filmati`.

Motivo: quando sposta le foto di un evento nella cartella dell'evento, il filmato la
segue e resta legato al momento giusto (ed e' come stanno i 424 filmati gia' in archivio).

### Com'e' stata fatta (5 file)

| File | Cosa |
|---|---|
| `platform/lib/vrw.php` | `VRW_VIDEO_EXT`, `VRW_FFPROBE/FFMPEG` a path assoluto; `vrw_is_video()`, `vrw_video_date()` (ffprobe -> fuso locale), `vrw_is_live_photo()`, `vrw_count_videos()`; `vrw_ingest()` consapevole dell'estensione; `vrw_filename_date()` legge l'anno a 2 cifre |
| `wiz_foto/nextcloud_import.php` | scansiona e importa i filmati, scarta le clip Live Photo, badge col numero di filmati per giorno |
| `wiz_foto/vrw_provider.php` | il Gestore elenca i video (fotogramma + bollino play + `href`) e conta foto e filmati separatamente |
| `wiz_foto/vrw_vthumb.php` **(nuovo)** | cappello che estrae il fotogramma con ffmpeg, gemello di `nc_thumb.php` e `share/thumb.php`; cache in `VRP_SHARED_DIR/vrw_vthumb`, FUORI da leNostre |
| `public/js/vrp-explorer.js` | **unico ritocco JS, additivo**: usa `res.countLabel` se il servizio lo manda, altrimenti conta come prima -> lo share non cambia |

Backup di tutti i file toccati con la convenzione `.bak_AAAAMMGG_HHMMSS_etichetta`
(`_prevideo` e `_precontafilmati`).

### Le tre scelte non ovvie

1. **Live Photo riconosciute dal gemello, non dalla dimensione.** I `.mov` da 0,4-6 MB
   dell'iPhone sono il pezzo-video di una foto: si scartano se accanto c'e' un file con
   lo stesso stem (`X.mov` + `X.jpg`). Una soglia di MB sbaglierebbe sui filmati brevi veri.
2. **Niente `full` sui video nel provider.** Il lightbox dell'explorer e' un `<img>`: dare
   `full` a un video lo romperebbe. Senza, il video resta fuori dall'array immagini e il
   clic cade sul ramo `it.href` -> si apre nel lettore del browser.
3. **Il conteggio dei filmati si fa sul filesystem**, non dall'indice: `lenostre.foto` e'
   l'indice delle FOTO (GPS e ricerca) e i video non ci devono entrare. Costo misurato:
   0 ms per una cartella-giorno, 12 ms per un anno, 225 ms per l'intero archivio.

---

## 2bis. FATTA (05/08/2026) - il bottone "Pulisci su Nextcloud"

> Codice fatto e collaudato da riga di comando. **Manca il collaudo di Elena**
> (pomeriggio del 05/08). Progetto: [VRW_pulizia_nextcloud.md](VRW_pulizia_nextcloud.md);
> dettaglio tecnico nel [diario di coding](VRP_B300_diario_coding.md), voce **2026-08-05**.

Sulla riga di ogni giorno c'e' un'icona 🧹 (la vedono solo `admin` ed `editor`;
l'ospite non ce l'ha proprio). Premendola **non cancella niente**: ricontrolla il
giorno file per file, e dice in parole sue quanti sono gia' in leNostre e quali
restano, col perche'. Solo il bottone verde del pannello cestina davvero, e i
file finiscono nel **cestino di Nextcloud** (da cui si ripristinano dal browser).

Il giro non passa mai dal filesystem: si chiede a Nextcloud di cancellare, con
una DELETE via WebDAV. Ogni account usa la propria password-applicazione, quindi
nel registro di Nextcloud si vede chi ha cancellato.

**Il punto da ricordare:** il ricontrollo cerca in **tutto** l'archivio, non
nella cartella dove l'import aveva messo la foto - se no, appena Elena sposta le
foto nella cartella dell'evento, il bottone non troverebbe piu' niente da pulire.

---

## 3. Stato al 2026-08-02 (sera)

**Fatto**

- Elena ha importato le sue foto di lavoro e ripulito Nextcloud per l'account `lella`.
- Recuperati a mano 2 filmati che non erano mai arrivati in archivio e che su Nextcloud
  erano solo nel cestino:
  - `/srv/http/leNostre/2026/9999 Filmati/26-03-11 15-37-37 9907.mov` (50 MB)
  - `/srv/http/leNostre/2025/9999 Filmati/25-09-06 08-39-24 8829.mov` (17 MB)
  (il terzo, il `.mp4` del 6/2, e' stato tolto da li' apposta e importato dal Wizard
  durante il collaudo: e' in `2026/2026_da_archiviare/0206/20260206-112343.mp4`)
- Modifica ai filmati **fatta e collaudata da Elena nel browser**: import OK, filmato
  visibile nel Gestore col fotogramma. Difetto trovato da lei e corretto: una cartella
  col solo filmato diceva "0 foto" (il numero veniva dall'indice foto).

**Da fare, nell'ordine** _(aggiornato 05/08)_

1. Ri-collaudo di Elena sui conteggi corretti ("1 filmato" dentro la cartella,
   "1 pellicola" sulla mattonella, "8 foto" invariato dove non ci sono video).
2. ✅ I **25 filmati** del cestino di `vitti`: controllati il 05/08 (erano 18
   distinti, e **nessuno** era in archivio) e **rimessi su Nextcloud**. Vedi
   [VRW_pulizia_nextcloud.md](VRW_pulizia_nextcloud.md) sez. 10.
3. ⏳ **Importarli dal Wizard**: 11 cartelle-giorno nuove per l'account `vitti`
   (dal 2026/04/26 al 2026/07/05; il 28 giugno da solo ne ha 6, 2,6 GB).
4. ⏳ Collaudo di Elena del bottone 🧹, su **un giorno solo** dell'account `lella`.

**Da non fare intanto**

- **Non svuotare i cestini di Nextcloud** (ne' `vitti` ne' `lella`): finche' i
  filmati ripristinati non sono stati importati in leNostre, il cestino e'
  ancora l'unica altra copia.

**Aperto / da decidere (Vitti)**

- **Baco preesistente, NON toccato:** `vrp_asset_url()` (in `platform/lib/vrp_util.php`)
  cerca la mtime in `VRP_PLATFORM_DIR . '/' . $rel` = `lab/platform/public/js/...`, che non
  esiste (i file stanno in `lab/public/`). `@filemtime` fallisce sempre e ripiega su
  `time()`: l'URL cambia a ogni caricamento, quindi CSS/JS dell'esploratore non vengono
  **mai** messi in cache dal browser. Correzione = una riga (`dirname(VRP_PLATFORM_DIR)`),
  ma attiva la cache dove finora non c'era mai stata -> decisione di Vitti.
- `mpg` e `avi` vecchi: ffprobe spesso non ha `creation_time`, quindi finiranno per nome
  o per mtime. Da vedere quando si toccheranno gli anni vecchi.
- Se un domani si vorranno i **video cercabili** (o col pallino GPS), e' l'indice
  `lenostre.foto` che va esteso - oggi filtra `jpe?g|png|heic` in `lenostre_index.php`.

---

## 4. Cose utili sapute per esperienza

- Nextcloud rifiuta di ripristinare da solo il `.mov` di una Live Photo:
  `Cannot restore the video part of a live photo`. Va ripristinata la **foto gemella**,
  o la **cartella-giorno intera** dal cestino.
- Ripristinando un file la cui cartella originale e' stata cancellata, Nextcloud lo
  rimette nella **radice** dei file dell'utente, non al suo posto.
- Le cartelle si cancellano solo dall'app **File**, non dall'app **Foto** (in Foto le
  cartelle non esistono).
- Il **caricamento automatico e' a senso unico** (telefono -> server): cancellare su
  Nextcloud non tocca il rullino, e l'app non ricarica cio' che ha gia' caricato. Si
  propagherebbe solo con i file "disponibili offline" o col client desktop
  (sincronizzazione vera a due vie). Da controllare sul telefono di vitti prima della sua
  pulizia: l'opzione Android "elimina l'originale dopo il caricamento" - se attiva,
  Nextcloud e' l'unica copia fino all'import.
- Tutto il wiz risponde **302 a curl anonimo**: e' la guardia di login della piattaforma,
  non un guasto. Per collaudare le pagine serve una sessione; la logica si prova da CLI
  facendo `require` di `platform/boot/3_2_1_Go.php`.
- **Con Elena:** passi piccoli, niente gergo, e avvisarla quando si sta solo leggendo del
  codice - le richieste di conferma dei tool la mettono in difficolta'. Le sue
  segnalazioni sono buone: quella dei conteggi ha scoperto un numero sbagliato, non una
  scritta sbagliata.
