mergeImportedPlaces static method
Implementation
static Future<bool> mergeImportedPlaces(
List<Place> imported,
BuildContext context,
Widget returnWidget, {
void Function(int, int)? onProgress,
}) async {
try {
if (!authStateNotifier.value) return false;
final existing = await fetchPodPlaces();
final ids = existing.map((p) => p.id).toSet();
final newPlaces = imported.where((p) => !ids.contains(p.id)).toList();
if (newPlaces.isEmpty && imported.isNotEmpty) return true;
final withAddr = <Place>[];
for (int i = 0; i < newPlaces.length; i++) {
final p = newPlaces[i];
onProgress?.call(i + 1, newPlaces.length);
final addr = await GeocodingService.getAddress(p.lat, p.lng);
withAddr.add(
Place(
id: p.id,
lat: p.lat,
lng: p.lng,
note: p.note,
timestamp: p.timestamp,
address: addr,
isLocal: false,
),
);
}
final merged = [...withAddr, ...existing];
// Write main file first.
final success = await writePlacesJsonFile(
jsonEncode(merged.map((p) => p.toJson()).toList()),
);
if (success) {
// Write individual files for new places in parallel.
await Future.wait(withAddr.map((p) => writeIndividualPlaceFile(p)));
await clearCache();
placesChangeNotifier.value++;
// Invalidate directory cache and notify file browser.
PodDirectoryService.invalidateCache('data/places');
PodDirectoryService.notifyChange();
}
return success;
} catch (_) {
return false;
}
}