diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/data/TaskRepository.java b/Habitica/src/main/java/com/habitrpg/android/habitica/data/TaskRepository.java index 00e8a57d9..027a78206 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/data/TaskRepository.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/data/TaskRepository.java @@ -19,7 +19,7 @@ import rx.Observable; public interface TaskRepository extends BaseRepository { Observable> getTasks(String taskType, String userID); Observable> getTasks(String userId); - void saveTasks(TasksOrder order, TaskList tasks); + void saveTasks(String userId, TasksOrder order, TaskList tasks); Observable refreshTasks(TasksOrder tasksOrder); diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/TaskRepositoryImpl.java b/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/TaskRepositoryImpl.java index 4c7bba0bc..e298471b8 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/TaskRepositoryImpl.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/TaskRepositoryImpl.java @@ -47,14 +47,14 @@ public class TaskRepositoryImpl extends BaseRepositoryImpl } @Override - public void saveTasks(TasksOrder order, TaskList tasks) { - localRepository.saveTasks(order, tasks); + public void saveTasks(String userId, TasksOrder order, TaskList tasks) { + localRepository.saveTasks(userId, order, tasks); } @Override public Observable refreshTasks(TasksOrder tasksOrder) { return this.apiClient.getTasks() - .doOnNext(res -> this.localRepository.saveTasks(tasksOrder, res)); + .doOnNext(res -> this.localRepository.saveTasks(null, tasksOrder, res)); } @Override diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/UserRepositoryImpl.java b/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/UserRepositoryImpl.java index 8eb70212f..c00e732b0 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/UserRepositoryImpl.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/UserRepositoryImpl.java @@ -65,7 +65,7 @@ public class UserRepositoryImpl extends BaseRepositoryImpl lastSync = new Date(); return apiClient.retrieveUser(withTasks) .doOnNext(localRepository::saveUser) - .doOnNext(user -> taskRepository.saveTasks(user.getTasksOrder(), user.tasks)) + .doOnNext(user -> taskRepository.saveTasks(user.getId(), user.getTasksOrder(), user.tasks)) .flatMap(user -> { Calendar calendar = new GregorianCalendar(); TimeZone timeZone = calendar.getTimeZone(); diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/implementation/RealmTaskLocalRepository.java b/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/implementation/RealmTaskLocalRepository.java index 355f21278..df6dcae2e 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/implementation/RealmTaskLocalRepository.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/implementation/RealmTaskLocalRepository.java @@ -1,5 +1,7 @@ package com.habitrpg.android.habitica.data.local.implementation; +import android.support.annotation.Nullable; + import com.habitrpg.android.habitica.data.local.TaskLocalRepository; import com.habitrpg.android.habitica.models.tasks.ChecklistItem; import com.habitrpg.android.habitica.models.tasks.RemindersItem; @@ -35,7 +37,7 @@ public class RealmTaskLocalRepository extends RealmBaseLocalRepository implement } @Override - public void saveTasks(String userId, TasksOrder tasksOrder, TaskList tasks) { + public void saveTasks(@Nullable String userId, TasksOrder tasksOrder, TaskList tasks) { realm.executeTransactionAsync(realm1 -> { List sortedTasks = new ArrayList<>(); @@ -44,7 +46,9 @@ public class RealmTaskLocalRepository extends RealmBaseLocalRepository implement sortedTasks.addAll(sortTasks(tasks.tasks, tasksOrder.getTodos())); sortedTasks.addAll(sortTasks(tasks.tasks, tasksOrder.getRewards())); - removeOldTasks(userId, sortedTasks); + if (userId != null) { + removeOldTasks(realm1, userId, sortedTasks); + } realm1.insertOrUpdate(sortedTasks); }); @@ -70,8 +74,8 @@ public class RealmTaskLocalRepository extends RealmBaseLocalRepository implement realm.executeTransaction(realm1 -> realm1.insertOrUpdate(task)); } - private void removeOldTasks(String userID, List onlineTaskList) { - RealmResults localTasks = realm.where(Task.class).equalTo("userId", userID).findAll(); + private void removeOldTasks(Realm realm1, String userID, List onlineTaskList) { + RealmResults localTasks = realm1.where(Task.class).equalTo("userId", userID).findAll(); for (Task localTask : localTasks) { if (!onlineTaskList.contains(localTask)) { for (ChecklistItem item : localTask.checklist) { diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/implementation/RealmUserLocalRepository.java b/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/implementation/RealmUserLocalRepository.java index 96b3715b8..f850a9599 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/implementation/RealmUserLocalRepository.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/implementation/RealmUserLocalRepository.java @@ -70,6 +70,9 @@ public class RealmUserLocalRepository extends RealmBaseLocalRepository implement ownedItems.add("spookySparkles"); } } + if (ownedItems.size() == 0) { + return Observable.empty(); + } return realm.where(Skill.class) .in("key", ownedItems.toArray(new String[0])) .findAll() diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/models/social/Challenge.java b/Habitica/src/main/java/com/habitrpg/android/habitica/models/social/Challenge.java index 85849f8cf..4a1082f00 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/models/social/Challenge.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/models/social/Challenge.java @@ -1,5 +1,6 @@ package com.habitrpg.android.habitica.models.social; +import com.google.gson.annotations.SerializedName; import com.habitrpg.android.habitica.models.user.User; import java.util.HashMap; @@ -26,7 +27,8 @@ public class Challenge extends RealmObject { public int prize; public boolean official; public int memberCount; - public String user_id; + @SerializedName("user_id") + public String userId; public String todoList; public String habitList; public String dailyList; diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/models/tasks/Task.java b/Habitica/src/main/java/com/habitrpg/android/habitica/models/tasks/Task.java index 7d13f8294..c4fffa7f2 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/models/tasks/Task.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/models/tasks/Task.java @@ -541,4 +541,13 @@ public class Task extends RealmObject { this.parsedNotes = this.getNotes(); } } + + @Override + public boolean equals(Object obj) { + if (Task.class.isAssignableFrom(obj.getClass())) { + Task otherTask = (Task) obj; + return this.id.equals(otherTask.getId()); + } + return super.equals(obj); + } } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/modules/RepositoryModule.java b/Habitica/src/main/java/com/habitrpg/android/habitica/modules/RepositoryModule.java index 2de06c2f7..dde004ae5 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/modules/RepositoryModule.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/modules/RepositoryModule.java @@ -85,8 +85,8 @@ public class RepositoryModule { } @Provides - UserRepository providesUserRepository(UserLocalRepository localRepository, ApiClient apiClient) { - return new UserRepositoryImpl(localRepository, apiClient); + UserRepository providesUserRepository(UserLocalRepository localRepository, ApiClient apiClient, TaskRepository taskRepository) { + return new UserRepositoryImpl(localRepository, apiClient, taskRepository); } @Provides diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/ChallengeDetailActivity.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/ChallengeDetailActivity.java index c074022eb..bd7ec182d 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/ChallengeDetailActivity.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/ChallengeDetailActivity.java @@ -279,7 +279,7 @@ public class ChallengeDetailActivity extends BaseActivity { showRemoveTasksDialog(keepTasks -> this.apiClient.leaveChallenge(challenge.id, new LeaveChallengeBody(keepTasks)) .subscribe(aVoid -> { - challenge.user_id = null; + challenge.userId = null; user.resetChallengeList(); finish(); diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/social/ChallengesListViewAdapter.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/social/ChallengesListViewAdapter.java index a13976adc..dd08316f7 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/social/ChallengesListViewAdapter.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/social/ChallengesListViewAdapter.java @@ -177,7 +177,7 @@ public class ChallengesListViewAdapter extends RecyclerView.Adapter { if (this.user != null) { - challenge.user_id = this.user.getId(); + challenge.userId = this.user.getId(); } if (challengeJoinedAction != null) { @@ -311,7 +311,7 @@ public class ChallengeDetailDialogHolder { showRemoveTasksDialog(keepTasks -> this.apiClient.leaveChallenge(challenge.id, new LeaveChallengeBody(keepTasks)) .subscribe(aVoid -> { - challenge.user_id = null; + challenge.userId = null; if (this.user != null) { this.user.resetChallengeList(); diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/challenges/ChallengeListFragment.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/challenges/ChallengeListFragment.java index bda841308..8bee57b57 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/challenges/ChallengeListFragment.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/challenges/ChallengeListFragment.java @@ -87,10 +87,10 @@ public class ChallengeListFragment extends BaseMainFragment implements SwipeRefr for (Challenge challenge : challenges) { if (userChallengesHash.contains(challenge.id) && challenge.name != null && !challenge.name.isEmpty()) { - challenge.user_id = this.user.getId(); + challenge.userId = this.user.getId(); userChallenges.add(challenge); } else { - challenge.user_id = null; + challenge.userId = null; } }