Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 681c1cc7 authored by mitulsheth's avatar mitulsheth
Browse files

feat: Murena Workspace Login Part 1 of 8

parent a50c974a
Loading
Loading
Loading
Loading
Loading
+17 −7
Original line number Diff line number Diff line
@@ -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
@@ -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) {
@@ -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
@@ -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]