fix task handling

This commit is contained in:
Phillip Thelen 2023-02-22 16:17:24 +01:00
parent 524647cceb
commit 6dea4eb10f
6 changed files with 29 additions and 34 deletions

View file

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

View file

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

View file

@ -34,21 +34,7 @@ class RealmTaskLocalRepository(realm: Realm) : RealmBaseLocalRepository(realm),
): RealmResults<Task> {
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<ChecklistItem>()
val allReminders = ArrayList<RemindersItem>()
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<Task>) {
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<Task>) {
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<List<Task>> {
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<List<Task>> {
return realm.where(Task::class.java)
.equalTo("challengeID", challengeID)
.equalTo("userId", userID)
.equalTo("ownerID", userID)
.findAll()
.toFlow()
.filter { it.isLoaded }

View file

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

View file

@ -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 ?: "")
}

View file

@ -61,7 +61,7 @@ class TaskSerializer : JsonSerializer<Task>, JsonDeserializer<Task> {
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"))