From 6dea4eb10fc9343ad07d424659c519d24ff1c982 Mon Sep 17 00:00:00 2001 From: Phillip Thelen Date: Wed, 22 Feb 2023 16:17:24 +0100 Subject: [PATCH] fix task handling --- .../implementation/ChallengeRepositoryImpl.kt | 2 +- .../data/implementation/TaskRepositoryImpl.kt | 4 +-- .../RealmTaskLocalRepository.kt | 32 ++++--------------- .../android/habitica/models/tasks/Task.kt | 18 ++++++++--- .../habitica/ui/viewmodels/TasksViewModel.kt | 5 ++- .../android/habitica/utils/TaskSerializer.kt | 2 +- 6 files changed, 29 insertions(+), 34 deletions(-) diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/ChallengeRepositoryImpl.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/ChallengeRepositoryImpl.kt index bfc163f4b..dec714963 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/ChallengeRepositoryImpl.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/ChallengeRepositoryImpl.kt @@ -49,7 +49,7 @@ class ChallengeRepositoryImpl( if (tasks != null) { val taskList = tasks.tasks.values.toList() taskList.forEach { - it.userId = challengeID + it.ownerID = challengeID } localRepository.save(taskList) } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/TaskRepositoryImpl.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/TaskRepositoryImpl.kt index 7ce52a29d..213c5130b 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/TaskRepositoryImpl.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/TaskRepositoryImpl.kt @@ -5,7 +5,6 @@ import com.habitrpg.android.habitica.data.ApiClient import com.habitrpg.android.habitica.data.TaskRepository import com.habitrpg.android.habitica.data.local.TaskLocalRepository import com.habitrpg.android.habitica.helpers.AppConfigManager -import com.habitrpg.common.habitica.helpers.launchCatching import com.habitrpg.android.habitica.interactors.ScoreTaskLocallyInteractor import com.habitrpg.android.habitica.models.BaseMainObject import com.habitrpg.android.habitica.models.responses.BulkTaskScoringData @@ -15,6 +14,7 @@ import com.habitrpg.android.habitica.models.tasks.TaskList import com.habitrpg.android.habitica.models.user.OwnedItem import com.habitrpg.android.habitica.models.user.User import com.habitrpg.common.habitica.helpers.AnalyticsManager +import com.habitrpg.common.habitica.helpers.launchCatching import com.habitrpg.shared.habitica.models.responses.TaskDirection import com.habitrpg.shared.habitica.models.responses.TaskDirectionData import com.habitrpg.shared.habitica.models.responses.TaskScoringResult @@ -240,7 +240,7 @@ class TaskRepositoryImpl( task.isSaving = true task.isCreating = true task.hasErrored = false - task.userId = userID + task.ownerID = userID if (task.id == null) { task.id = UUID.randomUUID().toString() } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/implementation/RealmTaskLocalRepository.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/implementation/RealmTaskLocalRepository.kt index 677b48a3a..4256dd38d 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/implementation/RealmTaskLocalRepository.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/implementation/RealmTaskLocalRepository.kt @@ -34,21 +34,7 @@ class RealmTaskLocalRepository(realm: Realm) : RealmBaseLocalRepository(realm), ): RealmResults { return realm.where(Task::class.java) .equalTo("typeValue", taskType.value) - .beginGroup() - .equalTo("userId", ownerID) - .or() - .beginGroup() - .`in`("group.groupID", includedGroupIDs) - .and() - .beginGroup() - .contains("group.assignedUsers", ownerID) - .or() - .isEmpty("group.assignedUsers") - .endGroup() - .endGroup() - .or() - .equalTo("group.groupID", ownerID) - .endGroup() + .equalTo("ownerID", ownerID) .sort("position", Sort.ASCENDING, "dateCreated", Sort.DESCENDING) .findAll() } @@ -77,8 +63,8 @@ class RealmTaskLocalRepository(realm: Realm) : RealmBaseLocalRepository(realm), val allChecklistItems = ArrayList() val allReminders = ArrayList() sortedTasks.forEach { - if (it.userId.isBlank() && it.group?.groupID?.isNotBlank() != true) { - it.userId = ownerID + if (it.ownerID.isBlank()) { + it.ownerID = ownerID } it.checklist?.let { it1 -> allChecklistItems.addAll(it1) } it.reminders?.let { it1 -> allReminders.addAll(it1) } @@ -132,11 +118,7 @@ class RealmTaskLocalRepository(realm: Realm) : RealmBaseLocalRepository(realm), private fun removeOldTasks(ownerID: String, onlineTaskList: List) { if (realm.isClosed) return val localTasks = realm.where(Task::class.java) - .beginGroup() - .equalTo("userId", ownerID) - .or() - .equalTo("group.groupID", ownerID) - .endGroup() + .equalTo("ownerID", ownerID) .beginGroup() .beginGroup() .equalTo("typeValue", TaskType.TODO.value) @@ -157,7 +139,7 @@ class RealmTaskLocalRepository(realm: Realm) : RealmBaseLocalRepository(realm), private fun removeCompletedTodos(userID: String, onlineTaskList: MutableCollection) { val localTasks = realm.where(Task::class.java) - .equalTo("userId", userID) + .equalTo("ownerID", userID) .equalTo("typeValue", TaskType.TODO.value) .equalTo("completed", true) .findAll() @@ -244,7 +226,7 @@ class RealmTaskLocalRepository(realm: Realm) : RealmBaseLocalRepository(realm), override fun getErroredTasks(userID: String): Flow> { return realm.where(Task::class.java) - .equalTo("userId", userID) + .equalTo("ownerID", userID) .equalTo("hasErrored", true) .sort("position") .findAll() @@ -265,7 +247,7 @@ class RealmTaskLocalRepository(realm: Realm) : RealmBaseLocalRepository(realm), override fun getTasksForChallenge(challengeID: String?, userID: String?): Flow> { return realm.where(Task::class.java) .equalTo("challengeID", challengeID) - .equalTo("userId", userID) + .equalTo("ownerID", userID) .findAll() .toFlow() .filter { it.isLoaded } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/models/tasks/Task.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/models/tasks/Task.kt index 996d19b54..42fe10ccf 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/models/tasks/Task.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/models/tasks/Task.kt @@ -5,9 +5,9 @@ import android.os.Parcelable import android.text.Spanned import com.google.gson.annotations.SerializedName import com.habitrpg.android.habitica.R -import com.habitrpg.common.habitica.helpers.ExceptionHandler import com.habitrpg.android.habitica.models.BaseMainObject import com.habitrpg.android.habitica.models.Tag +import com.habitrpg.common.habitica.helpers.ExceptionHandler import com.habitrpg.common.habitica.helpers.MarkdownParser import com.habitrpg.shared.habitica.models.tasks.Attribute import com.habitrpg.shared.habitica.models.tasks.BaseTask @@ -38,9 +38,19 @@ open class Task : RealmObject, BaseMainObject, Parcelable, BaseTask { get() = "id" @PrimaryKey + var combinedID: String? = null + @SerializedName("_id") var id: String? = null - var userId: String = "" + set(value) { + field = value + combinedID = id + ownerID + } + var ownerID: String = "" + set(value) { + field = value + combinedID = id + ownerID + } var priority: Float = 0.0f var text: String = "" var notes: String? = null @@ -437,7 +447,7 @@ open class Task : RealmObject, BaseMainObject, Parcelable, BaseTask { override fun describeContents(): Int = 0 override fun writeToParcel(dest: Parcel, flags: Int) { - dest.writeString(this.userId) + dest.writeString(this.ownerID) dest.writeValue(this.priority) dest.writeString(this.text) dest.writeString(this.notes) @@ -468,7 +478,7 @@ open class Task : RealmObject, BaseMainObject, Parcelable, BaseTask { constructor() protected constructor(`in`: Parcel) { - this.userId = `in`.readString() ?: "" + this.ownerID = `in`.readString() ?: "" this.priority = `in`.readValue(Float::class.java.classLoader) as? Float ?: 0f this.text = `in`.readString() ?: "" this.notes = `in`.readString() diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewmodels/TasksViewModel.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewmodels/TasksViewModel.kt index b5f734fc9..ac7720e0c 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewmodels/TasksViewModel.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewmodels/TasksViewModel.kt @@ -12,10 +12,10 @@ import com.habitrpg.android.habitica.data.TagRepository import com.habitrpg.android.habitica.data.TaskRepository import com.habitrpg.android.habitica.helpers.AmplitudeManager import com.habitrpg.android.habitica.helpers.AppConfigManager -import com.habitrpg.common.habitica.helpers.ExceptionHandler import com.habitrpg.android.habitica.helpers.GroupPlanInfoProvider import com.habitrpg.android.habitica.models.TeamPlan import com.habitrpg.android.habitica.models.tasks.Task +import com.habitrpg.common.habitica.helpers.ExceptionHandler import com.habitrpg.shared.habitica.models.responses.TaskDirection import com.habitrpg.shared.habitica.models.responses.TaskScoringResult import com.habitrpg.shared.habitica.models.tasks.TaskType @@ -87,6 +87,9 @@ class TasksViewModel : BaseViewModel(), GroupPlanInfoProvider { withTasks = true, forced = true ) + if (activeFilters[TaskType.TODO] == Task.FILTER_COMPLETED) { + taskRepository.retrieveCompletedTodos() + } } else { userRepository.retrieveTeamPlan(ownerID.value ?: "") } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/utils/TaskSerializer.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/utils/TaskSerializer.kt index f32bbc038..b69f579c4 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/utils/TaskSerializer.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/utils/TaskSerializer.kt @@ -61,7 +61,7 @@ class TaskSerializer : JsonSerializer, JsonDeserializer { val obj = json as? JsonObject ?: return task task.text = obj.getAsString("text") task.notes = obj.getAsString("notes") - task.userId = obj.getAsString("userId") + task.ownerID = obj.getAsString("userId") task.value = obj.get("value")?.asDouble ?: 0.0 task.type = TaskType.from(obj.getAsString("type")) ?: TaskType.HABIT task.frequency = Frequency.from(obj.getAsString("frequency"))