Afzal Najam
08/13/2020, 3:56 AMgildor
08/13/2020, 3:59 AM.map {
it.id to it
}.toMap()
can be replaced with
.associateBy { it.id }
Also it more efficientgildor
08/13/2020, 4:01 AMgildor
08/13/2020, 4:02 AMnewLocalNotes[id]?.let { localNote ->
...
} ?: remoteNote
gildor
08/13/2020, 4:03 AMval localNote = newLocalNotes[id] ?: return@map remoteNote\
gildor
08/13/2020, 4:05 AMgildor
08/13/2020, 4:10 AMfun findUpdatedNotes(
allLocalNotes: List<Note>,
allRemoteNotes: List<Note>
): List<Note> {
val newLocalNotes = allLocalNotes.minus(allRemoteNotes).associateBy(Note::id)
val newRemoteNotes = allRemoteNotes.minus(allLocalNotes).associateBy(Note::id)
return newRemoteNotes.map { (id, remoteNote) ->
val localNote = newLocalNotes[id]
when {
localNote == null -> remoteNote
remoteNote.creationId == localNote.creationId -> {
if (remoteNote.updatedAt.isAfter(localNote.updatedAt)) {
remoteNote
} else {
localNote
}
}
else -> remoteNote.copy(id = 0)
}
}.sortedByDescending {
// we add copied notes at the end to avoid auto-incremented ID
// from being the same as later non-conflicting notes
it.id
}
}
Afzal Najam
08/13/2020, 4:11 AMgildor
08/13/2020, 4:15 AMnewestNote(note1, note2)
So function would be even more readableAfzal Najam
08/13/2020, 4:19 AMgildor
08/13/2020, 4:19 AMgildor
08/13/2020, 4:19 AMAfzal Najam
08/13/2020, 4:21 AMgildor
08/13/2020, 4:27 AMreturn newRemoteNotes.map { remoteNote ->
val localNote = newLocalNotes[remoteNote.id]
gildor
08/13/2020, 4:27 AMAfzal Najam
08/13/2020, 4:31 AMasad.awadia
08/17/2020, 7:06 PMAfzal Najam
08/18/2020, 4:42 AMfindUpdatedNotes
function. Still contending with whether to keep a separate table in room to track deletions or just soft-delete notes. (It's the former at the moment)