From 812874b342ef22a9bc5b84232ec1404cf30dfaf0 Mon Sep 17 00:00:00 2001 From: Phillip Thelen Date: Wed, 28 Jun 2017 18:21:44 +0200 Subject: [PATCH] update dailies before showing yesterdaily dialog --- Habitica/AndroidManifest.xml | 2 +- Habitica/res/values/strings.constants.xml | 2 +- .../android/habitica/api/ApiService.java | 8 ++++++++ .../android/habitica/data/ApiClient.java | 4 ++++ .../android/habitica/data/TaskRepository.java | 7 ++++++- .../data/implementation/ApiClientImpl.java | 12 ++++++++++++ .../data/implementation/TaskRepositoryImpl.java | 16 ++++++++++++++-- .../habitica/data/local/TaskLocalRepository.java | 2 ++ .../implementation/RealmTaskLocalRepository.java | 12 ++++++++++++ .../android/habitica/models/user/User.java | 3 +++ .../views/yesterdailies/YesterdailyDialog.java | 8 ++++++++ 11 files changed, 71 insertions(+), 5 deletions(-) diff --git a/Habitica/AndroidManifest.xml b/Habitica/AndroidManifest.xml index 3d87658eb..bbc399f65 100644 --- a/Habitica/AndroidManifest.xml +++ b/Habitica/AndroidManifest.xml @@ -2,7 +2,7 @@ diff --git a/Habitica/res/values/strings.constants.xml b/Habitica/res/values/strings.constants.xml index 47c2a5904..6d95f808f 100644 --- a/Habitica/res/values/strings.constants.xml +++ b/Habitica/res/values/strings.constants.xml @@ -6,7 +6,7 @@ APIToken Username E-mail - https://habitica.com + https://habitrpg-beta.herokuapp.com ACCEPT_PARTY_INVITE diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/api/ApiService.java b/Habitica/src/main/java/com/habitrpg/android/habitica/api/ApiService.java index b0fac8bfa..f00f54fe6 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/api/ApiService.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/api/ApiService.java @@ -29,6 +29,7 @@ import com.habitrpg.android.habitica.models.tasks.TaskList; import com.habitrpg.android.habitica.models.user.Items; import com.habitrpg.android.habitica.models.user.User; +import java.util.Date; import java.util.List; import java.util.Map; @@ -98,6 +99,13 @@ public interface ApiService { @GET("tasks/user") Observable> getTasks(); + @GET("tasks/user") + Observable> getTasks(@Query("type") String type); + + @GET("tasks/user") + Observable> getTasks(@Query("type") String type, @Query("dueDate") Date dueDate); + + @POST("user/unlock") Observable> unlockPath(@Query("path") String path); diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/data/ApiClient.java b/Habitica/src/main/java/com/habitrpg/android/habitica/data/ApiClient.java index 38218780b..7e4141ad5 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/data/ApiClient.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/data/ApiClient.java @@ -30,6 +30,7 @@ import com.habitrpg.android.habitica.models.tasks.TaskList; import com.habitrpg.android.habitica.models.user.User; import com.habitrpg.android.habitica.models.user.Items; +import java.util.Date; import java.util.List; import java.util.Map; @@ -76,6 +77,9 @@ public interface ApiClient { Observable getTasks(); + Observable getTasks(String type); + Observable getTasks(String type, Date dueDate); + Observable unlockPath(String path); 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 108b8bff7..03cb47528 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 @@ -1,5 +1,6 @@ package com.habitrpg.android.habitica.data; +import com.google.android.gms.tasks.Tasks; import com.habitrpg.android.habitica.models.responses.TaskDirectionData; import com.habitrpg.android.habitica.models.responses.TaskScoringResult; import com.habitrpg.android.habitica.models.tasks.ChecklistItem; @@ -10,6 +11,7 @@ import com.habitrpg.android.habitica.models.tasks.TaskTag; import com.habitrpg.android.habitica.models.tasks.TasksOrder; import com.habitrpg.android.habitica.models.user.User; +import java.util.Date; import java.util.List; import io.realm.Realm; @@ -21,7 +23,8 @@ public interface TaskRepository extends BaseRepository { Observable> getTasks(String userId); void saveTasks(String userId, TasksOrder order, TaskList tasks); - Observable refreshTasks(TasksOrder tasksOrder); + Observable retrieveTasks(String userId, TasksOrder tasksOrder); + Observable retrieveTasks(String userId, TasksOrder tasksOrder, Date dueDate); Observable taskChecked(User user, Task task, boolean up, boolean force); Observable taskChecked(User user, String taskId, boolean up, boolean force); @@ -55,4 +58,6 @@ public interface TaskRepository extends BaseRepository { Observable> getTaskCopies(String userId); Observable> getTaskCopies(RealmResults tasks1); + + Observable updateDailiesIsDue(Date date); } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/ApiClientImpl.java b/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/ApiClientImpl.java index 404cd55fa..3df305994 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/ApiClientImpl.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/ApiClientImpl.java @@ -501,6 +501,18 @@ public class ApiClientImpl implements Action1, ApiClient { return apiService.getTasks().compose(configureApiCallObserver()); } + @Override + public Observable getTasks(String type) { + return apiService.getTasks(type).compose(configureApiCallObserver()); + } + + + @Override + public Observable getTasks(String type, Date dueDate) { + return apiService.getTasks(type, dueDate).compose(configureApiCallObserver()); + } + + @Override public Observable unlockPath(String path) { return apiService.unlockPath(path).compose(configureApiCallObserver()); 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 cb4d49112..c7eca54e3 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,9 +47,15 @@ public class TaskRepositoryImpl extends BaseRepositoryImpl } @Override - public Observable refreshTasks(TasksOrder tasksOrder) { + public Observable retrieveTasks(String userId, TasksOrder tasksOrder) { return this.apiClient.getTasks() - .doOnNext(res -> this.localRepository.saveTasks(null, tasksOrder, res)); + .doOnNext(res -> this.localRepository.saveTasks(userId, tasksOrder, res)); + } + + @Override + public Observable retrieveTasks(String userId, TasksOrder tasksOrder, Date dueDate) { + return this.apiClient.getTasks("dailys", dueDate) + .doOnNext(res -> this.localRepository.saveTasks(userId, tasksOrder, res)); } @Override @@ -217,4 +223,10 @@ public class TaskRepositoryImpl extends BaseRepositoryImpl public Observable> getTaskCopies(RealmResults tasks) { return Observable.just(localRepository.getUnmanagedCopy(tasks)); } + + @Override + public Observable updateDailiesIsDue(Date date) { + return apiClient.getTasks("dailys", date) + .doOnNext(localRepository::updateIsdue); + } } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/TaskLocalRepository.java b/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/TaskLocalRepository.java index c9a2ab2e6..80f92a66f 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/TaskLocalRepository.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/TaskLocalRepository.java @@ -33,4 +33,6 @@ public interface TaskLocalRepository extends BaseLocalRepository { void swapTaskPosition(int firstPosition, int secondPosition); Observable getTaskAtPosition(int currentPosition); + + void updateIsdue(TaskList daily); } 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 71311f637..7ab7b390b 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 @@ -187,4 +187,16 @@ public class RealmTaskLocalRepository extends RealmBaseLocalRepository implement .filter(realmObject -> realmObject.isLoaded()) .cast(Task.class); } + + @Override + public void updateIsdue(TaskList dailies) { + RealmResults tasks = realm.where(Task.class).equalTo("type", "daily").findAll(); + realm.executeTransaction(realm1 -> { + for (Task task : tasks) { + if (dailies.tasks.containsKey(task.getId())) { + task.isDue = dailies.tasks.get(task.getId()).isDue; + } + } + }); + } } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/models/user/User.java b/Habitica/src/main/java/com/habitrpg/android/habitica/models/user/User.java index 4ef6f0f20..2bdcd6134 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/models/user/User.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/models/user/User.java @@ -459,6 +459,9 @@ public class User extends RealmObject { } public Boolean getNeedsCron() { + if (needsCron == null) { + return false; + } return needsCron; } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/yesterdailies/YesterdailyDialog.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/yesterdailies/YesterdailyDialog.java index d5c9b4a77..9bf6633ad 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/yesterdailies/YesterdailyDialog.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/yesterdailies/YesterdailyDialog.java @@ -17,6 +17,8 @@ import com.habitrpg.android.habitica.helpers.RxErrorHandler; import com.habitrpg.android.habitica.models.tasks.Task; import java.util.ArrayList; +import java.util.Calendar; +import java.util.Date; import java.util.List; import butterknife.BindColor; @@ -101,6 +103,12 @@ public class YesterdailyDialog extends AlertDialog { if (userRepository != null && userId != null) { userRepository.getUser(userId).first() .filter(user -> user != null && user.getNeedsCron() != null && user.getNeedsCron()) + .filter(user -> user != null) + .flatMap(user -> { + final Calendar cal = Calendar.getInstance(); + cal.add(Calendar.DATE, -1); + return taskRepository.updateDailiesIsDue(cal.getTime()); + }) .flatMap(user -> taskRepository.getTasks(Task.TYPE_DAILY, userId).first()) .map(tasks -> tasks.where().equalTo("isDue", true).equalTo("completed", false).equalTo("yesterDaily", true).findAll()) .flatMap(taskRepository::getTaskCopies)