// lib/remote/collection_source_remote_ext.dart // // Caricamento remoti dal DB in modalità safe. // // Importante: // - NON usa addEntries() // - NON reinserisce remoti nel DB // - NON spara EntryAddedEvent manuale // - ricarica anche metadata/address/trash dopo reloadEntriesFromDb() // per evitare che Paesi/Luoghi restino con count ma pagina vuota. import 'package:aves/model/source/collection_source.dart'; import 'package:aves/services/common/services.dart'; import 'package:flutter/foundation.dart'; import 'remote_origin.dart'; extension CollectionSourceRemoteExt on CollectionSource { Future appendRemoteEntriesFromDb() async { try { final remotiDb = await localMediaDb.loadEntries( origin: RemoteOrigin.value, ); final visibili = remotiDb.where((e) => !e.trashed).toSet(); debugPrint( '[remote-append] dbRemote=${remotiDb.length} ' 'visibleRemote=${visibili.length} ' 'remoteVisible=$remoteVisible', ); if (visibili.isEmpty) { debugPrint('[remote-append] nessun remoto visibile nel DB'); return; } // Il DB è già stato aggiornato dal fullSync/deltaSync. // Qui ricarichiamo la source in RAM. await reloadEntriesFromDb(); // Fondamentale: // reloadEntriesFromDb() ricarica le entries base, // ma non i metadata/address. // Senza questo, Paesi/Luoghi possono mostrare count // ma pagina vuota quando apri un Paese. await loadCatalogMetadata(); await loadAddresses(); await loadTrashDetails(); // Dopo reloadEntriesFromDb + metadata/address, usa le entry remote // attualmente presenti nella source, non quelle caricate prima dal DB. final remoteEntries = allEntries .where((e) => e.origin == RemoteOrigin.value && !e.trashed) .toSet(); // Se i remoti sono già visibili, aggiorniamo subito i filtri derivati. // Se invece siamo ancora in syncing, remoteVisible=false: // NON aggiorniamo qui Paesi/Luoghi/Tag, perché i remoti sarebbero esclusi. // Verranno aggiornati quando remoteVisible passa a true. if (remoteVisible) { updateDerivedFilters(remoteEntries); debugPrint( '[remote-append] derived filters updated immediately ' 'remoteVisible=$remoteVisible remotes=${remoteEntries.length}', ); } else { debugPrint( '[remote-append] derived filters skipped ' 'remoteVisible=$remoteVisible remotes=${remoteEntries.length}', ); } debugPrint( '[remote-append] reload + metadata done ' 'allEntries=${allEntries.length} ' 'visibleEntries=${visibleEntries.length} ' 'folderMap=${folderMap.length}', ); } catch (e, st) { debugPrint('[remote-append] errore: $e\n$st'); } } }