Aves_mio0.88/folders1.md
2026-10-03 12:51:15 +02:00

3 KiB
Raw Blame History

*** in lib/model/source/album.dart Future initFoldersCache() async { foldersCache = await loadFoldersFromDb(); }

Cosa fa davvero Chiama loadFoldersFromDb()

Carica tutte le righe della tabella folders

Le mette nella variabile globale del mixin:

dart late Map<String, FolderRow> foldersCache; Da quel momento in poi tutta la logica album usa solo foldersCache Questa mappa è la fonte unica di verità per gli album.

initFoldersCache() viene chiamata in CollectionSource

lib/model/source/collection_source.dart

dove abbiamo inserito:

dart await source.initFoldersCache();

entry.dart gestisce singole foto/video album.dart gestisce album e cartelle collection_source.dart gestisce la pipeline completa (scan, load, refresh)


*** in lib/model/source/collection_source.dart

  1. Avvio app → CollectionSource.init() Il tuo CollectionSource è il cuore della pipeline.

Durante l’inizializzazione, la sequenza è:

  • loadDates() chiama localMediaDb.loadDates() ottiene una mappa: entryId → catalogDateMillis la salva in _savedDates Questa mappa viene poi usata quando arrivano nuove entry.

  • initFoldersCache() Future initFoldersCache() async { foldersCache = await loadFoldersFromDb(); }

  • loadEntries() (locali)

  • appendRemoteEntries() (remoti)

  • updateDerivedFilters()

  • updateDirectories() in album e costruisce la lista album È il metodo che decide quali album mostrare: UI aggiornata

    • ricarica il DB
    • raggruppa per Local / Remote / User / Device
    • ordina i gruppi
    • ricostruisce _directories
    • notifica la UI

  • loadEntries() / addEntries() — gestione media Quando Aves trova nuove entry: addEntries(entries) in questo viene valutato se esiste già nel db se non esiste inserisce alla fine di addEntries viene chiamato addDirectories(albums: entries.map((e) => e.directory))

  • cleanEmptyAlbums() Quando un album non ha più entry visibili: elimina la riga dal DB rimuove da foldersCache aggiorna _directories

  • updateDerivedFilters() Ogni volta che cambiano entry: invalida summary aggiorna album aggiorna location aggiorna tag

      updateDirectories();
      updateLocations();
      updateTags();
    
  • appendRemoteEntries(): legge dal DB tutte le entry con origin = RemoteOrigin.value filtra quelle cestinate le passa a addEntries() addEntries() fa tutto il lavoro sporco: dedupe per URI dedupe per ID aggiorna _rawEntries aggiorna _entryById invalida filtri aggiorna album

notifica la UI APP START ↓ CollectionSource.init() ↓ loadDates() ↓ initFoldersCache() ← carica tabella folders ↓ loadEntries() ← carica entry locali ↓ appendRemoteEntries() ↓ updateDerivedFilters() ↓ updateDirectories() ← costruisce lista album da DB ↓ UI mostra album ↓ --- runtime --- ↓ addEntries() ← nuove foto/video ↓ addDirectories() ← (creazione album se debugCreateFoldersEnabled) ↓ updateDirectories() ↓ UI aggiornata