update dailies before showing yesterdaily dialog

This commit is contained in:
Phillip Thelen 2017-06-28 18:21:44 +02:00
parent 7d1db6c8a3
commit 812874b342
11 changed files with 71 additions and 5 deletions

View file

@ -2,7 +2,7 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="com.habitrpg.android.habitica"
android:versionCode="1897"
android:versionCode="1899"
android:versionName="1.1"
android:screenOrientation="portrait"
android:installLocation="auto" >

View file

@ -6,7 +6,7 @@
<string name="SP_APIToken" translatable="false">APIToken</string>
<string name="SP_username" translatable="false">Username</string>
<string name="SP_email" translatable="false">E-mail</string>
<string name="base_url" translatable="false">https://habitica.com</string>
<string name="base_url" translatable="false">https://habitrpg-beta.herokuapp.com</string>
<!-- Local notification actions -->
<string name="accept_party_invite" translatable="false">ACCEPT_PARTY_INVITE</string>

View file

@ -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<HabitResponse<TaskList>> getTasks();
@GET("tasks/user")
Observable<HabitResponse<TaskList>> getTasks(@Query("type") String type);
@GET("tasks/user")
Observable<HabitResponse<TaskList>> getTasks(@Query("type") String type, @Query("dueDate") Date dueDate);
@POST("user/unlock")
Observable<HabitResponse<UnlockResponse>> unlockPath(@Query("path") String path);

View file

@ -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<TaskList> getTasks();
Observable<TaskList> getTasks(String type);
Observable<TaskList> getTasks(String type, Date dueDate);
Observable<UnlockResponse> unlockPath(String path);

View file

@ -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<RealmResults<Task>> getTasks(String userId);
void saveTasks(String userId, TasksOrder order, TaskList tasks);
Observable<TaskList> refreshTasks(TasksOrder tasksOrder);
Observable<TaskList> retrieveTasks(String userId, TasksOrder tasksOrder);
Observable<TaskList> retrieveTasks(String userId, TasksOrder tasksOrder, Date dueDate);
Observable<TaskScoringResult> taskChecked(User user, Task task, boolean up, boolean force);
Observable<TaskScoringResult> taskChecked(User user, String taskId, boolean up, boolean force);
@ -55,4 +58,6 @@ public interface TaskRepository extends BaseRepository {
Observable<List<Task>> getTaskCopies(String userId);
Observable<List<Task>> getTaskCopies(RealmResults<Task> tasks1);
Observable<TaskList> updateDailiesIsDue(Date date);
}

View file

@ -501,6 +501,18 @@ public class ApiClientImpl implements Action1<Throwable>, ApiClient {
return apiService.getTasks().compose(configureApiCallObserver());
}
@Override
public Observable<TaskList> getTasks(String type) {
return apiService.getTasks(type).compose(configureApiCallObserver());
}
@Override
public Observable<TaskList> getTasks(String type, Date dueDate) {
return apiService.getTasks(type, dueDate).compose(configureApiCallObserver());
}
@Override
public Observable<UnlockResponse> unlockPath(String path) {
return apiService.unlockPath(path).compose(configureApiCallObserver());

View file

@ -47,9 +47,15 @@ public class TaskRepositoryImpl extends BaseRepositoryImpl<TaskLocalRepository>
}
@Override
public Observable<TaskList> refreshTasks(TasksOrder tasksOrder) {
public Observable<TaskList> 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<TaskList> 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<TaskLocalRepository>
public Observable<List<Task>> getTaskCopies(RealmResults<Task> tasks) {
return Observable.just(localRepository.getUnmanagedCopy(tasks));
}
@Override
public Observable<TaskList> updateDailiesIsDue(Date date) {
return apiClient.getTasks("dailys", date)
.doOnNext(localRepository::updateIsdue);
}
}

View file

@ -33,4 +33,6 @@ public interface TaskLocalRepository extends BaseLocalRepository {
void swapTaskPosition(int firstPosition, int secondPosition);
Observable<Task> getTaskAtPosition(int currentPosition);
void updateIsdue(TaskList daily);
}

View file

@ -187,4 +187,16 @@ public class RealmTaskLocalRepository extends RealmBaseLocalRepository implement
.filter(realmObject -> realmObject.isLoaded())
.cast(Task.class);
}
@Override
public void updateIsdue(TaskList dailies) {
RealmResults<Task> 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;
}
}
});
}
}

View file

@ -459,6 +459,9 @@ public class User extends RealmObject {
}
public Boolean getNeedsCron() {
if (needsCron == null) {
return false;
}
return needsCron;
}

View file

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