mirror of
https://github.com/sudoxnym/habitica-android.git
synced 2026-07-13 17:51:57 +00:00
Correctly delete old local data
This commit is contained in:
parent
fead28b8a3
commit
0091a50d59
8 changed files with 82 additions and 12 deletions
|
|
@ -51,6 +51,22 @@ public class RealmTaskLocalRepository extends RealmBaseLocalRepository implement
|
|||
}
|
||||
if (userId != null) {
|
||||
removeOldTasks(realm1, userId, sortedTasks);
|
||||
|
||||
List<ChecklistItem> allChecklistItems = new ArrayList<>();
|
||||
for (Task t : sortedTasks) {
|
||||
if (t.checklist != null) {
|
||||
allChecklistItems.addAll(t.checklist);
|
||||
}
|
||||
}
|
||||
removeOldChecklists(realm1, allChecklistItems);
|
||||
|
||||
List<RemindersItem> allReminders = new ArrayList<>();
|
||||
for (Task t : sortedTasks) {
|
||||
if (t.getReminders() != null) {
|
||||
allReminders.addAll(t.getReminders());
|
||||
}
|
||||
}
|
||||
removeOldReminders(realm1, allReminders);
|
||||
}
|
||||
|
||||
realm1.insertOrUpdate(sortedTasks);
|
||||
|
|
@ -77,8 +93,8 @@ public class RealmTaskLocalRepository extends RealmBaseLocalRepository implement
|
|||
realm.executeTransaction(realm1 -> realm1.insertOrUpdate(task));
|
||||
}
|
||||
|
||||
private void removeOldTasks(Realm realm1, String userID, List<Task> onlineTaskList) {
|
||||
RealmResults<Task> localTasks = realm1.where(Task.class).equalTo("userId", userID).findAll();
|
||||
private void removeOldTasks(Realm realm, String userID, List<Task> onlineTaskList) {
|
||||
RealmResults<Task> localTasks = realm.where(Task.class).equalTo("userId", userID).findAll();
|
||||
for (Task localTask : localTasks) {
|
||||
if (!onlineTaskList.contains(localTask)) {
|
||||
for (ChecklistItem item : localTask.checklist) {
|
||||
|
|
@ -92,7 +108,23 @@ public class RealmTaskLocalRepository extends RealmBaseLocalRepository implement
|
|||
}
|
||||
}
|
||||
|
||||
private void removeOldChecklists(Realm realm, List<ChecklistItem> onlineItems) {
|
||||
RealmResults<ChecklistItem> localItems = realm.where(ChecklistItem.class).findAll();
|
||||
for (ChecklistItem localItem : localItems) {
|
||||
if (!onlineItems.contains(localItem)) {
|
||||
localItem.deleteFromRealm();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void removeOldReminders(Realm realm, List<RemindersItem> onlineReminders) {
|
||||
RealmResults<RemindersItem> localReminders = realm.where(RemindersItem.class).findAll();
|
||||
for (RemindersItem localItem : localReminders) {
|
||||
if (!onlineReminders.contains(localItem)) {
|
||||
localItem.deleteFromRealm();
|
||||
}
|
||||
}
|
||||
}
|
||||
@Override
|
||||
public void deleteTask(String taskID) {
|
||||
Task task = realm.where(Task.class).equalTo("id", taskID).findFirstAsync();
|
||||
|
|
@ -100,7 +132,6 @@ public class RealmTaskLocalRepository extends RealmBaseLocalRepository implement
|
|||
}
|
||||
|
||||
@Override
|
||||
|
||||
public Observable<Task> getTask(String taskId) {
|
||||
return realm.where(Task.class).equalTo("id", taskId).findFirstAsync().asObservable()
|
||||
.filter(realmObject -> realmObject.isLoaded())
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@ package com.habitrpg.android.habitica.data.local.implementation;
|
|||
|
||||
import com.habitrpg.android.habitica.data.local.UserLocalRepository;
|
||||
import com.habitrpg.android.habitica.models.Skill;
|
||||
import com.habitrpg.android.habitica.models.Tag;
|
||||
import com.habitrpg.android.habitica.models.TutorialStep;
|
||||
import com.habitrpg.android.habitica.models.user.SpecialItems;
|
||||
import com.habitrpg.android.habitica.models.user.User;
|
||||
|
|
@ -32,7 +33,23 @@ public class RealmUserLocalRepository extends RealmBaseLocalRepository implement
|
|||
|
||||
@Override
|
||||
public void saveUser(User user) {
|
||||
realm.executeTransaction(realm1 -> realm1.insertOrUpdate(user));
|
||||
realm.executeTransaction(realm1 -> {
|
||||
realm1.insertOrUpdate(user);
|
||||
|
||||
if (user.getTags() != null) {
|
||||
removeOldTags(user.getId(), user.getTags());
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private void removeOldTags(String userId, List<Tag> onlineTags) {
|
||||
RealmResults<Tag> tags = realm.where(Tag.class).equalTo("userId", userId).findAll();
|
||||
|
||||
for (Tag tag : tags) {
|
||||
if (!onlineTags.contains(tag)) {
|
||||
tag.deleteFromRealm();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
|||
|
|
@ -19,7 +19,7 @@ public class Tag extends RealmObject {
|
|||
@PrimaryKey
|
||||
public String id;
|
||||
|
||||
public User user;
|
||||
public String userId;
|
||||
public RealmList<Task> tasks;
|
||||
String name;
|
||||
boolean challenge;
|
||||
|
|
|
|||
|
|
@ -78,4 +78,12 @@ public class ChecklistItem extends RealmObject {
|
|||
public void setTask(Task task) {
|
||||
this.task = task;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object obj) {
|
||||
if (obj.getClass().equals(ChecklistItem.class)) {
|
||||
return this.id.equals(((ChecklistItem)obj).id);
|
||||
}
|
||||
return super.equals(obj);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -66,4 +66,12 @@ public class RemindersItem extends RealmObject {
|
|||
public void setType(String type) {
|
||||
this.type = type;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object obj) {
|
||||
if (obj.getClass().equals(RemindersItem.class)) {
|
||||
return this.id.equals(((RemindersItem)obj).id);
|
||||
}
|
||||
return super.equals(obj);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -141,7 +141,6 @@ public class PartyFragment extends BaseMainFragment {
|
|||
}
|
||||
}, RxErrorHandler.handleEmptyError());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
|||
|
|
@ -20,7 +20,11 @@ public class QuestDeserializer implements JsonDeserializer<Quest> {
|
|||
JsonObject obj = json.getAsJsonObject();
|
||||
Quest quest = new Quest();
|
||||
|
||||
quest.key = obj.get("key").getAsString();
|
||||
if (obj.has("key") && !obj.get("key").isJsonNull()) {
|
||||
quest.key = obj.get("key").getAsString();
|
||||
} else {
|
||||
return quest;
|
||||
}
|
||||
if (obj.has("active")) {
|
||||
quest.active = obj.get("active").getAsBoolean();
|
||||
}
|
||||
|
|
@ -32,7 +36,7 @@ public class QuestDeserializer implements JsonDeserializer<Quest> {
|
|||
}
|
||||
if (obj.has("progress")) {
|
||||
QuestProgress progress = new QuestProgress();
|
||||
progress.key = obj.get("key").getAsString();
|
||||
progress.key = quest.getKey();
|
||||
JsonObject progressObj = obj.get("progress").getAsJsonObject();
|
||||
if (progressObj.has("hp")) {
|
||||
progress.hp = progressObj.get("hp").getAsInt();
|
||||
|
|
|
|||
|
|
@ -32,6 +32,10 @@ public class UserDeserializer implements JsonDeserializer<User> {
|
|||
public User deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
|
||||
User user = new User();
|
||||
JsonObject obj = json.getAsJsonObject();
|
||||
if (obj.has("_id")) {
|
||||
user.setId(obj.get("_id").getAsString());
|
||||
}
|
||||
|
||||
if (obj.has("balance")) {
|
||||
user.setBalance(obj.get("balance").getAsDouble());
|
||||
}
|
||||
|
|
@ -68,6 +72,9 @@ public class UserDeserializer implements JsonDeserializer<User> {
|
|||
if (obj.has("tags")) {
|
||||
user.setTags(context.deserialize(obj.get("tags"), new TypeToken<RealmList<Tag>>() {
|
||||
}.getType()));
|
||||
for (Tag tag : user.getTags()) {
|
||||
tag.userId = user.getId();
|
||||
}
|
||||
}
|
||||
if (obj.has("tasksOrder")) {
|
||||
user.setTasksOrder(context.deserialize(obj.get("tasksOrder"), TasksOrder.class));
|
||||
|
|
@ -85,10 +92,6 @@ public class UserDeserializer implements JsonDeserializer<User> {
|
|||
}
|
||||
}
|
||||
|
||||
if (obj.has("_id")) {
|
||||
user.setId(obj.get("_id").getAsString());
|
||||
}
|
||||
|
||||
return user;
|
||||
}
|
||||
}
|
||||
Loading…
Reference in a new issue