mirror of
https://github.com/sudoxnym/habitica-android.git
synced 2026-07-14 02:01:56 +00:00
Show completed todos in the app. Fixes #926
This commit is contained in:
parent
5add7794c6
commit
75b13764b7
6 changed files with 51 additions and 4 deletions
|
|
@ -53,4 +53,5 @@ interface TaskRepository : BaseRepository {
|
|||
fun getTaskCopies(tasks: List<Task>): Observable<List<Task>>
|
||||
|
||||
fun updateDailiesIsDue(date: Date): Observable<TaskList>
|
||||
fun retrieveCompletedTodos(userId: String): Observable<TaskList>
|
||||
}
|
||||
|
|
|
|||
|
|
@ -40,6 +40,16 @@ class TaskRepositoryImpl(localRepository: TaskLocalRepository, apiClient: ApiCli
|
|||
.doOnNext { res -> this.localRepository.saveTasks(userId, tasksOrder, res) }
|
||||
}
|
||||
|
||||
override fun retrieveCompletedTodos(userId: String): Observable<TaskList> {
|
||||
return this.apiClient.getTasks("completedTodos")
|
||||
.doOnNext { taskList ->
|
||||
val tasks = taskList.tasks
|
||||
if (tasks != null) {
|
||||
this.localRepository.saveCompletedTodos(userId, tasks.values)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun retrieveTasks(userId: String, tasksOrder: TasksOrder, dueDate: Date): Observable<TaskList> {
|
||||
val formatter = SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZZZZZ", Locale.US)
|
||||
return this.apiClient.getTasks("dailys", formatter.format(dueDate))
|
||||
|
|
|
|||
|
|
@ -32,4 +32,5 @@ interface TaskLocalRepository : BaseLocalRepository {
|
|||
fun updateIsdue(daily: TaskList): Observable<TaskList>
|
||||
|
||||
fun updateTaskPositions(taskOrder: List<String>)
|
||||
fun saveCompletedTodos(userId: String, tasks: MutableCollection<Task>)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -9,9 +9,8 @@ import com.habitrpg.android.habitica.models.tasks.TasksOrder
|
|||
import io.realm.Realm
|
||||
import io.realm.RealmObject
|
||||
import io.realm.RealmResults
|
||||
import io.realm.Sort
|
||||
import rx.Observable
|
||||
import java.util.*
|
||||
import kotlin.collections.ArrayList
|
||||
|
||||
class RealmTaskLocalRepository(realm: Realm) : RealmBaseLocalRepository(realm), TaskLocalRepository {
|
||||
|
||||
|
|
@ -54,6 +53,11 @@ class RealmTaskLocalRepository(realm: Realm) : RealmBaseLocalRepository(realm),
|
|||
realm.executeTransactionAsync { realm1 -> realm1.insertOrUpdate(sortedTasks) }
|
||||
}
|
||||
|
||||
override fun saveCompletedTodos(userId: String, tasks: MutableCollection<Task>) {
|
||||
removeCompletedTodos(userId, tasks)
|
||||
realm.executeTransactionAsync { realm1 -> realm1.insertOrUpdate(tasks) }
|
||||
}
|
||||
|
||||
private fun sortTasks(taskMap: MutableMap<String, Task>, taskOrder: List<String>): List<Task> {
|
||||
val taskList = ArrayList<Task>()
|
||||
var position = 0
|
||||
|
|
@ -74,7 +78,35 @@ class RealmTaskLocalRepository(realm: Realm) : RealmBaseLocalRepository(realm),
|
|||
}
|
||||
|
||||
private fun removeOldTasks(userID: String, onlineTaskList: List<Task>) {
|
||||
val localTasks = realm.where(Task::class.java).equalTo("userId", userID).findAll().createSnapshot()
|
||||
val localTasks = realm.where(Task::class.java)
|
||||
.equalTo("userId", userID)
|
||||
.beginGroup()
|
||||
.beginGroup()
|
||||
.equalTo("type", Task.TYPE_TODO)
|
||||
.equalTo("completed", false)
|
||||
.endGroup()
|
||||
.or()
|
||||
.notEqualTo("type", Task.TYPE_TODO)
|
||||
.endGroup()
|
||||
.findAll()
|
||||
.createSnapshot()
|
||||
val tasksToDelete = localTasks.filterNot { onlineTaskList.contains(it) }
|
||||
realm.executeTransaction {
|
||||
for (localTask in tasksToDelete) {
|
||||
localTask.checklist.deleteAllFromRealm()
|
||||
localTask.reminders.deleteAllFromRealm()
|
||||
localTask.deleteFromRealm()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun removeCompletedTodos(userID: String, onlineTaskList: MutableCollection<Task>) {
|
||||
val localTasks = realm.where(Task::class.java)
|
||||
.equalTo("userId", userID)
|
||||
.equalTo("type", Task.TYPE_TODO)
|
||||
.equalTo("completed", true)
|
||||
.findAll()
|
||||
.createSnapshot()
|
||||
val tasksToDelete = localTasks.filterNot { onlineTaskList.contains(it) }
|
||||
realm.executeTransaction {
|
||||
for (localTask in tasksToDelete) {
|
||||
|
|
|
|||
|
|
@ -147,7 +147,6 @@ abstract class RealmBaseTasksRecyclerViewAdapter<VH : BaseTaskViewHolder>(privat
|
|||
if (taskFilterHelper != null) {
|
||||
val query = taskFilterHelper.createQuery(unfilteredData)
|
||||
updateData(query.findAllSorted("position"))
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -266,6 +266,10 @@ open class TaskRecyclerViewFragment : BaseFragment(), View.OnClickListener, Swip
|
|||
taskFilterHelper.setActiveFilter(classType, activeFilter)
|
||||
}
|
||||
recyclerAdapter?.filter()
|
||||
|
||||
if (activeFilter == Task.FILTER_COMPLETED) {
|
||||
compositeSubscription.add(taskRepository.retrieveCompletedTodos(userID).subscribe(Action1 {}, RxErrorHandler.handleEmptyError()))
|
||||
}
|
||||
}
|
||||
|
||||
companion object {
|
||||
|
|
|
|||
Loading…
Reference in a new issue