forked from GitHub-Mirror/riotX-android
Dagger: continue adding it to SDK [WIP]
This commit is contained in:
parent
3d465f6fdf
commit
4be0ab87fc
@ -36,7 +36,7 @@ import javax.inject.Inject
|
|||||||
* non-production environment.
|
* non-production environment.
|
||||||
*/
|
*/
|
||||||
@MatrixScope
|
@MatrixScope
|
||||||
internal class CurlLoggingInterceptor @Inject constructor(private val logger: HttpLoggingInterceptor.Logger = HttpLoggingInterceptor.Logger.DEFAULT)
|
internal class CurlLoggingInterceptor @Inject constructor(private val logger: HttpLoggingInterceptor.Logger)
|
||||||
: Interceptor {
|
: Interceptor {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -0,0 +1,43 @@
|
|||||||
|
/*
|
||||||
|
*
|
||||||
|
* * Copyright 2019 New Vector Ltd
|
||||||
|
* *
|
||||||
|
* * Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* * you may not use this file except in compliance with the License.
|
||||||
|
* * You may obtain a copy of the License at
|
||||||
|
* *
|
||||||
|
* * http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
* *
|
||||||
|
* * Unless required by applicable law or agreed to in writing, software
|
||||||
|
* * distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* * See the License for the specific language governing permissions and
|
||||||
|
* * limitations under the License.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
package im.vector.matrix.android.internal
|
||||||
|
|
||||||
|
import im.vector.matrix.android.api.session.Session
|
||||||
|
import im.vector.matrix.android.internal.di.MatrixScope
|
||||||
|
import im.vector.matrix.android.internal.session.SessionComponent
|
||||||
|
import javax.inject.Inject
|
||||||
|
|
||||||
|
@MatrixScope
|
||||||
|
internal class SessionManager @Inject constructor() {
|
||||||
|
|
||||||
|
private val sessionComponents = HashMap<String, SessionComponent>()
|
||||||
|
private val sessions = HashMap<String, Session>()
|
||||||
|
|
||||||
|
fun createSession(userId: String): Session? {
|
||||||
|
if (sessionComponents.containsKey(userId)) {
|
||||||
|
throw RuntimeException("You already have a session for the user $userId")
|
||||||
|
}
|
||||||
|
return null
|
||||||
|
}
|
||||||
|
|
||||||
|
fun releaseSession(userId: String) {
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
@ -17,27 +17,43 @@
|
|||||||
package im.vector.matrix.android.internal.auth
|
package im.vector.matrix.android.internal.auth
|
||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
|
import dagger.Binds
|
||||||
import dagger.Module
|
import dagger.Module
|
||||||
import dagger.Provides
|
import dagger.Provides
|
||||||
import im.vector.matrix.android.internal.auth.db.AuthRealmModule
|
import im.vector.matrix.android.internal.auth.db.AuthRealmModule
|
||||||
|
import im.vector.matrix.android.internal.auth.db.RealmSessionParamsStore
|
||||||
import im.vector.matrix.android.internal.di.MatrixScope
|
import im.vector.matrix.android.internal.di.MatrixScope
|
||||||
|
import im.vector.matrix.android.internal.session.SessionScope
|
||||||
|
import im.vector.matrix.android.internal.session.cache.ClearCacheTask
|
||||||
|
import im.vector.matrix.android.internal.session.cache.RealmClearCacheTask
|
||||||
import io.realm.RealmConfiguration
|
import io.realm.RealmConfiguration
|
||||||
import java.io.File
|
import java.io.File
|
||||||
|
import javax.inject.Named
|
||||||
|
|
||||||
@Module
|
@Module
|
||||||
internal class AuthModule {
|
internal abstract class AuthModule {
|
||||||
|
|
||||||
@Provides
|
@Module
|
||||||
@MatrixScope
|
companion object {
|
||||||
fun providesRealmConfiguration(context: Context): RealmConfiguration {
|
@Provides
|
||||||
val old = File(context.filesDir, "matrix-sdk-auth")
|
@MatrixScope
|
||||||
if (old.exists()) {
|
@Named("AuthRealmConfiguration")
|
||||||
old.renameTo(File(context.filesDir, "matrix-sdk-auth.realm"))
|
fun providesRealmConfiguration(context: Context): RealmConfiguration {
|
||||||
|
val old = File(context.filesDir, "matrix-sdk-auth")
|
||||||
|
if (old.exists()) {
|
||||||
|
old.renameTo(File(context.filesDir, "matrix-sdk-auth.realm"))
|
||||||
|
}
|
||||||
|
return RealmConfiguration.Builder()
|
||||||
|
.name("matrix-sdk-auth.realm")
|
||||||
|
.modules(AuthRealmModule())
|
||||||
|
.deleteRealmIfMigrationNeeded()
|
||||||
|
.build()
|
||||||
}
|
}
|
||||||
return RealmConfiguration.Builder()
|
|
||||||
.name("matrix-sdk-auth.realm")
|
|
||||||
.modules(AuthRealmModule())
|
|
||||||
.deleteRealmIfMigrationNeeded()
|
|
||||||
.build()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Binds
|
||||||
|
@MatrixScope
|
||||||
|
abstract fun bindSessionParamsStore(sessionParamsStore: RealmSessionParamsStore): SessionParamsStore
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -24,12 +24,11 @@ import im.vector.matrix.android.api.auth.data.HomeServerConnectionConfig
|
|||||||
import im.vector.matrix.android.api.auth.data.SessionParams
|
import im.vector.matrix.android.api.auth.data.SessionParams
|
||||||
import im.vector.matrix.android.api.session.Session
|
import im.vector.matrix.android.api.session.Session
|
||||||
import im.vector.matrix.android.api.util.Cancelable
|
import im.vector.matrix.android.api.util.Cancelable
|
||||||
|
import im.vector.matrix.android.internal.SessionManager
|
||||||
import im.vector.matrix.android.internal.auth.data.PasswordLoginParams
|
import im.vector.matrix.android.internal.auth.data.PasswordLoginParams
|
||||||
import im.vector.matrix.android.internal.auth.data.ThreePidMedium
|
import im.vector.matrix.android.internal.auth.data.ThreePidMedium
|
||||||
import im.vector.matrix.android.internal.di.MatrixScope
|
import im.vector.matrix.android.internal.di.MatrixScope
|
||||||
import im.vector.matrix.android.internal.network.executeRequest
|
import im.vector.matrix.android.internal.network.executeRequest
|
||||||
import im.vector.matrix.android.internal.session.DefaultSession
|
|
||||||
import im.vector.matrix.android.internal.session.SessionFactory
|
|
||||||
import im.vector.matrix.android.internal.util.CancelableCoroutine
|
import im.vector.matrix.android.internal.util.CancelableCoroutine
|
||||||
import im.vector.matrix.android.internal.util.MatrixCoroutineDispatchers
|
import im.vector.matrix.android.internal.util.MatrixCoroutineDispatchers
|
||||||
import kotlinx.coroutines.GlobalScope
|
import kotlinx.coroutines.GlobalScope
|
||||||
@ -37,13 +36,12 @@ import kotlinx.coroutines.launch
|
|||||||
import kotlinx.coroutines.withContext
|
import kotlinx.coroutines.withContext
|
||||||
import retrofit2.Retrofit
|
import retrofit2.Retrofit
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
import kotlin.random.Random
|
|
||||||
|
|
||||||
@MatrixScope
|
@MatrixScope
|
||||||
internal class DefaultAuthenticator @Inject constructor(private val retrofitBuilder: Retrofit.Builder,
|
internal class DefaultAuthenticator @Inject constructor(private val retrofitBuilder: Retrofit.Builder,
|
||||||
private val coroutineDispatchers: MatrixCoroutineDispatchers,
|
private val coroutineDispatchers: MatrixCoroutineDispatchers,
|
||||||
private val sessionParamsStore: SessionParamsStore,
|
private val sessionParamsStore: SessionParamsStore,
|
||||||
private val sessionFactory: DefaultSession.Factory
|
private val sessionManager: SessionManager
|
||||||
) : Authenticator {
|
) : Authenticator {
|
||||||
|
|
||||||
override fun hasActiveSessions(): Boolean {
|
override fun hasActiveSessions(): Boolean {
|
||||||
@ -53,7 +51,7 @@ internal class DefaultAuthenticator @Inject constructor(private val retrofitBuil
|
|||||||
override fun getLastActiveSession(): Session? {
|
override fun getLastActiveSession(): Session? {
|
||||||
val sessionParams = sessionParamsStore.get()
|
val sessionParams = sessionParamsStore.get()
|
||||||
return sessionParams?.let {
|
return sessionParams?.let {
|
||||||
sessionFactory.create(it)
|
sessionManager.createSession(it.credentials.userId)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -87,7 +85,7 @@ internal class DefaultAuthenticator @Inject constructor(private val retrofitBuil
|
|||||||
sessionParamsStore.save(sessionParams)
|
sessionParamsStore.save(sessionParams)
|
||||||
sessionParams
|
sessionParams
|
||||||
}.map {
|
}.map {
|
||||||
sessionFactory.create(it)
|
sessionManager.createSession(it.credentials.userId)!!
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -23,9 +23,11 @@ import im.vector.matrix.android.internal.di.MatrixScope
|
|||||||
import io.realm.Realm
|
import io.realm.Realm
|
||||||
import io.realm.RealmConfiguration
|
import io.realm.RealmConfiguration
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
import javax.inject.Named
|
||||||
|
|
||||||
@MatrixScope
|
@MatrixScope
|
||||||
internal class RealmSessionParamsStore @Inject constructor(private val mapper: SessionParamsMapper,
|
internal class RealmSessionParamsStore @Inject constructor(private val mapper: SessionParamsMapper,
|
||||||
|
@Named("AuthRealmConfiguration")
|
||||||
private val realmConfiguration: RealmConfiguration) : SessionParamsStore {
|
private val realmConfiguration: RealmConfiguration) : SessionParamsStore {
|
||||||
|
|
||||||
override fun save(sessionParams: SessionParams): Try<SessionParams> {
|
override fun save(sessionParams: SessionParams): Try<SessionParams> {
|
||||||
|
@ -17,11 +17,14 @@
|
|||||||
package im.vector.matrix.android.internal.auth.db
|
package im.vector.matrix.android.internal.auth.db
|
||||||
|
|
||||||
import com.squareup.moshi.Moshi
|
import com.squareup.moshi.Moshi
|
||||||
import im.vector.matrix.android.api.auth.data.HomeServerConnectionConfig
|
|
||||||
import im.vector.matrix.android.api.auth.data.Credentials
|
import im.vector.matrix.android.api.auth.data.Credentials
|
||||||
|
import im.vector.matrix.android.api.auth.data.HomeServerConnectionConfig
|
||||||
import im.vector.matrix.android.api.auth.data.SessionParams
|
import im.vector.matrix.android.api.auth.data.SessionParams
|
||||||
|
import im.vector.matrix.android.internal.di.MatrixScope
|
||||||
|
import javax.inject.Inject
|
||||||
|
|
||||||
internal class SessionParamsMapper(moshi: Moshi) {
|
@MatrixScope
|
||||||
|
internal class SessionParamsMapper @Inject constructor(moshi: Moshi) {
|
||||||
|
|
||||||
private val credentialsAdapter = moshi.adapter(Credentials::class.java)
|
private val credentialsAdapter = moshi.adapter(Credentials::class.java)
|
||||||
private val homeServerConnectionConfigAdapter = moshi.adapter(HomeServerConnectionConfig::class.java)
|
private val homeServerConnectionConfigAdapter = moshi.adapter(HomeServerConnectionConfig::class.java)
|
||||||
|
@ -31,6 +31,7 @@ import im.vector.matrix.android.internal.session.SessionScope
|
|||||||
import io.realm.RealmConfiguration
|
import io.realm.RealmConfiguration
|
||||||
import retrofit2.Retrofit
|
import retrofit2.Retrofit
|
||||||
import java.io.File
|
import java.io.File
|
||||||
|
import javax.inject.Named
|
||||||
|
|
||||||
@Module
|
@Module
|
||||||
internal class CryptoModule {
|
internal class CryptoModule {
|
||||||
@ -38,6 +39,7 @@ internal class CryptoModule {
|
|||||||
// Realm configuration, named to avoid clash with main cache realm configuration
|
// Realm configuration, named to avoid clash with main cache realm configuration
|
||||||
@Provides
|
@Provides
|
||||||
@SessionScope
|
@SessionScope
|
||||||
|
@Named("CryptonRealmConfiguration")
|
||||||
fun providesRealmConfiguration(context: Context, credentials: Credentials): RealmConfiguration {
|
fun providesRealmConfiguration(context: Context, credentials: Credentials): RealmConfiguration {
|
||||||
return RealmConfiguration.Builder()
|
return RealmConfiguration.Builder()
|
||||||
.directory(File(context.filesDir, credentials.userId.hash()))
|
.directory(File(context.filesDir, credentials.userId.hash()))
|
||||||
@ -50,10 +52,11 @@ internal class CryptoModule {
|
|||||||
|
|
||||||
@Provides
|
@Provides
|
||||||
@SessionScope
|
@SessionScope
|
||||||
fun providesCryptoStore(realmConfiguration: RealmConfiguration, credentials: Credentials): IMXCryptoStore {
|
fun providesCryptoStore(@Named("CryptonRealmConfiguration")
|
||||||
|
realmConfiguration: RealmConfiguration, credentials: Credentials): IMXCryptoStore {
|
||||||
return RealmCryptoStore(false /* TODO*/,
|
return RealmCryptoStore(false /* TODO*/,
|
||||||
realmConfiguration,
|
realmConfiguration,
|
||||||
credentials)
|
credentials)
|
||||||
}
|
}
|
||||||
|
|
||||||
@Provides
|
@Provides
|
||||||
|
@ -1,27 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright 2019 New Vector Ltd
|
|
||||||
*
|
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
* you may not use this file except in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
* See the License for the specific language governing permissions and
|
|
||||||
* limitations under the License.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package im.vector.matrix.android.internal.di
|
|
||||||
|
|
||||||
import android.content.Context
|
|
||||||
import androidx.work.ListenableWorker
|
|
||||||
import androidx.work.WorkerParameters
|
|
||||||
|
|
||||||
interface ChildWorkerFactory {
|
|
||||||
|
|
||||||
fun create(appContext: Context, params: WorkerParameters): ListenableWorker
|
|
||||||
|
|
||||||
}
|
|
@ -0,0 +1,26 @@
|
|||||||
|
/*
|
||||||
|
*
|
||||||
|
* * Copyright 2019 New Vector Ltd
|
||||||
|
* *
|
||||||
|
* * Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* * you may not use this file except in compliance with the License.
|
||||||
|
* * You may obtain a copy of the License at
|
||||||
|
* *
|
||||||
|
* * http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
* *
|
||||||
|
* * Unless required by applicable law or agreed to in writing, software
|
||||||
|
* * distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* * See the License for the specific language governing permissions and
|
||||||
|
* * limitations under the License.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
package im.vector.matrix.android.internal.di
|
||||||
|
|
||||||
|
import com.squareup.inject.assisted.dagger2.AssistedModule
|
||||||
|
import dagger.Module
|
||||||
|
|
||||||
|
@Module(includes = [AssistedInject_MatrixAssistedInjectModule::class])
|
||||||
|
@AssistedModule
|
||||||
|
internal interface MatrixAssistedInjectModule
|
@ -16,10 +16,32 @@
|
|||||||
|
|
||||||
package im.vector.matrix.android.internal.di
|
package im.vector.matrix.android.internal.di
|
||||||
|
|
||||||
|
import android.content.Context
|
||||||
|
import com.squareup.moshi.Moshi
|
||||||
|
import dagger.BindsInstance
|
||||||
import dagger.Component
|
import dagger.Component
|
||||||
|
import im.vector.matrix.android.internal.auth.AuthModule
|
||||||
|
import im.vector.matrix.android.internal.util.MatrixCoroutineDispatchers
|
||||||
|
import im.vector.matrix.android.internal.worker.WorkerBindingModule
|
||||||
|
import retrofit2.Retrofit
|
||||||
|
import java.net.Authenticator
|
||||||
|
|
||||||
@Component
|
|
||||||
|
@Component(modules = [MatrixModule::class, NetworkModule::class, AuthModule::class])
|
||||||
@MatrixScope
|
@MatrixScope
|
||||||
interface MatrixComponent {
|
internal interface MatrixComponent {
|
||||||
|
|
||||||
|
fun matrixCoroutineDispatchers(): MatrixCoroutineDispatchers
|
||||||
|
|
||||||
|
fun moshi(): Moshi
|
||||||
|
|
||||||
|
fun retrofitBuilder(): Retrofit.Builder
|
||||||
|
|
||||||
|
fun authenticator(): Authenticator
|
||||||
|
|
||||||
|
@Component.Factory
|
||||||
|
interface Factory {
|
||||||
|
fun create(@BindsInstance context: Context): MatrixComponent
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
@ -16,7 +16,6 @@
|
|||||||
|
|
||||||
package im.vector.matrix.android.internal.di
|
package im.vector.matrix.android.internal.di
|
||||||
|
|
||||||
import android.content.Context
|
|
||||||
import dagger.Module
|
import dagger.Module
|
||||||
import dagger.Provides
|
import dagger.Provides
|
||||||
import im.vector.matrix.android.internal.crypto.CryptoAsyncHelper
|
import im.vector.matrix.android.internal.crypto.CryptoAsyncHelper
|
||||||
@ -25,23 +24,17 @@ import kotlinx.coroutines.Dispatchers
|
|||||||
import kotlinx.coroutines.android.asCoroutineDispatcher
|
import kotlinx.coroutines.android.asCoroutineDispatcher
|
||||||
|
|
||||||
@Module
|
@Module
|
||||||
internal class MatrixModule(private val context: Context) {
|
internal class MatrixModule {
|
||||||
|
|
||||||
@Provides
|
|
||||||
@MatrixScope
|
|
||||||
fun providesContext(): Context {
|
|
||||||
return context
|
|
||||||
}
|
|
||||||
|
|
||||||
@Provides
|
@Provides
|
||||||
@MatrixScope
|
@MatrixScope
|
||||||
fun providesMatrixCoroutineDispatchers(): MatrixCoroutineDispatchers {
|
fun providesMatrixCoroutineDispatchers(): MatrixCoroutineDispatchers {
|
||||||
val cryptoHandler = CryptoAsyncHelper.getDecryptBackgroundHandler()
|
val cryptoHandler = CryptoAsyncHelper.getDecryptBackgroundHandler()
|
||||||
return MatrixCoroutineDispatchers(io = Dispatchers.IO,
|
return MatrixCoroutineDispatchers(io = Dispatchers.IO,
|
||||||
computation = Dispatchers.IO,
|
computation = Dispatchers.IO,
|
||||||
main = Dispatchers.Main,
|
main = Dispatchers.Main,
|
||||||
crypto = cryptoHandler.asCoroutineDispatcher("crypto")
|
crypto = cryptoHandler.asCoroutineDispatcher("crypto")
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
@ -42,7 +42,7 @@ import im.vector.matrix.android.internal.database.LiveEntityObserver
|
|||||||
import im.vector.matrix.android.internal.session.sync.job.SyncThread
|
import im.vector.matrix.android.internal.session.sync.job.SyncThread
|
||||||
import timber.log.Timber
|
import timber.log.Timber
|
||||||
|
|
||||||
|
@SessionScope
|
||||||
internal class DefaultSession @AssistedInject constructor(@Assisted override val sessionParams: SessionParams,
|
internal class DefaultSession @AssistedInject constructor(@Assisted override val sessionParams: SessionParams,
|
||||||
private val monarchy: Monarchy,
|
private val monarchy: Monarchy,
|
||||||
private val liveEntityUpdaters: List<LiveEntityObserver>,
|
private val liveEntityUpdaters: List<LiveEntityObserver>,
|
||||||
|
@ -16,16 +16,46 @@
|
|||||||
|
|
||||||
package im.vector.matrix.android.internal.session
|
package im.vector.matrix.android.internal.session
|
||||||
|
|
||||||
|
import dagger.BindsInstance
|
||||||
import dagger.Component
|
import dagger.Component
|
||||||
|
import im.vector.matrix.android.api.auth.data.SessionParams
|
||||||
|
import im.vector.matrix.android.internal.crypto.CryptoModule
|
||||||
|
import im.vector.matrix.android.internal.di.MatrixAssistedInjectModule
|
||||||
import im.vector.matrix.android.internal.di.MatrixComponent
|
import im.vector.matrix.android.internal.di.MatrixComponent
|
||||||
|
import im.vector.matrix.android.internal.session.content.ContentModule
|
||||||
|
import im.vector.matrix.android.internal.session.cache.CacheModule
|
||||||
|
import im.vector.matrix.android.internal.session.filter.FilterModule
|
||||||
|
import im.vector.matrix.android.internal.session.group.GroupModule
|
||||||
|
import im.vector.matrix.android.internal.session.room.RoomModule
|
||||||
|
import im.vector.matrix.android.internal.session.signout.SignOutModule
|
||||||
|
import im.vector.matrix.android.internal.session.sync.SyncModule
|
||||||
|
import im.vector.matrix.android.internal.worker.WorkerBindingModule
|
||||||
|
|
||||||
@Component(dependencies = [MatrixComponent::class])
|
@Component(dependencies = [MatrixComponent::class],
|
||||||
|
modules = [
|
||||||
|
SessionModule::class,
|
||||||
|
RoomModule::class,
|
||||||
|
SyncModule::class,
|
||||||
|
SignOutModule::class,
|
||||||
|
GroupModule::class,
|
||||||
|
FilterModule::class,
|
||||||
|
GroupModule::class,
|
||||||
|
ContentModule::class,
|
||||||
|
CacheModule::class,
|
||||||
|
CryptoModule::class,
|
||||||
|
MatrixAssistedInjectModule::class,
|
||||||
|
WorkerBindingModule::class
|
||||||
|
]
|
||||||
|
)
|
||||||
@SessionScope
|
@SessionScope
|
||||||
interface SessionComponent {
|
internal interface SessionComponent {
|
||||||
|
|
||||||
@Component.Builder
|
@Component.Factory
|
||||||
interface Builder {
|
interface Factory {
|
||||||
fun matrixComponent(matrixComponent: MatrixComponent): Builder
|
fun create(
|
||||||
|
matrixComponent: MatrixComponent,
|
||||||
|
@BindsInstance sessionParams: SessionParams): SessionComponent
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
@ -1,75 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright 2019 New Vector Ltd
|
|
||||||
*
|
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
* you may not use this file except in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
* See the License for the specific language governing permissions and
|
|
||||||
* limitations under the License.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package im.vector.matrix.android.internal.session
|
|
||||||
|
|
||||||
import com.zhuinden.monarchy.Monarchy
|
|
||||||
import im.vector.matrix.android.api.auth.data.SessionParams
|
|
||||||
import im.vector.matrix.android.api.session.Session
|
|
||||||
import im.vector.matrix.android.api.session.cache.CacheService
|
|
||||||
import im.vector.matrix.android.api.session.content.ContentUploadStateTracker
|
|
||||||
import im.vector.matrix.android.api.session.content.ContentUrlResolver
|
|
||||||
import im.vector.matrix.android.api.session.group.GroupService
|
|
||||||
import im.vector.matrix.android.api.session.room.RoomDirectoryService
|
|
||||||
import im.vector.matrix.android.api.session.room.RoomService
|
|
||||||
import im.vector.matrix.android.api.session.signout.SignOutService
|
|
||||||
import im.vector.matrix.android.api.session.sync.FilterService
|
|
||||||
import im.vector.matrix.android.api.session.user.UserService
|
|
||||||
import im.vector.matrix.android.internal.crypto.CryptoManager
|
|
||||||
import im.vector.matrix.android.internal.database.LiveEntityObserver
|
|
||||||
import im.vector.matrix.android.internal.di.MatrixScope
|
|
||||||
import im.vector.matrix.android.internal.session.sync.job.SyncThread
|
|
||||||
import javax.inject.Inject
|
|
||||||
|
|
||||||
@MatrixScope
|
|
||||||
internal class SessionFactory @Inject constructor(
|
|
||||||
private val monarchy: Monarchy,
|
|
||||||
private val liveEntityUpdaters: List<LiveEntityObserver>,
|
|
||||||
private val sessionListeners: SessionListeners,
|
|
||||||
private val roomService: RoomService,
|
|
||||||
private val roomDirectoryService: RoomDirectoryService,
|
|
||||||
private val groupService: GroupService,
|
|
||||||
private val userService: UserService,
|
|
||||||
private val filterService: FilterService,
|
|
||||||
private val cacheService: CacheService,
|
|
||||||
private val signOutService: SignOutService,
|
|
||||||
private val cryptoService: CryptoManager,
|
|
||||||
private val syncThread: SyncThread,
|
|
||||||
private val contentUrlResolver: ContentUrlResolver,
|
|
||||||
private val contentUploadProgressTracker: ContentUploadStateTracker) {
|
|
||||||
|
|
||||||
|
|
||||||
fun create(sessionParams: SessionParams): Session {
|
|
||||||
return DefaultSession(
|
|
||||||
sessionParams,
|
|
||||||
monarchy,
|
|
||||||
liveEntityUpdaters,
|
|
||||||
sessionListeners,
|
|
||||||
roomService,
|
|
||||||
roomDirectoryService,
|
|
||||||
groupService,
|
|
||||||
userService,
|
|
||||||
filterService,
|
|
||||||
cacheService,
|
|
||||||
signOutService,
|
|
||||||
cryptoService,
|
|
||||||
syncThread,
|
|
||||||
contentUrlResolver,
|
|
||||||
contentUploadProgressTracker
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -33,17 +33,21 @@ import im.vector.matrix.android.internal.util.md5
|
|||||||
import io.realm.RealmConfiguration
|
import io.realm.RealmConfiguration
|
||||||
import retrofit2.Retrofit
|
import retrofit2.Retrofit
|
||||||
import java.io.File
|
import java.io.File
|
||||||
|
import javax.inject.Named
|
||||||
|
|
||||||
@Module
|
@Module
|
||||||
internal class SessionModule(private val sessionParams: SessionParams) {
|
internal object SessionModule {
|
||||||
|
|
||||||
@Provides
|
@Provides
|
||||||
fun providesCredentials(): Credentials {
|
@SessionScope
|
||||||
|
fun providesCredentials(sessionParams: SessionParams): Credentials {
|
||||||
return sessionParams.credentials
|
return sessionParams.credentials
|
||||||
}
|
}
|
||||||
|
|
||||||
@Provides
|
@Provides
|
||||||
fun providesRealmConfiguration(context: Context): RealmConfiguration {
|
@SessionScope
|
||||||
|
@Named("SessionRealmConfiguration")
|
||||||
|
fun providesRealmConfiguration(sessionParams: SessionParams, context: Context): RealmConfiguration {
|
||||||
val childPath = sessionParams.credentials.userId.md5()
|
val childPath = sessionParams.credentials.userId.md5()
|
||||||
val directory = File(context.filesDir, childPath)
|
val directory = File(context.filesDir, childPath)
|
||||||
|
|
||||||
@ -56,25 +60,30 @@ internal class SessionModule(private val sessionParams: SessionParams) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Provides
|
@Provides
|
||||||
fun providesMonarchy(realmConfiguration: RealmConfiguration): Monarchy {
|
@SessionScope
|
||||||
|
fun providesMonarchy(@Named("SessionRealmConfiguration")
|
||||||
|
realmConfiguration: RealmConfiguration): Monarchy {
|
||||||
return Monarchy.Builder()
|
return Monarchy.Builder()
|
||||||
.setRealmConfiguration(realmConfiguration)
|
.setRealmConfiguration(realmConfiguration)
|
||||||
.build()
|
.build()
|
||||||
}
|
}
|
||||||
|
|
||||||
@Provides
|
@Provides
|
||||||
fun providesRetrofit(retrofitBuilder: Retrofit.Builder): Retrofit {
|
@SessionScope
|
||||||
|
fun providesRetrofit(sessionParams: SessionParams, retrofitBuilder: Retrofit.Builder): Retrofit {
|
||||||
return retrofitBuilder
|
return retrofitBuilder
|
||||||
.baseUrl(sessionParams.homeServerConnectionConfig.homeServerUri.toString())
|
.baseUrl(sessionParams.homeServerConnectionConfig.homeServerUri.toString())
|
||||||
.build()
|
.build()
|
||||||
}
|
}
|
||||||
|
|
||||||
@Provides
|
@Provides
|
||||||
|
@SessionScope
|
||||||
fun providesFilterAPI(retrofit: Retrofit): FilterApi {
|
fun providesFilterAPI(retrofit: Retrofit): FilterApi {
|
||||||
return retrofit.create(FilterApi::class.java)
|
return retrofit.create(FilterApi::class.java)
|
||||||
}
|
}
|
||||||
|
|
||||||
@Provides
|
@Provides
|
||||||
|
@SessionScope
|
||||||
fun providesLiveEntityObservers(groupSummaryUpdater: GroupSummaryUpdater,
|
fun providesLiveEntityObservers(groupSummaryUpdater: GroupSummaryUpdater,
|
||||||
userEntityUpdater: UserEntityUpdater,
|
userEntityUpdater: UserEntityUpdater,
|
||||||
aggregationUpdater: EventRelationsAggregationUpdater,
|
aggregationUpdater: EventRelationsAggregationUpdater,
|
||||||
@ -82,5 +91,4 @@ internal class SessionModule(private val sessionParams: SessionParams) {
|
|||||||
return listOf<LiveEntityObserver>(groupSummaryUpdater, userEntityUpdater, aggregationUpdater, eventsPruner)
|
return listOf<LiveEntityObserver>(groupSummaryUpdater, userEntityUpdater, aggregationUpdater, eventsPruner)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
38
matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/cache/CacheModule.kt
vendored
Normal file
38
matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/cache/CacheModule.kt
vendored
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
/*
|
||||||
|
*
|
||||||
|
* * Copyright 2019 New Vector Ltd
|
||||||
|
* *
|
||||||
|
* * Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* * you may not use this file except in compliance with the License.
|
||||||
|
* * You may obtain a copy of the License at
|
||||||
|
* *
|
||||||
|
* * http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
* *
|
||||||
|
* * Unless required by applicable law or agreed to in writing, software
|
||||||
|
* * distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* * See the License for the specific language governing permissions and
|
||||||
|
* * limitations under the License.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
package im.vector.matrix.android.internal.session.cache
|
||||||
|
|
||||||
|
import dagger.Binds
|
||||||
|
import dagger.Module
|
||||||
|
import im.vector.matrix.android.api.session.cache.CacheService
|
||||||
|
import im.vector.matrix.android.internal.session.SessionScope
|
||||||
|
|
||||||
|
@Module
|
||||||
|
internal abstract class CacheModule {
|
||||||
|
|
||||||
|
@Binds
|
||||||
|
@SessionScope
|
||||||
|
abstract fun bindCacheService(cacheService: DefaultCacheService): CacheService
|
||||||
|
|
||||||
|
@Binds
|
||||||
|
@SessionScope
|
||||||
|
abstract fun bindClearCacheTask(clearCacheTask: RealmClearCacheTask): ClearCacheTask
|
||||||
|
|
||||||
|
|
||||||
|
}
|
@ -24,8 +24,8 @@ import im.vector.matrix.android.internal.task.configureWith
|
|||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
|
||||||
@SessionScope
|
@SessionScope
|
||||||
internal class RealmCacheService @Inject constructor(private val clearCacheTask: ClearCacheTask,
|
internal class DefaultCacheService @Inject constructor(private val clearCacheTask: ClearCacheTask,
|
||||||
private val taskExecutor: TaskExecutor) : CacheService {
|
private val taskExecutor: TaskExecutor) : CacheService {
|
||||||
|
|
||||||
override fun clearCache(callback: MatrixCallback<Unit>) {
|
override fun clearCache(callback: MatrixCallback<Unit>) {
|
||||||
clearCacheTask
|
clearCacheTask
|
@ -16,10 +16,20 @@
|
|||||||
|
|
||||||
package im.vector.matrix.android.internal.session.content
|
package im.vector.matrix.android.internal.session.content
|
||||||
|
|
||||||
|
import dagger.Binds
|
||||||
import dagger.Module
|
import dagger.Module
|
||||||
|
import im.vector.matrix.android.api.session.content.ContentUploadStateTracker
|
||||||
|
import im.vector.matrix.android.api.session.content.ContentUrlResolver
|
||||||
|
import im.vector.matrix.android.internal.session.SessionScope
|
||||||
|
|
||||||
@Module
|
@Module
|
||||||
internal class ContentModule {
|
internal abstract class ContentModule {
|
||||||
|
|
||||||
|
@Binds
|
||||||
|
@SessionScope
|
||||||
|
abstract fun bindContentUploadStateTracker(contentUploadStateTracker: DefaultContentUploadStateTracker): ContentUploadStateTracker
|
||||||
|
|
||||||
|
@Binds
|
||||||
|
@SessionScope
|
||||||
|
abstract fun bindContentUrlResolver(contentUrlResolver: DefaultContentUrlResolver): ContentUrlResolver
|
||||||
}
|
}
|
||||||
|
@ -18,6 +18,7 @@ package im.vector.matrix.android.internal.session.content
|
|||||||
|
|
||||||
import arrow.core.Try
|
import arrow.core.Try
|
||||||
import arrow.core.Try.Companion.raise
|
import arrow.core.Try.Companion.raise
|
||||||
|
import com.squareup.moshi.Moshi
|
||||||
import im.vector.matrix.android.api.auth.data.SessionParams
|
import im.vector.matrix.android.api.auth.data.SessionParams
|
||||||
import im.vector.matrix.android.internal.di.MoshiProvider
|
import im.vector.matrix.android.internal.di.MoshiProvider
|
||||||
import im.vector.matrix.android.internal.network.ProgressRequestBody
|
import im.vector.matrix.android.internal.network.ProgressRequestBody
|
||||||
@ -30,11 +31,10 @@ import javax.inject.Inject
|
|||||||
|
|
||||||
@SessionScope
|
@SessionScope
|
||||||
internal class FileUploader @Inject constructor(private val okHttpClient: OkHttpClient,
|
internal class FileUploader @Inject constructor(private val okHttpClient: OkHttpClient,
|
||||||
sessionParams: SessionParams) {
|
private val sessionParams: SessionParams,
|
||||||
|
private val moshi: Moshi) {
|
||||||
|
|
||||||
private val uploadUrl = DefaultContentUrlResolver.getUploadUrl(sessionParams.homeServerConnectionConfig)
|
private val uploadUrl = DefaultContentUrlResolver.getUploadUrl(sessionParams.homeServerConnectionConfig)
|
||||||
|
|
||||||
private val moshi = MoshiProvider.providesMoshi()
|
|
||||||
private val responseAdapter = moshi.adapter(ContentUploadResponse::class.java)
|
private val responseAdapter = moshi.adapter(ContentUploadResponse::class.java)
|
||||||
|
|
||||||
|
|
||||||
|
@ -31,7 +31,7 @@ import im.vector.matrix.android.api.session.room.model.message.MessageContent
|
|||||||
import im.vector.matrix.android.api.session.room.model.message.MessageFileContent
|
import im.vector.matrix.android.api.session.room.model.message.MessageFileContent
|
||||||
import im.vector.matrix.android.api.session.room.model.message.MessageImageContent
|
import im.vector.matrix.android.api.session.room.model.message.MessageImageContent
|
||||||
import im.vector.matrix.android.api.session.room.model.message.MessageVideoContent
|
import im.vector.matrix.android.api.session.room.model.message.MessageVideoContent
|
||||||
import im.vector.matrix.android.internal.di.ChildWorkerFactory
|
import im.vector.matrix.android.internal.worker.DelegateWorkerFactory
|
||||||
import im.vector.matrix.android.internal.network.ProgressRequestBody
|
import im.vector.matrix.android.internal.network.ProgressRequestBody
|
||||||
import im.vector.matrix.android.internal.session.room.send.SendEventWorker
|
import im.vector.matrix.android.internal.session.room.send.SendEventWorker
|
||||||
import im.vector.matrix.android.internal.util.WorkerParamsFactory
|
import im.vector.matrix.android.internal.util.WorkerParamsFactory
|
||||||
@ -138,7 +138,7 @@ internal class UploadContentWorker @AssistedInject constructor(
|
|||||||
}
|
}
|
||||||
|
|
||||||
@AssistedInject.Factory
|
@AssistedInject.Factory
|
||||||
interface Factory : ChildWorkerFactory
|
interface Factory : DelegateWorkerFactory
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -0,0 +1,54 @@
|
|||||||
|
/*
|
||||||
|
*
|
||||||
|
* * Copyright 2019 New Vector Ltd
|
||||||
|
* *
|
||||||
|
* * Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* * you may not use this file except in compliance with the License.
|
||||||
|
* * You may obtain a copy of the License at
|
||||||
|
* *
|
||||||
|
* * http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
* *
|
||||||
|
* * Unless required by applicable law or agreed to in writing, software
|
||||||
|
* * distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* * See the License for the specific language governing permissions and
|
||||||
|
* * limitations under the License.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
package im.vector.matrix.android.internal.session.filter
|
||||||
|
|
||||||
|
import dagger.Binds
|
||||||
|
import dagger.Module
|
||||||
|
import dagger.Provides
|
||||||
|
import im.vector.matrix.android.api.session.sync.FilterService
|
||||||
|
import im.vector.matrix.android.internal.session.SessionScope
|
||||||
|
import retrofit2.Retrofit
|
||||||
|
|
||||||
|
@Module
|
||||||
|
internal abstract class FilterModule {
|
||||||
|
|
||||||
|
@Module
|
||||||
|
companion object {
|
||||||
|
@SessionScope
|
||||||
|
@Provides
|
||||||
|
@JvmStatic
|
||||||
|
fun providesFilterApi(retrofit: Retrofit): FilterApi {
|
||||||
|
return retrofit.create(FilterApi::class.java)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Binds
|
||||||
|
@SessionScope
|
||||||
|
abstract fun bindFilterRepository(filterRepository: DefaultFilterRepository): FilterRepository
|
||||||
|
|
||||||
|
@Binds
|
||||||
|
@SessionScope
|
||||||
|
abstract fun bindFilterService(filterService: DefaultFilterService): FilterService
|
||||||
|
|
||||||
|
@Binds
|
||||||
|
@SessionScope
|
||||||
|
abstract fun bindSaveFilterTask(saveFilterTask_Factory: DefaultSaveFilterTask): SaveFilterTask
|
||||||
|
|
||||||
|
|
||||||
|
}
|
@ -25,8 +25,10 @@ import im.vector.matrix.android.internal.database.mapper.asDomain
|
|||||||
import im.vector.matrix.android.internal.database.model.GroupSummaryEntity
|
import im.vector.matrix.android.internal.database.model.GroupSummaryEntity
|
||||||
import im.vector.matrix.android.internal.database.model.GroupSummaryEntityFields
|
import im.vector.matrix.android.internal.database.model.GroupSummaryEntityFields
|
||||||
import im.vector.matrix.android.internal.database.query.where
|
import im.vector.matrix.android.internal.database.query.where
|
||||||
|
import im.vector.matrix.android.internal.session.SessionScope
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
|
||||||
|
@SessionScope
|
||||||
internal class DefaultGroupService @Inject constructor(private val monarchy: Monarchy) : GroupService {
|
internal class DefaultGroupService @Inject constructor(private val monarchy: Monarchy) : GroupService {
|
||||||
|
|
||||||
override fun getGroup(groupId: String): Group? {
|
override fun getGroup(groupId: String): Group? {
|
||||||
|
@ -23,7 +23,7 @@ import arrow.core.Try
|
|||||||
import com.squareup.inject.assisted.Assisted
|
import com.squareup.inject.assisted.Assisted
|
||||||
import com.squareup.inject.assisted.AssistedInject
|
import com.squareup.inject.assisted.AssistedInject
|
||||||
import com.squareup.moshi.JsonClass
|
import com.squareup.moshi.JsonClass
|
||||||
import im.vector.matrix.android.internal.di.ChildWorkerFactory
|
import im.vector.matrix.android.internal.worker.DelegateWorkerFactory
|
||||||
import im.vector.matrix.android.internal.util.WorkerParamsFactory
|
import im.vector.matrix.android.internal.util.WorkerParamsFactory
|
||||||
|
|
||||||
internal class GetGroupDataWorker @AssistedInject constructor(
|
internal class GetGroupDataWorker @AssistedInject constructor(
|
||||||
@ -53,6 +53,6 @@ internal class GetGroupDataWorker @AssistedInject constructor(
|
|||||||
}
|
}
|
||||||
|
|
||||||
@AssistedInject.Factory
|
@AssistedInject.Factory
|
||||||
interface Factory : ChildWorkerFactory
|
interface Factory : DelegateWorkerFactory
|
||||||
|
|
||||||
}
|
}
|
@ -16,15 +16,31 @@
|
|||||||
|
|
||||||
package im.vector.matrix.android.internal.session.group
|
package im.vector.matrix.android.internal.session.group
|
||||||
|
|
||||||
|
import dagger.Binds
|
||||||
import dagger.Module
|
import dagger.Module
|
||||||
|
import dagger.Provides
|
||||||
|
import im.vector.matrix.android.api.session.group.GroupService
|
||||||
import im.vector.matrix.android.internal.session.SessionScope
|
import im.vector.matrix.android.internal.session.SessionScope
|
||||||
import retrofit2.Retrofit
|
import retrofit2.Retrofit
|
||||||
|
|
||||||
@Module
|
@Module
|
||||||
internal class GroupModule {
|
internal abstract class GroupModule {
|
||||||
|
|
||||||
@SessionScope
|
@Module
|
||||||
fun providesGroupAPI(retrofit: Retrofit): GroupAPI {
|
companion object {
|
||||||
return retrofit.create(GroupAPI::class.java)
|
@SessionScope
|
||||||
|
@Provides
|
||||||
|
@JvmStatic
|
||||||
|
fun providesGroupAPI(retrofit: Retrofit): GroupAPI {
|
||||||
|
return retrofit.create(GroupAPI::class.java)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Binds
|
||||||
|
@SessionScope
|
||||||
|
abstract fun bindGetGroupDataTask(getGroupDataTask: DefaultGetGroupDataTask): GetGroupDataTask
|
||||||
|
|
||||||
|
@Binds
|
||||||
|
@SessionScope
|
||||||
|
abstract fun bindGroupService(groupService: DefaultGroupService): GroupService
|
||||||
}
|
}
|
@ -33,8 +33,11 @@ import im.vector.matrix.android.internal.database.mapper.asDomain
|
|||||||
import im.vector.matrix.android.internal.database.model.RoomSummaryEntity
|
import im.vector.matrix.android.internal.database.model.RoomSummaryEntity
|
||||||
import im.vector.matrix.android.internal.database.model.RoomSummaryEntityFields
|
import im.vector.matrix.android.internal.database.model.RoomSummaryEntityFields
|
||||||
import im.vector.matrix.android.internal.database.query.where
|
import im.vector.matrix.android.internal.database.query.where
|
||||||
|
import im.vector.matrix.android.internal.session.SessionScope
|
||||||
|
import javax.inject.Inject
|
||||||
|
|
||||||
internal class DefaultRoom(
|
@SessionScope
|
||||||
|
internal class DefaultRoom @Inject constructor(
|
||||||
override val roomId: String,
|
override val roomId: String,
|
||||||
private val monarchy: Monarchy,
|
private val monarchy: Monarchy,
|
||||||
private val timelineService: TimelineService,
|
private val timelineService: TimelineService,
|
||||||
|
@ -50,7 +50,7 @@ internal class DefaultRoomService @Inject constructor(private val monarchy: Mona
|
|||||||
|
|
||||||
override fun getRoom(roomId: String): Room? {
|
override fun getRoom(roomId: String): Room? {
|
||||||
monarchy.fetchManaged { RoomEntity.where(it, roomId).findFirst() } ?: return null
|
monarchy.fetchManaged { RoomEntity.where(it, roomId).findFirst() } ?: return null
|
||||||
return roomFactory.instantiate(roomId)
|
return roomFactory.create(roomId)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun liveRoomSummaries(): LiveData<List<RoomSummary>> {
|
override fun liveRoomSummaries(): LiveData<List<RoomSummary>> {
|
||||||
|
@ -58,7 +58,7 @@ internal class RoomFactory @Inject constructor(private val monarchy: Monarchy,
|
|||||||
private val joinRoomTask: JoinRoomTask,
|
private val joinRoomTask: JoinRoomTask,
|
||||||
private val leaveRoomTask: LeaveRoomTask) {
|
private val leaveRoomTask: LeaveRoomTask) {
|
||||||
|
|
||||||
fun instantiate(roomId: String): Room {
|
fun create(roomId: String): Room {
|
||||||
val roomMemberExtractor = SenderRoomMemberExtractor(roomId)
|
val roomMemberExtractor = SenderRoomMemberExtractor(roomId)
|
||||||
val relationExtractor = EventRelationExtractor()
|
val relationExtractor = EventRelationExtractor()
|
||||||
val timelineEventFactory = TimelineEventFactory(roomMemberExtractor, relationExtractor, cryptoService)
|
val timelineEventFactory = TimelineEventFactory(roomMemberExtractor, relationExtractor, cryptoService)
|
||||||
|
@ -16,12 +16,26 @@
|
|||||||
|
|
||||||
package im.vector.matrix.android.internal.session.room
|
package im.vector.matrix.android.internal.session.room
|
||||||
|
|
||||||
|
import dagger.Binds
|
||||||
import dagger.Module
|
import dagger.Module
|
||||||
import dagger.Provides
|
import dagger.Provides
|
||||||
|
import im.vector.matrix.android.api.session.room.RoomDirectoryService
|
||||||
|
import im.vector.matrix.android.api.session.room.RoomService
|
||||||
|
import im.vector.matrix.android.api.session.room.members.MembershipService
|
||||||
|
import im.vector.matrix.android.api.session.room.model.relation.RelationService
|
||||||
|
import im.vector.matrix.android.api.session.room.read.ReadService
|
||||||
|
import im.vector.matrix.android.api.session.room.send.SendService
|
||||||
|
import im.vector.matrix.android.api.session.room.state.StateService
|
||||||
|
import im.vector.matrix.android.api.session.room.timeline.TimelineService
|
||||||
import im.vector.matrix.android.internal.session.SessionScope
|
import im.vector.matrix.android.internal.session.SessionScope
|
||||||
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.directory.DefaultGetPublicRoomTask
|
||||||
|
import im.vector.matrix.android.internal.session.room.directory.DefaultGetThirdPartyProtocolsTask
|
||||||
|
import im.vector.matrix.android.internal.session.room.directory.GetPublicRoomTask
|
||||||
|
import im.vector.matrix.android.internal.session.room.directory.GetThirdPartyProtocolsTask
|
||||||
import im.vector.matrix.android.internal.session.room.membership.DefaultLoadRoomMembersTask
|
import im.vector.matrix.android.internal.session.room.membership.DefaultLoadRoomMembersTask
|
||||||
|
import im.vector.matrix.android.internal.session.room.membership.DefaultMembershipService
|
||||||
import im.vector.matrix.android.internal.session.room.membership.LoadRoomMembersTask
|
import im.vector.matrix.android.internal.session.room.membership.LoadRoomMembersTask
|
||||||
import im.vector.matrix.android.internal.session.room.membership.joining.DefaultInviteTask
|
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.DefaultJoinRoomTask
|
||||||
@ -31,30 +45,115 @@ import im.vector.matrix.android.internal.session.room.membership.leaving.Default
|
|||||||
import im.vector.matrix.android.internal.session.room.membership.leaving.LeaveRoomTask
|
import im.vector.matrix.android.internal.session.room.membership.leaving.LeaveRoomTask
|
||||||
import im.vector.matrix.android.internal.session.room.prune.DefaultPruneEventTask
|
import im.vector.matrix.android.internal.session.room.prune.DefaultPruneEventTask
|
||||||
import im.vector.matrix.android.internal.session.room.prune.PruneEventTask
|
import im.vector.matrix.android.internal.session.room.prune.PruneEventTask
|
||||||
|
import im.vector.matrix.android.internal.session.room.read.DefaultReadService
|
||||||
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.relation.DefaultFindReactionEventForUndoTask
|
import im.vector.matrix.android.internal.session.room.relation.*
|
||||||
import im.vector.matrix.android.internal.session.room.relation.DefaultUpdateQuickReactionTask
|
import im.vector.matrix.android.internal.session.room.send.DefaultSendService
|
||||||
import im.vector.matrix.android.internal.session.room.relation.FindReactionEventForUndoTask
|
import im.vector.matrix.android.internal.session.room.state.DefaultStateService
|
||||||
import im.vector.matrix.android.internal.session.room.relation.UpdateQuickReactionTask
|
import im.vector.matrix.android.internal.session.room.timeline.*
|
||||||
import im.vector.matrix.android.internal.session.room.send.LocalEchoEventFactory
|
|
||||||
import im.vector.matrix.android.internal.session.room.send.LocalEchoUpdater
|
|
||||||
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.timeline.DefaultGetContextOfEventTask
|
|
||||||
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 retrofit2.Retrofit
|
import retrofit2.Retrofit
|
||||||
|
|
||||||
@Module
|
@Module
|
||||||
internal class RoomModule {
|
internal abstract class RoomModule {
|
||||||
|
|
||||||
@SessionScope
|
@Module
|
||||||
@Provides
|
companion object {
|
||||||
fun providesRoomAPI(retrofit: Retrofit): RoomAPI {
|
@SessionScope
|
||||||
return retrofit.create(RoomAPI::class.java)
|
@Provides
|
||||||
|
@JvmStatic
|
||||||
|
fun providesRoomAPI(retrofit: Retrofit): RoomAPI {
|
||||||
|
return retrofit.create(RoomAPI::class.java)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Binds
|
||||||
|
@SessionScope
|
||||||
|
abstract fun bindRoomService(roomService: DefaultRoomService): RoomService
|
||||||
|
|
||||||
|
@Binds
|
||||||
|
@SessionScope
|
||||||
|
abstract fun bindRoomDirectoryService(roomDirectoryService: DefaultRoomDirectoryService): RoomDirectoryService
|
||||||
|
|
||||||
|
@Binds
|
||||||
|
@SessionScope
|
||||||
|
abstract fun bindEventRelationsAggregationTask(eventRelationsAggregationTask: DefaultEventRelationsAggregationTask): EventRelationsAggregationTask
|
||||||
|
|
||||||
|
@Binds
|
||||||
|
@SessionScope
|
||||||
|
abstract fun bindCreateRoomTask(createRoomTask: DefaultCreateRoomTask): CreateRoomTask
|
||||||
|
|
||||||
|
@Binds
|
||||||
|
@SessionScope
|
||||||
|
abstract fun bindGetPublicRoomTask(getPublicRoomTask: DefaultGetPublicRoomTask): GetPublicRoomTask
|
||||||
|
|
||||||
|
@Binds
|
||||||
|
@SessionScope
|
||||||
|
abstract fun bindGetThirdPartyProtocolsTask(getThirdPartyProtocolsTask: DefaultGetThirdPartyProtocolsTask): GetThirdPartyProtocolsTask
|
||||||
|
|
||||||
|
@Binds
|
||||||
|
@SessionScope
|
||||||
|
abstract fun bindInviteTask(inviteTask: DefaultInviteTask): InviteTask
|
||||||
|
|
||||||
|
@Binds
|
||||||
|
@SessionScope
|
||||||
|
abstract fun bindJoinRoomTask(joinRoomTask: DefaultJoinRoomTask): JoinRoomTask
|
||||||
|
|
||||||
|
@Binds
|
||||||
|
@SessionScope
|
||||||
|
abstract fun bindLeaveRoomTask(leaveRoomTask: DefaultLeaveRoomTask): LeaveRoomTask
|
||||||
|
|
||||||
|
@Binds
|
||||||
|
@SessionScope
|
||||||
|
abstract fun bindMembershipService(membershipService: DefaultMembershipService): MembershipService
|
||||||
|
|
||||||
|
@Binds
|
||||||
|
@SessionScope
|
||||||
|
abstract fun bindLoadRoomMembersTask(loadRoomMembersTask: DefaultLoadRoomMembersTask): LoadRoomMembersTask
|
||||||
|
|
||||||
|
@Binds
|
||||||
|
@SessionScope
|
||||||
|
abstract fun bindPruneEventTask(pruneEventTask: DefaultPruneEventTask): PruneEventTask
|
||||||
|
|
||||||
|
@Binds
|
||||||
|
@SessionScope
|
||||||
|
abstract fun bindReadService(readService: DefaultReadService): ReadService
|
||||||
|
|
||||||
|
@Binds
|
||||||
|
@SessionScope
|
||||||
|
abstract fun bindSetReadMarkersTask(setReadMarkersTask: DefaultSetReadMarkersTask): SetReadMarkersTask
|
||||||
|
|
||||||
|
@Binds
|
||||||
|
@SessionScope
|
||||||
|
abstract fun bindRelationService(relationService: DefaultRelationService): RelationService
|
||||||
|
|
||||||
|
@Binds
|
||||||
|
@SessionScope
|
||||||
|
abstract fun bindFindReactionEventForUndoTask(findReactionEventForUndoTask: DefaultFindReactionEventForUndoTask): FindReactionEventForUndoTask
|
||||||
|
|
||||||
|
@Binds
|
||||||
|
@SessionScope
|
||||||
|
abstract fun bindUpdateQuickReactionTask(updateQuickReactionTask: DefaultUpdateQuickReactionTask): UpdateQuickReactionTask
|
||||||
|
|
||||||
|
@Binds
|
||||||
|
@SessionScope
|
||||||
|
abstract fun bindSendService(sendService: DefaultSendService): SendService
|
||||||
|
|
||||||
|
@Binds
|
||||||
|
@SessionScope
|
||||||
|
abstract fun bindStateService(stateService: DefaultStateService): StateService
|
||||||
|
|
||||||
|
@Binds
|
||||||
|
@SessionScope
|
||||||
|
abstract fun bindGetContextOfEventTask(getContextOfEventTask: DefaultGetContextOfEventTask): GetContextOfEventTask
|
||||||
|
|
||||||
|
@Binds
|
||||||
|
@SessionScope
|
||||||
|
abstract fun bindPaginationTask(paginationTask: DefaultPaginationTask): PaginationTask
|
||||||
|
|
||||||
|
@Binds
|
||||||
|
@SessionScope
|
||||||
|
abstract fun bindTimelineService(timelineService: DefaultTimelineService): TimelineService
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -33,7 +33,7 @@ internal interface CreateRoomTask : Task<CreateRoomParams, String>
|
|||||||
|
|
||||||
@SessionScope
|
@SessionScope
|
||||||
internal class DefaultCreateRoomTask @Inject constructor(private val roomAPI: RoomAPI,
|
internal class DefaultCreateRoomTask @Inject constructor(private val roomAPI: RoomAPI,
|
||||||
private val realmConfiguration: RealmConfiguration) : CreateRoomTask {
|
private val realmConfiguration: RealmConfiguration) : CreateRoomTask {
|
||||||
|
|
||||||
|
|
||||||
override suspend fun execute(params: CreateRoomParams): Try<String> {
|
override suspend fun execute(params: CreateRoomParams): Try<String> {
|
||||||
|
@ -26,7 +26,7 @@ import im.vector.matrix.android.api.session.events.model.Event
|
|||||||
import im.vector.matrix.android.api.session.events.model.toModel
|
import im.vector.matrix.android.api.session.events.model.toModel
|
||||||
import im.vector.matrix.android.api.session.room.model.relation.ReactionContent
|
import im.vector.matrix.android.api.session.room.model.relation.ReactionContent
|
||||||
import im.vector.matrix.android.api.session.room.model.relation.ReactionInfo
|
import im.vector.matrix.android.api.session.room.model.relation.ReactionInfo
|
||||||
import im.vector.matrix.android.internal.di.ChildWorkerFactory
|
import im.vector.matrix.android.internal.worker.DelegateWorkerFactory
|
||||||
import im.vector.matrix.android.internal.network.executeRequest
|
import im.vector.matrix.android.internal.network.executeRequest
|
||||||
import im.vector.matrix.android.internal.session.room.RoomAPI
|
import im.vector.matrix.android.internal.session.room.RoomAPI
|
||||||
import im.vector.matrix.android.internal.session.room.send.SendResponse
|
import im.vector.matrix.android.internal.session.room.send.SendResponse
|
||||||
@ -82,5 +82,5 @@ internal class SendRelationWorker @AssistedInject constructor(
|
|||||||
}
|
}
|
||||||
|
|
||||||
@AssistedInject.Factory
|
@AssistedInject.Factory
|
||||||
interface Factory : ChildWorkerFactory
|
interface Factory : DelegateWorkerFactory
|
||||||
}
|
}
|
@ -19,6 +19,8 @@ package im.vector.matrix.android.internal.session.room.send
|
|||||||
import android.content.Context
|
import android.content.Context
|
||||||
import androidx.work.Worker
|
import androidx.work.Worker
|
||||||
import androidx.work.WorkerParameters
|
import androidx.work.WorkerParameters
|
||||||
|
import com.squareup.inject.assisted.Assisted
|
||||||
|
import com.squareup.inject.assisted.AssistedInject
|
||||||
import com.squareup.moshi.JsonClass
|
import com.squareup.moshi.JsonClass
|
||||||
import im.vector.matrix.android.api.MatrixCallback
|
import im.vector.matrix.android.api.MatrixCallback
|
||||||
import im.vector.matrix.android.api.failure.Failure
|
import im.vector.matrix.android.api.failure.Failure
|
||||||
@ -26,13 +28,16 @@ import im.vector.matrix.android.api.session.crypto.CryptoService
|
|||||||
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.room.send.SendState
|
import im.vector.matrix.android.api.session.room.send.SendState
|
||||||
import im.vector.matrix.android.internal.crypto.model.MXEncryptEventContentResult
|
import im.vector.matrix.android.internal.crypto.model.MXEncryptEventContentResult
|
||||||
import im.vector.matrix.android.internal.di.MatrixKoinComponent
|
|
||||||
import im.vector.matrix.android.internal.util.WorkerParamsFactory
|
import im.vector.matrix.android.internal.util.WorkerParamsFactory
|
||||||
import org.koin.standalone.inject
|
import im.vector.matrix.android.internal.worker.DelegateWorkerFactory
|
||||||
import java.util.concurrent.CountDownLatch
|
import java.util.concurrent.CountDownLatch
|
||||||
|
|
||||||
internal class EncryptEventWorker(context: Context, params: WorkerParameters)
|
internal class EncryptEventWorker @AssistedInject constructor(
|
||||||
: Worker(context, params), MatrixKoinComponent {
|
@Assisted context: Context,
|
||||||
|
@Assisted params: WorkerParameters,
|
||||||
|
private val crypto: CryptoService,
|
||||||
|
private val localEchoUpdater: LocalEchoUpdater)
|
||||||
|
: Worker(context, params) {
|
||||||
|
|
||||||
|
|
||||||
@JsonClass(generateAdapter = true)
|
@JsonClass(generateAdapter = true)
|
||||||
@ -41,9 +46,6 @@ internal class EncryptEventWorker(context: Context, params: WorkerParameters)
|
|||||||
val event: Event
|
val event: Event
|
||||||
)
|
)
|
||||||
|
|
||||||
private val crypto by inject<CryptoService>()
|
|
||||||
private val localEchoUpdater by inject<LocalEchoUpdater>()
|
|
||||||
|
|
||||||
override fun doWork(): Result {
|
override fun doWork(): Result {
|
||||||
|
|
||||||
val params = WorkerParamsFactory.fromData<Params>(inputData)
|
val params = WorkerParamsFactory.fromData<Params>(inputData)
|
||||||
@ -97,4 +99,8 @@ internal class EncryptEventWorker(context: Context, params: WorkerParameters)
|
|||||||
//always return success, or the chain will be stuck for ever!
|
//always return success, or the chain will be stuck for ever!
|
||||||
return Result.success()
|
return Result.success()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@AssistedInject.Factory
|
||||||
|
interface Factory : DelegateWorkerFactory
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -22,8 +22,11 @@ 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
|
||||||
import im.vector.matrix.android.api.session.room.model.message.MessageTextContent
|
import im.vector.matrix.android.api.session.room.model.message.MessageTextContent
|
||||||
import im.vector.matrix.android.internal.di.MoshiProvider
|
import im.vector.matrix.android.internal.di.MoshiProvider
|
||||||
|
import im.vector.matrix.android.internal.session.SessionScope
|
||||||
|
import javax.inject.Inject
|
||||||
|
|
||||||
internal class EventFactory(private val credentials: Credentials) {
|
@SessionScope
|
||||||
|
internal class EventFactory @Inject constructor(private val credentials: Credentials) {
|
||||||
|
|
||||||
private val moshi = MoshiProvider.providesMoshi()
|
private val moshi = MoshiProvider.providesMoshi()
|
||||||
|
|
||||||
|
@ -18,16 +18,20 @@ package im.vector.matrix.android.internal.session.room.send
|
|||||||
import android.content.Context
|
import android.content.Context
|
||||||
import androidx.work.Worker
|
import androidx.work.Worker
|
||||||
import androidx.work.WorkerParameters
|
import androidx.work.WorkerParameters
|
||||||
|
import com.squareup.inject.assisted.Assisted
|
||||||
|
import com.squareup.inject.assisted.AssistedInject
|
||||||
import com.squareup.moshi.JsonClass
|
import com.squareup.moshi.JsonClass
|
||||||
import im.vector.matrix.android.api.failure.Failure
|
import im.vector.matrix.android.api.failure.Failure
|
||||||
import im.vector.matrix.android.internal.di.MatrixKoinComponent
|
|
||||||
import im.vector.matrix.android.internal.network.executeRequest
|
import im.vector.matrix.android.internal.network.executeRequest
|
||||||
import im.vector.matrix.android.internal.session.room.RoomAPI
|
import im.vector.matrix.android.internal.session.room.RoomAPI
|
||||||
import im.vector.matrix.android.internal.util.WorkerParamsFactory
|
import im.vector.matrix.android.internal.util.WorkerParamsFactory
|
||||||
import org.koin.standalone.inject
|
import im.vector.matrix.android.internal.worker.DelegateWorkerFactory
|
||||||
|
|
||||||
internal class RedactEventWorker(context: Context, params: WorkerParameters)
|
internal class RedactEventWorker @AssistedInject constructor(
|
||||||
: Worker(context, params), MatrixKoinComponent {
|
@Assisted context: Context,
|
||||||
|
@Assisted params: WorkerParameters,
|
||||||
|
private val roomAPI: RoomAPI)
|
||||||
|
: Worker(context, params) {
|
||||||
|
|
||||||
@JsonClass(generateAdapter = true)
|
@JsonClass(generateAdapter = true)
|
||||||
internal data class Params(
|
internal data class Params(
|
||||||
@ -37,8 +41,6 @@ internal class RedactEventWorker(context: Context, params: WorkerParameters)
|
|||||||
val reason: String?
|
val reason: String?
|
||||||
)
|
)
|
||||||
|
|
||||||
private val roomAPI by inject<RoomAPI>()
|
|
||||||
|
|
||||||
override fun doWork(): Result {
|
override fun doWork(): Result {
|
||||||
val params = WorkerParamsFactory.fromData<Params>(inputData)
|
val params = WorkerParamsFactory.fromData<Params>(inputData)
|
||||||
?: return Result.failure()
|
?: return Result.failure()
|
||||||
@ -66,4 +68,7 @@ internal class RedactEventWorker(context: Context, params: WorkerParameters)
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@AssistedInject.Factory
|
||||||
|
interface Factory : DelegateWorkerFactory
|
||||||
|
|
||||||
}
|
}
|
@ -25,7 +25,7 @@ import com.squareup.moshi.JsonClass
|
|||||||
import im.vector.matrix.android.api.failure.Failure
|
import im.vector.matrix.android.api.failure.Failure
|
||||||
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.room.send.SendState
|
import im.vector.matrix.android.api.session.room.send.SendState
|
||||||
import im.vector.matrix.android.internal.di.ChildWorkerFactory
|
import im.vector.matrix.android.internal.worker.DelegateWorkerFactory
|
||||||
import im.vector.matrix.android.internal.network.executeRequest
|
import im.vector.matrix.android.internal.network.executeRequest
|
||||||
import im.vector.matrix.android.internal.session.room.RoomAPI
|
import im.vector.matrix.android.internal.session.room.RoomAPI
|
||||||
import im.vector.matrix.android.internal.util.WorkerParamsFactory
|
import im.vector.matrix.android.internal.util.WorkerParamsFactory
|
||||||
@ -76,6 +76,6 @@ internal class SendEventWorker @AssistedInject constructor(
|
|||||||
}
|
}
|
||||||
|
|
||||||
@AssistedInject.Factory
|
@AssistedInject.Factory
|
||||||
interface Factory : ChildWorkerFactory
|
interface Factory : DelegateWorkerFactory
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -274,7 +274,7 @@ internal class DefaultTimeline(
|
|||||||
val newRequestedCount = count - builtCount
|
val newRequestedCount = count - builtCount
|
||||||
updatePaginationState(direction) { it.copy(requestedCount = newRequestedCount) }
|
updatePaginationState(direction) { it.copy(requestedCount = newRequestedCount) }
|
||||||
val fetchingCount = Math.max(MIN_FETCHING_COUNT, newRequestedCount)
|
val fetchingCount = Math.max(MIN_FETCHING_COUNT, newRequestedCount)
|
||||||
executePaginationTask @Inject constructor(direction, fetchingCount)
|
executePaginationTask(direction, fetchingCount)
|
||||||
} else {
|
} else {
|
||||||
updatePaginationState(direction) { it.copy(isPaginating = false, requestedCount = 0) }
|
updatePaginationState(direction) { it.copy(isPaginating = false, requestedCount = 0) }
|
||||||
}
|
}
|
||||||
@ -350,7 +350,7 @@ internal class DefaultTimeline(
|
|||||||
/**
|
/**
|
||||||
* This has to be called on TimelineThread as it access realm live results
|
* This has to be called on TimelineThread as it access realm live results
|
||||||
*/
|
*/
|
||||||
private fun executePaginationTask @Inject constructor(direction: Timeline.Direction, limit: Int) {
|
private fun executePaginationTask(direction: Timeline.Direction, limit: Int) {
|
||||||
val token = getTokenLive(direction) ?: return
|
val token = getTokenLive(direction) ?: return
|
||||||
val params = PaginationTask.Params(roomId = roomId,
|
val params = PaginationTask.Params(roomId = roomId,
|
||||||
from = token,
|
from = token,
|
||||||
@ -367,7 +367,7 @@ internal class DefaultTimeline(
|
|||||||
} else {
|
} else {
|
||||||
// Database won't be updated, so we force pagination request
|
// Database won't be updated, so we force pagination request
|
||||||
backgroundHandler.get()?.post {
|
backgroundHandler.get()?.post {
|
||||||
executePaginationTask @Inject constructor(direction, limit)
|
executePaginationTask(direction, limit)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -20,8 +20,11 @@ import arrow.core.Try
|
|||||||
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.internal.task.Task
|
import im.vector.matrix.android.internal.task.Task
|
||||||
import im.vector.matrix.android.internal.network.executeRequest
|
import im.vector.matrix.android.internal.network.executeRequest
|
||||||
|
import im.vector.matrix.android.internal.session.SessionScope
|
||||||
import im.vector.matrix.android.internal.session.room.RoomAPI
|
import im.vector.matrix.android.internal.session.room.RoomAPI
|
||||||
|
import javax.inject.Inject
|
||||||
|
|
||||||
|
@SessionScope
|
||||||
internal class GetEventTask @Inject constructor(private val roomAPI: RoomAPI
|
internal class GetEventTask @Inject constructor(private val roomAPI: RoomAPI
|
||||||
) : Task<GetEventTask.Params, Event> {
|
) : Task<GetEventTask.Params, Event> {
|
||||||
|
|
||||||
|
@ -16,16 +16,34 @@
|
|||||||
|
|
||||||
package im.vector.matrix.android.internal.session.signout
|
package im.vector.matrix.android.internal.session.signout
|
||||||
|
|
||||||
|
import dagger.Binds
|
||||||
import dagger.Module
|
import dagger.Module
|
||||||
|
import dagger.Provides
|
||||||
|
import im.vector.matrix.android.api.session.signout.SignOutService
|
||||||
import im.vector.matrix.android.internal.session.SessionScope
|
import im.vector.matrix.android.internal.session.SessionScope
|
||||||
|
import im.vector.matrix.android.internal.session.user.DefaultUpdateUserTask
|
||||||
|
import im.vector.matrix.android.internal.session.user.UpdateUserTask
|
||||||
import retrofit2.Retrofit
|
import retrofit2.Retrofit
|
||||||
|
|
||||||
@Module
|
@Module
|
||||||
internal class SignOutModule {
|
internal abstract class SignOutModule {
|
||||||
|
|
||||||
@SessionScope
|
@Module
|
||||||
fun providesSignOutAPI(retrofit: Retrofit): SignOutAPI {
|
companion object {
|
||||||
return retrofit.create(SignOutAPI::class.java)
|
@SessionScope
|
||||||
|
@Provides
|
||||||
|
@JvmStatic
|
||||||
|
fun providesSignOutAPI(retrofit: Retrofit): SignOutAPI {
|
||||||
|
return retrofit.create(SignOutAPI::class.java)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Binds
|
||||||
|
@SessionScope
|
||||||
|
abstract fun bindSignOutTask(signOutTask: DefaultSignOutTask): SignOutTask
|
||||||
|
|
||||||
|
@Binds
|
||||||
|
@SessionScope
|
||||||
|
abstract fun bindSignOutService(signOutService: DefaultSignOutService): SignOutService
|
||||||
|
|
||||||
}
|
}
|
@ -16,16 +16,28 @@
|
|||||||
|
|
||||||
package im.vector.matrix.android.internal.session.sync
|
package im.vector.matrix.android.internal.session.sync
|
||||||
|
|
||||||
|
import dagger.Binds
|
||||||
import dagger.Module
|
import dagger.Module
|
||||||
|
import dagger.Provides
|
||||||
import im.vector.matrix.android.internal.session.SessionScope
|
import im.vector.matrix.android.internal.session.SessionScope
|
||||||
|
import im.vector.matrix.android.internal.session.user.DefaultUpdateUserTask
|
||||||
|
import im.vector.matrix.android.internal.session.user.UpdateUserTask
|
||||||
import retrofit2.Retrofit
|
import retrofit2.Retrofit
|
||||||
|
|
||||||
@Module
|
@Module
|
||||||
internal class SyncModule {
|
internal abstract class SyncModule {
|
||||||
|
|
||||||
@SessionScope
|
@Module
|
||||||
fun providesSyncAPI(retrofit: Retrofit): SyncAPI {
|
companion object {
|
||||||
return retrofit.create(SyncAPI::class.java)
|
@SessionScope
|
||||||
|
@Provides
|
||||||
|
@JvmStatic
|
||||||
|
fun providesSyncAPI(retrofit: Retrofit): SyncAPI {
|
||||||
|
return retrofit.create(SyncAPI::class.java)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Binds
|
||||||
|
abstract fun bindSyncTask(syncTask: DefaultSyncTask): SyncTask
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,37 @@
|
|||||||
|
/*
|
||||||
|
*
|
||||||
|
* * Copyright 2019 New Vector Ltd
|
||||||
|
* *
|
||||||
|
* * Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* * you may not use this file except in compliance with the License.
|
||||||
|
* * You may obtain a copy of the License at
|
||||||
|
* *
|
||||||
|
* * http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
* *
|
||||||
|
* * Unless required by applicable law or agreed to in writing, software
|
||||||
|
* * distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* * See the License for the specific language governing permissions and
|
||||||
|
* * limitations under the License.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
package im.vector.matrix.android.internal.session.user
|
||||||
|
|
||||||
|
import dagger.Binds
|
||||||
|
import dagger.Module
|
||||||
|
import im.vector.matrix.android.api.session.user.UserService
|
||||||
|
import im.vector.matrix.android.internal.session.SessionScope
|
||||||
|
|
||||||
|
@Module
|
||||||
|
internal abstract class UserModule {
|
||||||
|
|
||||||
|
@Binds
|
||||||
|
@SessionScope
|
||||||
|
abstract fun bindUserService(userService: DefaultUserService): UserService
|
||||||
|
|
||||||
|
@Binds
|
||||||
|
@SessionScope
|
||||||
|
abstract fun bindUpdateUserTask(updateUserTask: DefaultUpdateUserTask): UpdateUserTask
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,71 @@
|
|||||||
|
/*
|
||||||
|
*
|
||||||
|
* * Copyright 2019 New Vector Ltd
|
||||||
|
* *
|
||||||
|
* * Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* * you may not use this file except in compliance with the License.
|
||||||
|
* * You may obtain a copy of the License at
|
||||||
|
* *
|
||||||
|
* * http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
* *
|
||||||
|
* * Unless required by applicable law or agreed to in writing, software
|
||||||
|
* * distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* * See the License for the specific language governing permissions and
|
||||||
|
* * limitations under the License.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
package im.vector.matrix.android.internal.worker
|
||||||
|
|
||||||
|
import androidx.work.ListenableWorker
|
||||||
|
import dagger.Binds
|
||||||
|
import dagger.MapKey
|
||||||
|
import dagger.Module
|
||||||
|
import dagger.multibindings.IntoMap
|
||||||
|
import im.vector.matrix.android.internal.session.content.UploadContentWorker
|
||||||
|
import im.vector.matrix.android.internal.session.group.GetGroupDataWorker
|
||||||
|
import im.vector.matrix.android.internal.session.room.relation.SendRelationWorker
|
||||||
|
import im.vector.matrix.android.internal.session.room.send.EncryptEventWorker
|
||||||
|
import im.vector.matrix.android.internal.session.room.send.RedactEventWorker
|
||||||
|
import im.vector.matrix.android.internal.session.room.send.SendEventWorker
|
||||||
|
import kotlin.reflect.KClass
|
||||||
|
|
||||||
|
@MapKey
|
||||||
|
@Target(AnnotationTarget.FUNCTION)
|
||||||
|
@Retention(AnnotationRetention.RUNTIME)
|
||||||
|
internal annotation class WorkerKey(val value: KClass<out ListenableWorker>)
|
||||||
|
|
||||||
|
@Module
|
||||||
|
internal interface WorkerBindingModule {
|
||||||
|
|
||||||
|
@Binds
|
||||||
|
@IntoMap
|
||||||
|
@WorkerKey(SendEventWorker::class)
|
||||||
|
fun bindSendEventWorker(factory: SendEventWorker.Factory): DelegateWorkerFactory
|
||||||
|
|
||||||
|
@Binds
|
||||||
|
@IntoMap
|
||||||
|
@WorkerKey(SendRelationWorker::class)
|
||||||
|
fun bindSendRelationWorker(factory: SendRelationWorker.Factory): DelegateWorkerFactory
|
||||||
|
|
||||||
|
@Binds
|
||||||
|
@IntoMap
|
||||||
|
@WorkerKey(EncryptEventWorker::class)
|
||||||
|
fun bindEncryptEventWorker(factory: EncryptEventWorker.Factory): DelegateWorkerFactory
|
||||||
|
|
||||||
|
@Binds
|
||||||
|
@IntoMap
|
||||||
|
@WorkerKey(RedactEventWorker::class)
|
||||||
|
fun bindRedactEventWorker(factory: RedactEventWorker.Factory): DelegateWorkerFactory
|
||||||
|
|
||||||
|
@Binds
|
||||||
|
@IntoMap
|
||||||
|
@WorkerKey(GetGroupDataWorker::class)
|
||||||
|
fun bindGetGroupDataWorker(factory: GetGroupDataWorker.Factory): DelegateWorkerFactory
|
||||||
|
|
||||||
|
@Binds
|
||||||
|
@IntoMap
|
||||||
|
@WorkerKey(UploadContentWorker::class)
|
||||||
|
fun bindUploadContentWorker(factory: UploadContentWorker.Factory): DelegateWorkerFactory
|
||||||
|
}
|
@ -0,0 +1,29 @@
|
|||||||
|
/*
|
||||||
|
*
|
||||||
|
* * Copyright 2019 New Vector Ltd
|
||||||
|
* *
|
||||||
|
* * Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* * you may not use this file except in compliance with the License.
|
||||||
|
* * You may obtain a copy of the License at
|
||||||
|
* *
|
||||||
|
* * http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
* *
|
||||||
|
* * Unless required by applicable law or agreed to in writing, software
|
||||||
|
* * distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* * See the License for the specific language governing permissions and
|
||||||
|
* * limitations under the License.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
package im.vector.matrix.android.internal.worker
|
||||||
|
|
||||||
|
import android.content.Context
|
||||||
|
import androidx.work.ListenableWorker
|
||||||
|
import androidx.work.WorkerParameters
|
||||||
|
|
||||||
|
interface DelegateWorkerFactory {
|
||||||
|
|
||||||
|
fun create(appContext: Context, workerParameters: WorkerParameters): ListenableWorker
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,45 @@
|
|||||||
|
/*
|
||||||
|
*
|
||||||
|
* * Copyright 2019 New Vector Ltd
|
||||||
|
* *
|
||||||
|
* * Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* * you may not use this file except in compliance with the License.
|
||||||
|
* * You may obtain a copy of the License at
|
||||||
|
* *
|
||||||
|
* * http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
* *
|
||||||
|
* * Unless required by applicable law or agreed to in writing, software
|
||||||
|
* * distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* * See the License for the specific language governing permissions and
|
||||||
|
* * limitations under the License.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
package im.vector.matrix.android.internal.worker
|
||||||
|
|
||||||
|
import android.content.Context
|
||||||
|
import androidx.work.ListenableWorker
|
||||||
|
import androidx.work.WorkerFactory
|
||||||
|
import androidx.work.WorkerParameters
|
||||||
|
import im.vector.matrix.android.internal.di.MatrixScope
|
||||||
|
import javax.inject.Inject
|
||||||
|
import javax.inject.Provider
|
||||||
|
|
||||||
|
@MatrixScope
|
||||||
|
class MatrixWorkerFactory @Inject constructor(
|
||||||
|
private val workerFactories: Map<Class<out ListenableWorker>, @JvmSuppressWildcards Provider<DelegateWorkerFactory>>
|
||||||
|
) : WorkerFactory() {
|
||||||
|
|
||||||
|
override fun createWorker(
|
||||||
|
appContext: Context,
|
||||||
|
workerClassName: String,
|
||||||
|
workerParameters: WorkerParameters
|
||||||
|
): ListenableWorker? {
|
||||||
|
val foundEntry =
|
||||||
|
workerFactories.entries.find { Class.forName(workerClassName).isAssignableFrom(it.key) }
|
||||||
|
val factoryProvider = foundEntry?.value
|
||||||
|
?: throw IllegalArgumentException("unknown worker class name: $workerClassName")
|
||||||
|
return factoryProvider.get().create(appContext, workerParameters)
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user