BayernMessenger/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/group/GetGroupDataWorker.kt

41 lines
1.3 KiB
Kotlin

package im.vector.matrix.android.internal.session.group
import android.content.Context
import androidx.work.Worker
import androidx.work.WorkerParameters
import arrow.core.Try
import com.squareup.moshi.JsonClass
import im.vector.matrix.android.internal.util.WorkerParamsFactory
import org.koin.standalone.KoinComponent
import org.koin.standalone.inject
internal class GetGroupDataWorker(context: Context,
workerParameters: WorkerParameters
) : Worker(context, workerParameters), KoinComponent {
@JsonClass(generateAdapter = true)
internal data class Params(
val groupIds: List<String>,
val updateIndexes: List<Int>,
val deletionIndexes: List<Int>
)
private val getGroupDataRequest by inject<GetGroupDataRequest>()
override fun doWork(): Result {
val params = WorkerParamsFactory.fromData<Params>(inputData)
?: return Result.failure()
val results = params.updateIndexes.map { index ->
val groupId = params.groupIds[index]
fetchGroupData(groupId)
}
val isSuccessful = results.none { it.isFailure() }
return if (isSuccessful) Result.success() else Result.retry()
}
private fun fetchGroupData(groupId: String): Try<Unit> {
return getGroupDataRequest.getGroupData(groupId)
}
}