Loading cardinal-android/app/src/main/java/earth/maps/cardinal/data/sync/FavoritesLocalDataSource.kt +17 −7 Original line number Diff line number Diff line Loading @@ -23,7 +23,10 @@ import androidx.room.withTransaction import earth.maps.cardinal.data.room.AppDatabase import earth.maps.cardinal.data.room.ItemType import earth.maps.cardinal.data.room.ListItem import earth.maps.cardinal.data.room.ListItemDao import earth.maps.cardinal.data.room.SavedList import earth.maps.cardinal.data.room.SavedListDao import earth.maps.cardinal.data.room.SavedPlaceDao import earth.maps.cardinal.domain.sync.MurenaSyncError import earth.maps.cardinal.domain.sync.Result import kotlinx.coroutines.Dispatchers Loading @@ -32,12 +35,19 @@ import javax.inject.Inject import javax.inject.Singleton @Singleton class FavoritesLocalDataSource @Inject constructor( private val database: AppDatabase class FavoritesLocalDataSource internal constructor( private val database: AppDatabase, private val savedPlaceDao: SavedPlaceDao, private val savedListDao: SavedListDao, private val listItemDao: ListItemDao ) { private val savedPlaceDao = database.savedPlaceDao() private val savedListDao = database.savedListDao() private val listItemDao = database.listItemDao() @Inject constructor(database: AppDatabase) : this( database = database, savedPlaceDao = database.savedPlaceDao(), savedListDao = database.savedListDao(), listItemDao = database.listItemDao() ) suspend fun exportFavorites(): Result<FavoritesSyncPayloadDto, MurenaSyncError> = withContext(Dispatchers.IO) { Loading Loading @@ -74,7 +84,7 @@ class FavoritesLocalDataSource @Inject constructor( private suspend fun mergeLists(payload: FavoritesSyncPayloadDto): SavedList { val rootList = ensureRootList(payload) val existingLists = runCatching { savedListDao.getAllLists() }.getOrDefault(emptyList()) val existingLists = savedListDao.getAllLists() .associateBy { it.id } payload.lists.forEach { remote -> if (remote.isRoot && remote.id != rootList.id) return@forEach Loading @@ -87,7 +97,7 @@ class FavoritesLocalDataSource @Inject constructor( } private suspend fun mergePlaces(payload: FavoritesSyncPayloadDto) { val existingPlaces = runCatching { savedPlaceDao.getAllPlaces() }.getOrDefault(emptyList()) val existingPlaces = savedPlaceDao.getAllPlaces() .associateBy { it.id } payload.places.forEach { remote -> val existing = existingPlaces[remote.id] Loading Loading
cardinal-android/app/src/main/java/earth/maps/cardinal/data/sync/FavoritesLocalDataSource.kt +17 −7 Original line number Diff line number Diff line Loading @@ -23,7 +23,10 @@ import androidx.room.withTransaction import earth.maps.cardinal.data.room.AppDatabase import earth.maps.cardinal.data.room.ItemType import earth.maps.cardinal.data.room.ListItem import earth.maps.cardinal.data.room.ListItemDao import earth.maps.cardinal.data.room.SavedList import earth.maps.cardinal.data.room.SavedListDao import earth.maps.cardinal.data.room.SavedPlaceDao import earth.maps.cardinal.domain.sync.MurenaSyncError import earth.maps.cardinal.domain.sync.Result import kotlinx.coroutines.Dispatchers Loading @@ -32,12 +35,19 @@ import javax.inject.Inject import javax.inject.Singleton @Singleton class FavoritesLocalDataSource @Inject constructor( private val database: AppDatabase class FavoritesLocalDataSource internal constructor( private val database: AppDatabase, private val savedPlaceDao: SavedPlaceDao, private val savedListDao: SavedListDao, private val listItemDao: ListItemDao ) { private val savedPlaceDao = database.savedPlaceDao() private val savedListDao = database.savedListDao() private val listItemDao = database.listItemDao() @Inject constructor(database: AppDatabase) : this( database = database, savedPlaceDao = database.savedPlaceDao(), savedListDao = database.savedListDao(), listItemDao = database.listItemDao() ) suspend fun exportFavorites(): Result<FavoritesSyncPayloadDto, MurenaSyncError> = withContext(Dispatchers.IO) { Loading Loading @@ -74,7 +84,7 @@ class FavoritesLocalDataSource @Inject constructor( private suspend fun mergeLists(payload: FavoritesSyncPayloadDto): SavedList { val rootList = ensureRootList(payload) val existingLists = runCatching { savedListDao.getAllLists() }.getOrDefault(emptyList()) val existingLists = savedListDao.getAllLists() .associateBy { it.id } payload.lists.forEach { remote -> if (remote.isRoot && remote.id != rootList.id) return@forEach Loading @@ -87,7 +97,7 @@ class FavoritesLocalDataSource @Inject constructor( } private suspend fun mergePlaces(payload: FavoritesSyncPayloadDto) { val existingPlaces = runCatching { savedPlaceDao.getAllPlaces() }.getOrDefault(emptyList()) val existingPlaces = savedPlaceDao.getAllPlaces() .associateBy { it.id } payload.places.forEach { remote -> val existing = existingPlaces[remote.id] Loading