From 45ee45ff17750f91b6d98336522316bbc38fd622 Mon Sep 17 00:00:00 2001 From: Phillip Thelen Date: Thu, 22 Jun 2017 21:37:51 +0200 Subject: [PATCH] improve yesterdailies behaviour --- .../android/habitica/data/TaskRepository.java | 4 ++-- .../data/implementation/TaskRepositoryImpl.java | 8 ++++---- .../data/implementation/UserRepositoryImpl.java | 17 ++++++++++++----- .../habitica/interactors/BuyRewardUseCase.java | 2 +- .../habitica/interactors/DailyCheckUseCase.java | 5 +---- .../habitica/interactors/HabitScoreUseCase.java | 2 +- .../habitica/interactors/TodoCheckUseCase.java | 5 +---- .../views/yesterdailies/YesterdailyDialog.java | 3 ++- .../widget/HabitButtonWidgetProvider.java | 2 +- .../habitica/widget/TaskListWidgetProvider.java | 2 +- 10 files changed, 26 insertions(+), 24 deletions(-) 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 e76c989c9..108b8bff7 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 @@ -23,8 +23,8 @@ public interface TaskRepository extends BaseRepository { Observable refreshTasks(TasksOrder tasksOrder); - Observable taskChecked(User user, Task task, boolean up); - Observable taskChecked(User user, String taskId, boolean up); + Observable taskChecked(User user, Task task, boolean up, boolean force); + Observable taskChecked(User user, String taskId, boolean up, boolean force); Observable scoreChecklistItem(String taskId, String itemId); Observable getTask(String taskId); 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 d7f824690..6b5b65f24 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 @@ -53,9 +53,9 @@ public class TaskRepositoryImpl extends BaseRepositoryImpl } @Override - public Observable taskChecked(@Nullable User user, Task task, boolean up) { + public Observable taskChecked(@Nullable User user, Task task, boolean up, boolean force) { long now = new Date().getTime(); - if (lastTaskAction > now-500) { + if (lastTaskAction > now-500 || force) { return Observable.just(null); } lastTaskAction = now; @@ -95,9 +95,9 @@ public class TaskRepositoryImpl extends BaseRepositoryImpl } @Override - public Observable taskChecked(User user, String taskId, boolean up) { + public Observable taskChecked(User user, String taskId, boolean up, boolean force) { return localRepository.getTask(taskId) - .flatMap(task -> taskChecked(user, task, up)); + .flatMap(task -> taskChecked(user, task, up, force)); } public Observable scoreChecklistItem(String taskId, String itemId){ 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 5d6417242..5fd122619 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 @@ -12,6 +12,7 @@ import com.habitrpg.android.habitica.models.TutorialStep; import com.habitrpg.android.habitica.models.inventory.Customization; import com.habitrpg.android.habitica.models.inventory.CustomizationSet; import com.habitrpg.android.habitica.models.responses.SkillResponse; +import com.habitrpg.android.habitica.models.responses.TaskScoringResult; import com.habitrpg.android.habitica.models.responses.UnlockResponse; import com.habitrpg.android.habitica.models.tasks.Task; import com.habitrpg.android.habitica.models.user.User; @@ -212,11 +213,17 @@ public class UserRepositoryImpl extends BaseRepositoryImpl @Override public void runCron(List tasks) { - Observable.from(tasks) - .flatMap(task -> taskRepository.taskChecked(null, task, true)) - .toList() - .flatMap(taskScoringResults -> apiClient.runCron()) - .flatMap(aVoid -> this.retrieveUser(true)); + Observable> observable; + if (tasks.size() > 0) { + observable = Observable.from(tasks) + .flatMap(task -> taskRepository.taskChecked(null, task, true, true)) + .toList(); + } else { + observable = Observable.just(null); + } + observable.flatMap(taskScoringResults -> apiClient.runCron()) + .flatMap(aVoid -> this.retrieveUser(true)) + .subscribe(user -> {}, RxErrorHandler.handleEmptyError()); } private User mergeUser(User oldUser, User newUser) { diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/interactors/BuyRewardUseCase.java b/Habitica/src/main/java/com/habitrpg/android/habitica/interactors/BuyRewardUseCase.java index 615bafaf3..6e81fd59d 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/interactors/BuyRewardUseCase.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/interactors/BuyRewardUseCase.java @@ -29,7 +29,7 @@ public class BuyRewardUseCase extends UseCase buildUseCaseObservable(BuyRewardUseCase.RequestValues requestValues) { return taskRepository - .taskChecked(requestValues.user, requestValues.task, false) + .taskChecked(requestValues.user, requestValues.task, false, false) .doOnNext(res -> soundManager.loadAndPlayAudio(SoundManager.SoundReward)); } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/interactors/DailyCheckUseCase.java b/Habitica/src/main/java/com/habitrpg/android/habitica/interactors/DailyCheckUseCase.java index 81dfe0fa5..f56249254 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/interactors/DailyCheckUseCase.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/interactors/DailyCheckUseCase.java @@ -28,10 +28,7 @@ public class DailyCheckUseCase extends UseCase buildUseCaseObservable(RequestValues requestValues) { - return taskRepository.taskChecked(requestValues.user, requestValues.task, requestValues.up).doOnNext(res -> { - - soundManager.loadAndPlayAudio(SoundManager.SoundDaily); - }); + return taskRepository.taskChecked(requestValues.user, requestValues.task, requestValues.up, false).doOnNext(res -> soundManager.loadAndPlayAudio(SoundManager.SoundDaily)); } public static final class RequestValues implements UseCase.RequestValues { diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/interactors/HabitScoreUseCase.java b/Habitica/src/main/java/com/habitrpg/android/habitica/interactors/HabitScoreUseCase.java index 35568ee85..0e3b71b63 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/interactors/HabitScoreUseCase.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/interactors/HabitScoreUseCase.java @@ -29,7 +29,7 @@ public class HabitScoreUseCase extends UseCase buildUseCaseObservable(RequestValues requestValues) { return taskRepository - .taskChecked(requestValues.user, requestValues.habit, requestValues.up) + .taskChecked(requestValues.user, requestValues.habit, requestValues.up, false) .doOnNext(res -> soundManager.loadAndPlayAudio(requestValues.up ? SoundManager.SoundPlusHabit : SoundManager.SoundMinusHabit)); } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/interactors/TodoCheckUseCase.java b/Habitica/src/main/java/com/habitrpg/android/habitica/interactors/TodoCheckUseCase.java index 7cb456fe4..77fd63ee6 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/interactors/TodoCheckUseCase.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/interactors/TodoCheckUseCase.java @@ -28,10 +28,7 @@ public class TodoCheckUseCase extends UseCase buildUseCaseObservable(TodoCheckUseCase.RequestValues requestValues) { - return taskRepository.taskChecked(requestValues.user, requestValues.task, requestValues.up).doOnNext(res -> { - - soundManager.loadAndPlayAudio(SoundManager.SoundTodo); - }); + return taskRepository.taskChecked(requestValues.user, requestValues.task, requestValues.up, false).doOnNext(res -> soundManager.loadAndPlayAudio(SoundManager.SoundTodo)); } public static final class RequestValues implements UseCase.RequestValues { 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 039f86c05..baa1542a6 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 @@ -50,7 +50,7 @@ public class YesterdailyDialog extends AlertDialog { this.setView(view); this.setButton(AlertDialog.BUTTON_POSITIVE, context.getString(R.string.start_day), - (dialog, which) -> this.runCron()); + (dialog, which) -> {}); this.setOnDismissListener(dialog -> runCron()); @@ -65,6 +65,7 @@ public class YesterdailyDialog extends AlertDialog { } } userRepository.runCron(completedTasks); + isDisplaying = false; } private void createTaskViews(LayoutInflater inflater) { diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/widget/HabitButtonWidgetProvider.java b/Habitica/src/main/java/com/habitrpg/android/habitica/widget/HabitButtonWidgetProvider.java index e5019bf9e..709dd659c 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/widget/HabitButtonWidgetProvider.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/widget/HabitButtonWidgetProvider.java @@ -75,7 +75,7 @@ public class HabitButtonWidgetProvider extends BaseWidgetProvider { int[] ids = {appWidgetId}; if (taskId != null) { - userRepository.getUser(userId).flatMap(user -> taskRepository.taskChecked(user, taskId, TaskDirection.up.toString().equals(direction))) + userRepository.getUser(userId).flatMap(user -> taskRepository.taskChecked(user, taskId, TaskDirection.up.toString().equals(direction), false)) .subscribe(taskDirectionData -> { showToastForTaskDirection(context, taskDirectionData, userId); this.onUpdate(context, mgr, ids); diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/widget/TaskListWidgetProvider.java b/Habitica/src/main/java/com/habitrpg/android/habitica/widget/TaskListWidgetProvider.java index 30e6c0387..e48b078dc 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/widget/TaskListWidgetProvider.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/widget/TaskListWidgetProvider.java @@ -55,7 +55,7 @@ public abstract class TaskListWidgetProvider extends BaseWidgetProvider { String taskId = intent.getStringExtra(TASK_ID_ITEM); if (taskId != null) { - userRepository.getUser(userId).flatMap(user -> taskRepository.taskChecked(user, taskId, true)) + userRepository.getUser(userId).flatMap(user -> taskRepository.taskChecked(user, taskId, true, false)) .subscribe(taskDirectionData -> { taskRepository.markTaskCompleted(taskId, true); showToastForTaskDirection(context, taskDirectionData, userId);