mirror of
https://github.com/sudoxnym/habitica-android.git
synced 2026-07-13 17:51:57 +00:00
Improve cron. Fixes #1380
This commit is contained in:
parent
81a9065e00
commit
de34a41ef4
7 changed files with 49 additions and 1 deletions
|
|
@ -103,6 +103,8 @@ interface ApiService {
|
||||||
|
|
||||||
@POST("tasks/{id}/score/{direction}")
|
@POST("tasks/{id}/score/{direction}")
|
||||||
fun postTaskDirection(@Path("id") id: String, @Path("direction") direction: String): Flowable<HabitResponse<TaskDirectionData>>
|
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}")
|
@POST("tasks/{id}/move/to/{position}")
|
||||||
fun postTaskNewPosition(@Path("id") id: String, @Path("position") position: Int): Flowable<HabitResponse<List<String>>>
|
fun postTaskNewPosition(@Path("id") id: String, @Path("position") position: Int): Flowable<HabitResponse<List<String>>>
|
||||||
|
|
|
||||||
|
|
@ -80,6 +80,7 @@ interface ApiClient {
|
||||||
fun getTask(id: String): Flowable<Task>
|
fun getTask(id: String): Flowable<Task>
|
||||||
|
|
||||||
fun postTaskDirection(id: String, direction: String): Flowable<TaskDirectionData>
|
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>>
|
fun postTaskNewPosition(id: String, position: Int): Flowable<List<String>>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,7 @@
|
||||||
package com.habitrpg.android.habitica.data
|
package com.habitrpg.android.habitica.data
|
||||||
|
|
||||||
import com.habitrpg.android.habitica.models.BaseObject
|
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.responses.TaskScoringResult
|
||||||
import com.habitrpg.android.habitica.models.tasks.RemindersItem
|
import com.habitrpg.android.habitica.models.tasks.RemindersItem
|
||||||
import com.habitrpg.android.habitica.models.tasks.Task
|
import com.habitrpg.android.habitica.models.tasks.Task
|
||||||
|
|
@ -62,4 +63,5 @@ interface TaskRepository : BaseRepository {
|
||||||
fun syncErroredTasks(): Single<List<Task>>
|
fun syncErroredTasks(): Single<List<Task>>
|
||||||
fun unlinkAllTasks(challengeID: String?, keepOption: String): Flowable<Void>
|
fun unlinkAllTasks(challengeID: String?, keepOption: String): Flowable<Void>
|
||||||
fun getTasksForChallenge(challengeID: String?): Flowable<RealmResults<Task>>
|
fun getTasksForChallenge(challengeID: String?): Flowable<RealmResults<Task>>
|
||||||
|
fun bulkScoreTasks(data: List<Map<String, String>>): Flowable<BulkTaskScoringData>
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -421,6 +421,10 @@ class ApiClientImpl//private OnHabitsAPIResult mResultListener;
|
||||||
return apiService.postTaskDirection(id, direction).compose(configureApiCallObserver())
|
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>> {
|
override fun postTaskNewPosition(id: String, position: Int): Flowable<List<String>> {
|
||||||
return apiService.postTaskNewPosition(id, position).compose(configureApiCallObserver())
|
return apiService.postTaskNewPosition(id, position).compose(configureApiCallObserver())
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -7,6 +7,7 @@ import com.habitrpg.android.habitica.helpers.AppConfigManager
|
||||||
import com.habitrpg.android.habitica.helpers.RxErrorHandler
|
import com.habitrpg.android.habitica.helpers.RxErrorHandler
|
||||||
import com.habitrpg.android.habitica.interactors.ScoreTaskLocallyInteractor
|
import com.habitrpg.android.habitica.interactors.ScoreTaskLocallyInteractor
|
||||||
import com.habitrpg.android.habitica.models.BaseObject
|
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.TaskDirection
|
||||||
import com.habitrpg.android.habitica.models.responses.TaskDirectionData
|
import com.habitrpg.android.habitica.models.responses.TaskDirectionData
|
||||||
import com.habitrpg.android.habitica.models.responses.TaskScoringResult
|
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) {
|
private fun handleTaskResponse(user: User, res: TaskDirectionData, task: Task, up: Boolean, localDelta: Float) {
|
||||||
this.localRepository.executeTransaction {
|
this.localRepository.executeTransaction {
|
||||||
val bgTask = localRepository.getLiveObject(task) ?: return@executeTransaction
|
val bgTask = localRepository.getLiveObject(task) ?: return@executeTransaction
|
||||||
|
|
|
||||||
|
|
@ -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.Customization
|
||||||
import com.habitrpg.android.habitica.models.inventory.CustomizationSet
|
import com.habitrpg.android.habitica.models.inventory.CustomizationSet
|
||||||
import com.habitrpg.android.habitica.models.responses.SkillResponse
|
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.UnlockResponse
|
||||||
import com.habitrpg.android.habitica.models.responses.VerifyUsernameResponse
|
import com.habitrpg.android.habitica.models.responses.VerifyUsernameResponse
|
||||||
import com.habitrpg.android.habitica.models.social.Group
|
import com.habitrpg.android.habitica.models.social.Group
|
||||||
|
|
@ -287,9 +288,14 @@ class UserRepositoryImpl(localRepository: UserLocalRepository, apiClient: ApiCli
|
||||||
user
|
user
|
||||||
}
|
}
|
||||||
if (tasks.isNotEmpty()) {
|
if (tasks.isNotEmpty()) {
|
||||||
|
val scoringList = mutableListOf<Map<String, String>>()
|
||||||
for (task in tasks) {
|
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() }
|
observable.flatMap { apiClient.runCron().firstElement() }
|
||||||
.flatMap { this.retrieveUser(withTasks = true, forced = true).firstElement() }
|
.flatMap { this.retrieveUser(withTasks = true, forced = true).firstElement() }
|
||||||
|
|
|
||||||
|
|
@ -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()
|
||||||
|
}
|
||||||
Loading…
Reference in a new issue