improve yesterdailies behaviour

This commit is contained in:
Phillip Thelen 2017-06-22 21:37:51 +02:00
parent 7f3df64217
commit 45ee45ff17
10 changed files with 26 additions and 24 deletions

View file

@ -23,8 +23,8 @@ public interface TaskRepository extends BaseRepository {
Observable<TaskList> refreshTasks(TasksOrder tasksOrder);
Observable<TaskScoringResult> taskChecked(User user, Task task, boolean up);
Observable<TaskScoringResult> taskChecked(User user, String taskId, boolean up);
Observable<TaskScoringResult> taskChecked(User user, Task task, boolean up, boolean force);
Observable<TaskScoringResult> taskChecked(User user, String taskId, boolean up, boolean force);
Observable<Task> scoreChecklistItem(String taskId, String itemId);
Observable<Task> getTask(String taskId);

View file

@ -53,9 +53,9 @@ public class TaskRepositoryImpl extends BaseRepositoryImpl<TaskLocalRepository>
}
@Override
public Observable<TaskScoringResult> taskChecked(@Nullable User user, Task task, boolean up) {
public Observable<TaskScoringResult> 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<TaskLocalRepository>
}
@Override
public Observable<TaskScoringResult> taskChecked(User user, String taskId, boolean up) {
public Observable<TaskScoringResult> 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<Task> scoreChecklistItem(String taskId, String itemId){

View file

@ -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<UserLocalRepository>
@Override
public void runCron(List<Task> tasks) {
Observable.from(tasks)
.flatMap(task -> taskRepository.taskChecked(null, task, true))
.toList()
.flatMap(taskScoringResults -> apiClient.runCron())
.flatMap(aVoid -> this.retrieveUser(true));
Observable<List<TaskScoringResult>> 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) {

View file

@ -29,7 +29,7 @@ public class BuyRewardUseCase extends UseCase<BuyRewardUseCase.RequestValues, Ta
@Override
protected Observable<TaskScoringResult> 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));
}

View file

@ -28,10 +28,7 @@ public class DailyCheckUseCase extends UseCase<DailyCheckUseCase.RequestValues,
@Override
protected Observable<TaskScoringResult> 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 {

View file

@ -29,7 +29,7 @@ public class HabitScoreUseCase extends UseCase<HabitScoreUseCase.RequestValues,
@Override
protected Observable<TaskScoringResult> 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));
}

View file

@ -28,10 +28,7 @@ public class TodoCheckUseCase extends UseCase<TodoCheckUseCase.RequestValues, T
@Override
protected Observable<TaskScoringResult> 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 {

View file

@ -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) {

View file

@ -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);

View file

@ -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);