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