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

136 lines
3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

*** in lib/model/source/album.dart
Future<void> 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<void> 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