mirror of
https://github.com/vector-im/element-android.git
synced 2024-11-16 02:05:06 +08:00
Refactoring / PruneWorker should be a task not a worker
This commit is contained in:
parent
71e364b42f
commit
64c307077f
@ -154,7 +154,7 @@ internal class SessionModule(private val sessionParams: SessionParams) {
|
|||||||
|
|
||||||
scope(DefaultSession.SCOPE) {
|
scope(DefaultSession.SCOPE) {
|
||||||
val groupSummaryUpdater = GroupSummaryUpdater(get())
|
val groupSummaryUpdater = GroupSummaryUpdater(get())
|
||||||
val eventsPruner = EventsPruner(get(), get())
|
val eventsPruner = EventsPruner(get(), get(), get(), get())
|
||||||
val userEntityUpdater = UserEntityUpdater(get(), get(), get())
|
val userEntityUpdater = UserEntityUpdater(get(), get(), get())
|
||||||
listOf<LiveEntityObserver>(groupSummaryUpdater, eventsPruner, userEntityUpdater)
|
listOf<LiveEntityObserver>(groupSummaryUpdater, eventsPruner, userEntityUpdater)
|
||||||
}
|
}
|
||||||
|
@ -21,24 +21,14 @@ import im.vector.matrix.android.internal.session.room.annotation.DefaultFindReac
|
|||||||
import im.vector.matrix.android.internal.session.room.annotation.FindReactionEventForUndoTask
|
import im.vector.matrix.android.internal.session.room.annotation.FindReactionEventForUndoTask
|
||||||
import im.vector.matrix.android.internal.session.room.create.CreateRoomTask
|
import im.vector.matrix.android.internal.session.room.create.CreateRoomTask
|
||||||
import im.vector.matrix.android.internal.session.room.create.DefaultCreateRoomTask
|
import im.vector.matrix.android.internal.session.room.create.DefaultCreateRoomTask
|
||||||
import im.vector.matrix.android.internal.session.room.membership.DefaultLoadRoomMembersTask
|
import im.vector.matrix.android.internal.session.room.prune.PruneEventTask
|
||||||
import im.vector.matrix.android.internal.session.room.membership.LoadRoomMembersTask
|
import im.vector.matrix.android.internal.session.room.prune.DefaultPruneEventTask
|
||||||
import im.vector.matrix.android.internal.session.room.membership.joining.DefaultInviteTask
|
|
||||||
import im.vector.matrix.android.internal.session.room.membership.joining.DefaultJoinRoomTask
|
|
||||||
import im.vector.matrix.android.internal.session.room.membership.joining.InviteTask
|
|
||||||
import im.vector.matrix.android.internal.session.room.membership.joining.JoinRoomTask
|
|
||||||
import im.vector.matrix.android.internal.session.room.membership.leaving.DefaultLeaveRoomTask
|
|
||||||
import im.vector.matrix.android.internal.session.room.membership.leaving.LeaveRoomTask
|
|
||||||
import im.vector.matrix.android.internal.session.room.read.DefaultSetReadMarkersTask
|
import im.vector.matrix.android.internal.session.room.read.DefaultSetReadMarkersTask
|
||||||
import im.vector.matrix.android.internal.session.room.read.SetReadMarkersTask
|
import im.vector.matrix.android.internal.session.room.read.SetReadMarkersTask
|
||||||
import im.vector.matrix.android.internal.session.room.send.LocalEchoEventFactory
|
import im.vector.matrix.android.internal.session.room.send.LocalEchoEventFactory
|
||||||
import im.vector.matrix.android.internal.session.room.state.DefaultSendStateTask
|
import im.vector.matrix.android.internal.session.room.state.DefaultSendStateTask
|
||||||
import im.vector.matrix.android.internal.session.room.state.SendStateTask
|
import im.vector.matrix.android.internal.session.room.state.SendStateTask
|
||||||
import im.vector.matrix.android.internal.session.room.timeline.DefaultGetContextOfEventTask
|
import im.vector.matrix.android.internal.session.room.timeline.*
|
||||||
import im.vector.matrix.android.internal.session.room.timeline.DefaultPaginationTask
|
|
||||||
import im.vector.matrix.android.internal.session.room.timeline.GetContextOfEventTask
|
|
||||||
import im.vector.matrix.android.internal.session.room.timeline.PaginationTask
|
|
||||||
import im.vector.matrix.android.internal.session.room.timeline.TokenChunkEventPersistor
|
|
||||||
import org.koin.dsl.module.module
|
import org.koin.dsl.module.module
|
||||||
import retrofit2.Retrofit
|
import retrofit2.Retrofit
|
||||||
|
|
||||||
@ -104,6 +94,9 @@ class RoomModule {
|
|||||||
DefaultFindReactionEventForUndoTask(get()) as FindReactionEventForUndoTask
|
DefaultFindReactionEventForUndoTask(get()) as FindReactionEventForUndoTask
|
||||||
}
|
}
|
||||||
|
|
||||||
|
scope(DefaultSession.SCOPE) {
|
||||||
|
DefaultPruneEventTask(get()) as PruneEventTask
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -16,9 +16,6 @@
|
|||||||
|
|
||||||
package im.vector.matrix.android.internal.session.room.prune
|
package im.vector.matrix.android.internal.session.room.prune
|
||||||
|
|
||||||
import androidx.work.ExistingWorkPolicy
|
|
||||||
import androidx.work.OneTimeWorkRequestBuilder
|
|
||||||
import androidx.work.WorkManager
|
|
||||||
import com.zhuinden.monarchy.Monarchy
|
import com.zhuinden.monarchy.Monarchy
|
||||||
import im.vector.matrix.android.api.auth.data.Credentials
|
import im.vector.matrix.android.api.auth.data.Credentials
|
||||||
import im.vector.matrix.android.api.session.events.model.EventType
|
import im.vector.matrix.android.api.session.events.model.EventType
|
||||||
@ -26,11 +23,14 @@ import im.vector.matrix.android.internal.database.RealmLiveEntityObserver
|
|||||||
import im.vector.matrix.android.internal.database.mapper.asDomain
|
import im.vector.matrix.android.internal.database.mapper.asDomain
|
||||||
import im.vector.matrix.android.internal.database.model.EventEntity
|
import im.vector.matrix.android.internal.database.model.EventEntity
|
||||||
import im.vector.matrix.android.internal.database.query.where
|
import im.vector.matrix.android.internal.database.query.where
|
||||||
import im.vector.matrix.android.internal.util.WorkerParamsFactory
|
import im.vector.matrix.android.internal.task.TaskExecutor
|
||||||
|
import im.vector.matrix.android.internal.task.configureWith
|
||||||
|
|
||||||
private const val PRUNE_EVENT_WORKER = "PRUNE_EVENT_WORKER"
|
|
||||||
|
|
||||||
internal class EventsPruner(monarchy: Monarchy, private val credentials: Credentials) :
|
internal class EventsPruner(monarchy: Monarchy,
|
||||||
|
private val credentials: Credentials,
|
||||||
|
private val pruneEventTask: PruneEventTask,
|
||||||
|
private val taskExecutor: TaskExecutor) :
|
||||||
RealmLiveEntityObserver<EventEntity>(monarchy) {
|
RealmLiveEntityObserver<EventEntity>(monarchy) {
|
||||||
|
|
||||||
override val query = Monarchy.Query<EventEntity> { EventEntity.where(it, type = EventType.REDACTION) }
|
override val query = Monarchy.Query<EventEntity> { EventEntity.where(it, type = EventType.REDACTION) }
|
||||||
@ -39,16 +39,14 @@ internal class EventsPruner(monarchy: Monarchy, private val credentials: Credent
|
|||||||
val redactionEvents = inserted
|
val redactionEvents = inserted
|
||||||
.mapNotNull { it.asDomain() }
|
.mapNotNull { it.asDomain() }
|
||||||
|
|
||||||
val pruneEventWorkerParams = PruneEventWorker.Params(redactionEvents, credentials.userId)
|
val params = PruneEventTask.Params(
|
||||||
val workData = WorkerParamsFactory.toData(pruneEventWorkerParams)
|
redactionEvents,
|
||||||
|
credentials.userId
|
||||||
|
)
|
||||||
|
|
||||||
val sendWork = OneTimeWorkRequestBuilder<PruneEventWorker>()
|
pruneEventTask.configureWith(params)
|
||||||
.setInputData(workData)
|
.executeBy(taskExecutor)
|
||||||
.build()
|
|
||||||
|
|
||||||
WorkManager.getInstance()
|
|
||||||
.beginUniqueWork(PRUNE_EVENT_WORKER, ExistingWorkPolicy.APPEND, sendWork)
|
|
||||||
.enqueue()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
@ -13,13 +13,9 @@
|
|||||||
* See the License for the specific language governing permissions and
|
* See the License for the specific language governing permissions and
|
||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package im.vector.matrix.android.internal.session.room.prune
|
package im.vector.matrix.android.internal.session.room.prune
|
||||||
|
|
||||||
import android.content.Context
|
import arrow.core.Try
|
||||||
import androidx.work.Worker
|
|
||||||
import androidx.work.WorkerParameters
|
|
||||||
import com.squareup.moshi.JsonClass
|
|
||||||
import com.zhuinden.monarchy.Monarchy
|
import com.zhuinden.monarchy.Monarchy
|
||||||
import im.vector.matrix.android.api.session.events.model.Event
|
import im.vector.matrix.android.api.session.events.model.Event
|
||||||
import im.vector.matrix.android.api.session.events.model.EventType
|
import im.vector.matrix.android.api.session.events.model.EventType
|
||||||
@ -32,41 +28,30 @@ import im.vector.matrix.android.internal.database.model.EventAnnotationsSummaryE
|
|||||||
import im.vector.matrix.android.internal.database.model.EventEntity
|
import im.vector.matrix.android.internal.database.model.EventEntity
|
||||||
import im.vector.matrix.android.internal.database.model.ReactionAggregatedSummaryEntityFields
|
import im.vector.matrix.android.internal.database.model.ReactionAggregatedSummaryEntityFields
|
||||||
import im.vector.matrix.android.internal.database.query.where
|
import im.vector.matrix.android.internal.database.query.where
|
||||||
import im.vector.matrix.android.internal.di.MatrixKoinComponent
|
|
||||||
import im.vector.matrix.android.internal.di.MoshiProvider
|
import im.vector.matrix.android.internal.di.MoshiProvider
|
||||||
import im.vector.matrix.android.internal.util.WorkerParamsFactory
|
import im.vector.matrix.android.internal.task.Task
|
||||||
import im.vector.matrix.android.internal.util.tryTransactionSync
|
import im.vector.matrix.android.internal.util.tryTransactionSync
|
||||||
import io.realm.Realm
|
import io.realm.Realm
|
||||||
import org.koin.standalone.inject
|
|
||||||
import timber.log.Timber
|
import timber.log.Timber
|
||||||
|
|
||||||
//TODO should be a task instead of worker
|
|
||||||
internal class PruneEventWorker(context: Context,
|
|
||||||
workerParameters: WorkerParameters
|
|
||||||
) : Worker(context, workerParameters), MatrixKoinComponent {
|
|
||||||
|
|
||||||
@JsonClass(generateAdapter = true)
|
internal interface PruneEventTask : Task<PruneEventTask.Params, Unit> {
|
||||||
internal class Params(
|
|
||||||
|
data class Params(
|
||||||
val redactionEvents: List<Event>,
|
val redactionEvents: List<Event>,
|
||||||
val userId: String
|
val userId: String
|
||||||
)
|
)
|
||||||
|
|
||||||
private val monarchy by inject<Monarchy>()
|
}
|
||||||
|
|
||||||
override fun doWork(): Result {
|
internal class DefaultPruneEventTask(private val monarchy: Monarchy) : PruneEventTask {
|
||||||
val params = WorkerParamsFactory.fromData<Params>(inputData)
|
|
||||||
?: return Result.failure()
|
|
||||||
|
|
||||||
val result = monarchy.tryTransactionSync { realm ->
|
override fun execute(params: PruneEventTask.Params): Try<Unit> {
|
||||||
|
return monarchy.tryTransactionSync { realm ->
|
||||||
params.redactionEvents.forEach { event ->
|
params.redactionEvents.forEach { event ->
|
||||||
pruneEvent(realm, event, params.userId)
|
pruneEvent(realm, event, params.userId)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return result.fold({
|
|
||||||
Result.retry()
|
|
||||||
}, {
|
|
||||||
Result.success()
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun pruneEvent(realm: Realm, redactionEvent: Event, userId: String) {
|
private fun pruneEvent(realm: Realm, redactionEvent: Event, userId: String) {
|
||||||
@ -154,5 +139,4 @@ internal class PruneEventWorker(context: Context,
|
|||||||
else -> emptyList()
|
else -> emptyList()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
Loading…
Reference in New Issue
Block a user