*** 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 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