diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/implementation/RealmUserLocalRepository.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/implementation/RealmUserLocalRepository.kt index dc7364497..44248b708 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/implementation/RealmUserLocalRepository.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/implementation/RealmUserLocalRepository.kt @@ -5,6 +5,8 @@ import com.habitrpg.android.habitica.models.* import com.habitrpg.android.habitica.models.social.ChallengeMembership import com.habitrpg.android.habitica.models.social.ChatMessage import com.habitrpg.android.habitica.models.social.Group +import com.habitrpg.android.habitica.models.user.OwnedMount +import com.habitrpg.android.habitica.models.user.OwnedPet import com.habitrpg.android.habitica.models.user.User import io.reactivex.Flowable import io.realm.Realm @@ -70,6 +72,8 @@ class RealmUserLocalRepository(realm: Realm) : RealmBaseLocalRepository(realm), if (user.challenges != null) { removeOldChallenges(user.id ?: "", user.challenges ?: emptyList()) } + removeOldPets(user.id ?: "", user.items?.pets ?: emptyList()) + removeOldMounts(user.id ?: "", user.items?.mounts ?: emptyList()) } override fun saveMessages(messages: List) { @@ -98,6 +102,26 @@ class RealmUserLocalRepository(realm: Realm) : RealmBaseLocalRepository(realm), } } + private fun removeOldPets(userID: String, onlinePets: List) { + val pets = realm.where(OwnedPet::class.java).equalTo("userID", userID).findAll().createSnapshot() + val petsToDelete = pets.filterNot { onlinePets.contains(it) } + realm.executeTransaction { + petsToDelete.forEach { + it.deleteFromRealm() + } + } + } + + private fun removeOldMounts(userID: String, onlineMounts: List) { + val mount = realm.where(OwnedMount::class.java).equalTo("userID", userID).findAll().createSnapshot() + val mountsToDelete = mount.filterNot { onlineMounts.contains(it) } + realm.executeTransaction { + mountsToDelete.forEach { + it.deleteFromRealm() + } + } + } + override fun getSkills(user: User): Flowable> { val habitClass = if (user.preferences?.disableClasses == true) "none" else user.stats?.habitClass return realm.where(Skill::class.java)