Improve cron. Fixes #1380

This commit is contained in:
Phillip Thelen 2021-02-01 18:04:09 +01:00
parent 81a9065e00
commit de34a41ef4
7 changed files with 49 additions and 1 deletions

View file

@ -103,6 +103,8 @@ interface ApiService {
@POST("tasks/{id}/score/{direction}")
fun postTaskDirection(@Path("id") id: String, @Path("direction") direction: String): Flowable<HabitResponse<TaskDirectionData>>
@POST("tasks/bulk-score")
fun bulkScoreTasks(@Body data: List<Map<String, String>>): Flowable<HabitResponse<BulkTaskScoringData>>
@POST("tasks/{id}/move/to/{position}")
fun postTaskNewPosition(@Path("id") id: String, @Path("position") position: Int): Flowable<HabitResponse<List<String>>>

View file

@ -80,6 +80,7 @@ interface ApiClient {
fun getTask(id: String): Flowable<Task>
fun postTaskDirection(id: String, direction: String): Flowable<TaskDirectionData>
fun bulkScoreTasks(data: List<Map<String, String>>): Flowable<BulkTaskScoringData>
fun postTaskNewPosition(id: String, position: Int): Flowable<List<String>>

View file

@ -1,6 +1,7 @@
package com.habitrpg.android.habitica.data
import com.habitrpg.android.habitica.models.BaseObject
import com.habitrpg.android.habitica.models.responses.BulkTaskScoringData
import com.habitrpg.android.habitica.models.responses.TaskScoringResult
import com.habitrpg.android.habitica.models.tasks.RemindersItem
import com.habitrpg.android.habitica.models.tasks.Task
@ -62,4 +63,5 @@ interface TaskRepository : BaseRepository {
fun syncErroredTasks(): Single<List<Task>>
fun unlinkAllTasks(challengeID: String?, keepOption: String): Flowable<Void>
fun getTasksForChallenge(challengeID: String?): Flowable<RealmResults<Task>>
fun bulkScoreTasks(data: List<Map<String, String>>): Flowable<BulkTaskScoringData>
}

View file

@ -421,6 +421,10 @@ class ApiClientImpl//private OnHabitsAPIResult mResultListener;
return apiService.postTaskDirection(id, direction).compose(configureApiCallObserver())
}
override fun bulkScoreTasks(data: List<Map<String, String>>): Flowable<BulkTaskScoringData> {
return apiService.bulkScoreTasks(data).compose(configureApiCallObserver())
}
override fun postTaskNewPosition(id: String, position: Int): Flowable<List<String>> {
return apiService.postTaskNewPosition(id, position).compose(configureApiCallObserver())
}

View file

@ -7,6 +7,7 @@ import com.habitrpg.android.habitica.helpers.AppConfigManager
import com.habitrpg.android.habitica.helpers.RxErrorHandler
import com.habitrpg.android.habitica.interactors.ScoreTaskLocallyInteractor
import com.habitrpg.android.habitica.models.BaseObject
import com.habitrpg.android.habitica.models.responses.BulkTaskScoringData
import com.habitrpg.android.habitica.models.responses.TaskDirection
import com.habitrpg.android.habitica.models.responses.TaskDirectionData
import com.habitrpg.android.habitica.models.responses.TaskScoringResult
@ -118,6 +119,10 @@ class TaskRepositoryImpl(localRepository: TaskLocalRepository, apiClient: ApiCli
}
}
override fun bulkScoreTasks(data: List<Map<String, String>>): Flowable<BulkTaskScoringData> {
return apiClient.bulkScoreTasks(listOf())
}
private fun handleTaskResponse(user: User, res: TaskDirectionData, task: Task, up: Boolean, localDelta: Float) {
this.localRepository.executeTransaction {
val bgTask = localRepository.getLiveObject(task) ?: return@executeTransaction

View file

@ -14,6 +14,7 @@ import com.habitrpg.android.habitica.models.TeamPlan
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.TaskDirection
import com.habitrpg.android.habitica.models.responses.UnlockResponse
import com.habitrpg.android.habitica.models.responses.VerifyUsernameResponse
import com.habitrpg.android.habitica.models.social.Group
@ -287,9 +288,14 @@ class UserRepositoryImpl(localRepository: UserLocalRepository, apiClient: ApiCli
user
}
if (tasks.isNotEmpty()) {
val scoringList = mutableListOf<Map<String, String>>()
for (task in tasks) {
observable = observable.flatMap { taskRepository.taskChecked(null, task, true, true, null).firstElement() }
val map = mutableMapOf<String, String>()
map["id"] = task.id ?: ""
map["direction"] = TaskDirection.UP.text
scoringList.add(map)
}
observable = observable.flatMap { taskRepository.bulkScoreTasks(scoringList).firstElement() }
}
observable.flatMap { apiClient.runCron().firstElement() }
.flatMap { this.retrieveUser(withTasks = true, forced = true).firstElement() }

View file

@ -0,0 +1,28 @@
package com.habitrpg.android.habitica.models.responses
import com.google.gson.annotations.SerializedName
import com.habitrpg.android.habitica.models.user.Buffs
import com.habitrpg.android.habitica.models.user.Training
class BulkTaskScoringData {
@SerializedName("con")
var constitution: Int? = null
@SerializedName("str")
var strength: Int? = null
@SerializedName("per")
var per: Int? = null
@SerializedName("int")
var intelligence: Int? = null
var training: Training? = null
var buffs: Buffs? = null
var points: Int? = null
var lvl: Int? = null
@SerializedName("class")
var habitClass: String? = null
var gp: Double? = null
var exp: Double? = null
var mp: Double? = null
var hp: Double? = null
var tasks: List<TaskDirectionData> = listOf()
}