diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/ChallengeRepositoryImpl.java b/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/ChallengeRepositoryImpl.java index 238f0c8e1..adeb788da 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/ChallengeRepositoryImpl.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/ChallengeRepositoryImpl.java @@ -120,7 +120,7 @@ public class ChallengeRepositoryImpl extends BaseRepositoryImpl> retrieveChallenges(User user) { return apiClient.getUserChallenges() - .doOnNext(localRepository::save); + .doOnNext(localRepository::saveChallenges); } @Override diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/ChallengeLocalRepository.java b/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/ChallengeLocalRepository.java index cb2a85752..31a9c00ae 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/ChallengeLocalRepository.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/ChallengeLocalRepository.java @@ -20,4 +20,6 @@ public interface ChallengeLocalRepository extends BaseLocalRepository { Observable> getUserChallenges(String userId); void setParticipating(Challenge challenge, boolean isParticipating); + + void saveChallenges(List challenges); } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/implementation/RealmChallengeLocalRepository.java b/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/implementation/RealmChallengeLocalRepository.java index 2aa11dcf1..6a77660e7 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/implementation/RealmChallengeLocalRepository.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/implementation/RealmChallengeLocalRepository.java @@ -2,12 +2,12 @@ package com.habitrpg.android.habitica.data.local.implementation; import com.habitrpg.android.habitica.data.local.ChallengeLocalRepository; import com.habitrpg.android.habitica.models.social.Challenge; -import com.habitrpg.android.habitica.models.social.Group; import com.habitrpg.android.habitica.models.tasks.Task; -import com.habitrpg.android.habitica.models.user.User; +import java.util.ArrayList; import java.util.List; +import io.realm.OrderedRealmCollectionSnapshot; import io.realm.Realm; import io.realm.RealmResults; import io.realm.Sort; @@ -57,4 +57,21 @@ public class RealmChallengeLocalRepository extends RealmBaseLocalRepository impl public void setParticipating(Challenge challenge, boolean isParticipating) { realm.executeTransaction(realm1 -> challenge.isParticipating = isParticipating); } + + @Override + public void saveChallenges(List onlineChallenges) { + OrderedRealmCollectionSnapshot localChallenges = realm.where(Challenge.class).findAll().createSnapshot(); + List challengesToDelete = new ArrayList<>(); + for (Challenge localTask : localChallenges) { + if (!onlineChallenges.contains(localTask)) { + challengesToDelete.add(localTask); + } + } + realm.executeTransaction(realm1 -> { + for (Challenge localTask : challengesToDelete) { + localTask.deleteFromRealm(); + } + }); + realm.executeTransaction(realm1 -> realm1.insertOrUpdate(onlineChallenges)); + } }