mirror of
https://github.com/sudoxnym/habitica-android.git
synced 2026-05-23 22:27:15 +00:00
Remove old challenges from local db. Fixes #834
This commit is contained in:
parent
256518a9c7
commit
176cc7d0ee
3 changed files with 22 additions and 3 deletions
|
|
@ -120,7 +120,7 @@ public class ChallengeRepositoryImpl extends BaseRepositoryImpl<ChallengeLocalRe
|
|||
@Override
|
||||
public Observable<List<Challenge>> retrieveChallenges(User user) {
|
||||
return apiClient.getUserChallenges()
|
||||
.doOnNext(localRepository::save);
|
||||
.doOnNext(localRepository::saveChallenges);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
|||
|
|
@ -20,4 +20,6 @@ public interface ChallengeLocalRepository extends BaseLocalRepository {
|
|||
Observable<RealmResults<Challenge>> getUserChallenges(String userId);
|
||||
|
||||
void setParticipating(Challenge challenge, boolean isParticipating);
|
||||
|
||||
void saveChallenges(List<Challenge> challenges);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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<Challenge> onlineChallenges) {
|
||||
OrderedRealmCollectionSnapshot<Challenge> localChallenges = realm.where(Challenge.class).findAll().createSnapshot();
|
||||
List<Challenge> 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));
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue