Let GetProfileInfoTask store result into DB, except when we want to do bulk insertion.
This commit is contained in:
		
							parent
							
								
									0a6d620f27
								
							
						
					
					
						commit
						5a2d74443d
					
				@ -17,26 +17,39 @@
 | 
			
		||||
 | 
			
		||||
package org.matrix.android.sdk.internal.session.profile
 | 
			
		||||
 | 
			
		||||
import com.zhuinden.monarchy.Monarchy
 | 
			
		||||
import org.matrix.android.sdk.api.session.user.model.User
 | 
			
		||||
import org.matrix.android.sdk.api.util.JsonDict
 | 
			
		||||
import org.matrix.android.sdk.internal.network.GlobalErrorReceiver
 | 
			
		||||
import org.matrix.android.sdk.internal.network.executeRequest
 | 
			
		||||
import org.matrix.android.sdk.internal.session.user.UserEntityFactory
 | 
			
		||||
import org.matrix.android.sdk.internal.task.Task
 | 
			
		||||
import org.matrix.android.sdk.internal.util.awaitTransaction
 | 
			
		||||
import javax.inject.Inject
 | 
			
		||||
 | 
			
		||||
internal abstract class GetProfileInfoTask : Task<GetProfileInfoTask.Params, JsonDict> {
 | 
			
		||||
    data class Params(
 | 
			
		||||
            val userId: String
 | 
			
		||||
            val userId: String,
 | 
			
		||||
            val storeInDatabase: Boolean = true,
 | 
			
		||||
    )
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
internal class DefaultGetProfileInfoTask @Inject constructor(
 | 
			
		||||
        private val profileAPI: ProfileAPI,
 | 
			
		||||
        private val globalErrorReceiver: GlobalErrorReceiver
 | 
			
		||||
        private val globalErrorReceiver: GlobalErrorReceiver,
 | 
			
		||||
        private val monarchy: Monarchy,
 | 
			
		||||
) : GetProfileInfoTask() {
 | 
			
		||||
 | 
			
		||||
    override suspend fun execute(params: Params): JsonDict {
 | 
			
		||||
        return executeRequest(globalErrorReceiver) {
 | 
			
		||||
            profileAPI.getProfile(params.userId)
 | 
			
		||||
        }.also { user ->
 | 
			
		||||
            if (params.storeInDatabase) {
 | 
			
		||||
                // Insert into DB
 | 
			
		||||
                monarchy.awaitTransaction {
 | 
			
		||||
                    it.insertOrUpdate(UserEntityFactory.create(User.fromJson(params.userId, user)))
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -71,10 +71,16 @@ internal class UpdateUserWorker(context: Context, params: WorkerParameters, sess
 | 
			
		||||
                ?.saveLocally()
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private suspend fun fetchUsers(userIdsToFetch: Collection<String>) = userIdsToFetch.mapNotNull {
 | 
			
		||||
        tryOrNull {
 | 
			
		||||
            val profileJson = getProfileInfoTask.execute(GetProfileInfoTask.Params(it))
 | 
			
		||||
            User.fromJson(it, profileJson)
 | 
			
		||||
    private suspend fun fetchUsers(userIdsToFetch: Collection<String>): List<User> {
 | 
			
		||||
        return userIdsToFetch.mapNotNull { userId ->
 | 
			
		||||
            tryOrNull {
 | 
			
		||||
                val profileJson = getProfileInfoTask.execute(GetProfileInfoTask.Params(
 | 
			
		||||
                        userId = userId,
 | 
			
		||||
                        // Bulk insert later, so tell the task not to store the User.
 | 
			
		||||
                        storeInDatabase = false,
 | 
			
		||||
                ))
 | 
			
		||||
                User.fromJson(userId, profileJson)
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user