mirror of
https://github.com/thunderbird/thunderbird-android.git
synced 2024-09-20 04:02:14 +02:00
Add AutoDiscoveryRegistry to easily change the available discovery mechanisms
This commit is contained in:
parent
3a121f335b
commit
e19dae0021
@ -1,6 +1,8 @@
|
||||
package app.k9mail.feature.account.setup
|
||||
|
||||
import app.k9mail.autodiscovery.api.AutoDiscoveryRegistry
|
||||
import app.k9mail.autodiscovery.api.AutoDiscoveryService
|
||||
import app.k9mail.autodiscovery.service.RealAutoDiscoveryRegistry
|
||||
import app.k9mail.autodiscovery.service.RealAutoDiscoveryService
|
||||
import app.k9mail.feature.account.common.featureAccountCommonModule
|
||||
import app.k9mail.feature.account.oauth.featureAccountOAuthModule
|
||||
@ -42,9 +44,15 @@ val featureAccountSetupModule: Module = module {
|
||||
OkHttpClient()
|
||||
}
|
||||
|
||||
single<AutoDiscoveryRegistry> {
|
||||
RealAutoDiscoveryRegistry.createDefault(
|
||||
okHttpClient = get(),
|
||||
)
|
||||
}
|
||||
|
||||
single<AutoDiscoveryService> {
|
||||
RealAutoDiscoveryService(
|
||||
okHttpClient = get(),
|
||||
autoDiscoveryRegistry = get(),
|
||||
)
|
||||
}
|
||||
|
||||
|
@ -0,0 +1,5 @@
|
||||
package app.k9mail.autodiscovery.api
|
||||
|
||||
interface AutoDiscoveryRegistry {
|
||||
fun getAutoDiscoveries(): List<AutoDiscovery>
|
||||
}
|
@ -0,0 +1,41 @@
|
||||
package app.k9mail.autodiscovery.service
|
||||
|
||||
import app.k9mail.autodiscovery.api.AutoDiscovery
|
||||
import app.k9mail.autodiscovery.api.AutoDiscoveryRegistry
|
||||
import app.k9mail.autodiscovery.autoconfig.AutoconfigUrlConfig
|
||||
import app.k9mail.autodiscovery.autoconfig.createIspDbAutoconfigDiscovery
|
||||
import app.k9mail.autodiscovery.autoconfig.createMxLookupAutoconfigDiscovery
|
||||
import app.k9mail.autodiscovery.autoconfig.createProviderAutoconfigDiscovery
|
||||
import okhttp3.OkHttpClient
|
||||
|
||||
class RealAutoDiscoveryRegistry(
|
||||
private val autoDiscoveries: List<AutoDiscovery> = emptyList(),
|
||||
) : AutoDiscoveryRegistry {
|
||||
|
||||
override fun getAutoDiscoveries(): List<AutoDiscovery> = autoDiscoveries
|
||||
|
||||
companion object {
|
||||
val defaultAutoconfigUrlConfig = AutoconfigUrlConfig(
|
||||
httpsOnly = false,
|
||||
includeEmailAddress = false,
|
||||
)
|
||||
|
||||
fun createDefault(
|
||||
okHttpClient: OkHttpClient,
|
||||
autoconfigUrlConfig: AutoconfigUrlConfig = defaultAutoconfigUrlConfig,
|
||||
): RealAutoDiscoveryRegistry = RealAutoDiscoveryRegistry(
|
||||
autoDiscoveries = listOf(
|
||||
createProviderAutoconfigDiscovery(
|
||||
okHttpClient = okHttpClient,
|
||||
config = autoconfigUrlConfig,
|
||||
),
|
||||
createMxLookupAutoconfigDiscovery(
|
||||
okHttpClient = okHttpClient,
|
||||
),
|
||||
createIspDbAutoconfigDiscovery(
|
||||
okHttpClient = okHttpClient,
|
||||
),
|
||||
),
|
||||
)
|
||||
}
|
||||
}
|
@ -1,40 +1,21 @@
|
||||
package app.k9mail.autodiscovery.service
|
||||
|
||||
import app.k9mail.autodiscovery.api.AutoDiscoveryRegistry
|
||||
import app.k9mail.autodiscovery.api.AutoDiscoveryResult
|
||||
import app.k9mail.autodiscovery.api.AutoDiscoveryService
|
||||
import app.k9mail.autodiscovery.autoconfig.AutoconfigUrlConfig
|
||||
import app.k9mail.autodiscovery.autoconfig.createIspDbAutoconfigDiscovery
|
||||
import app.k9mail.autodiscovery.autoconfig.createMxLookupAutoconfigDiscovery
|
||||
import app.k9mail.autodiscovery.autoconfig.createProviderAutoconfigDiscovery
|
||||
import app.k9mail.core.common.mail.EmailAddress
|
||||
import okhttp3.OkHttpClient
|
||||
|
||||
/**
|
||||
* Uses Thunderbird's Autoconfig mechanism to find mail server settings for a given email address.
|
||||
*/
|
||||
class RealAutoDiscoveryService(
|
||||
private val okHttpClient: OkHttpClient,
|
||||
private val autoDiscoveryRegistry: AutoDiscoveryRegistry,
|
||||
) : AutoDiscoveryService {
|
||||
|
||||
override suspend fun discover(email: EmailAddress): AutoDiscoveryResult {
|
||||
val config = AutoconfigUrlConfig(
|
||||
httpsOnly = false,
|
||||
includeEmailAddress = false,
|
||||
val runner = PriorityParallelRunner(
|
||||
runnables = autoDiscoveryRegistry.getAutoDiscoveries().flatMap { it.initDiscovery(email) },
|
||||
)
|
||||
|
||||
val providerDiscovery = createProviderAutoconfigDiscovery(okHttpClient, config)
|
||||
val ispDbDiscovery = createIspDbAutoconfigDiscovery(okHttpClient)
|
||||
val mxDiscovery = createMxLookupAutoconfigDiscovery(okHttpClient)
|
||||
|
||||
val runnables = listOf(
|
||||
providerDiscovery,
|
||||
ispDbDiscovery,
|
||||
mxDiscovery,
|
||||
).flatMap { discovery ->
|
||||
discovery.initDiscovery(email)
|
||||
}
|
||||
|
||||
val runner = PriorityParallelRunner(runnables)
|
||||
return runner.run()
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,30 @@
|
||||
package app.k9mail.autodiscovery.service
|
||||
|
||||
import app.k9mail.autodiscovery.api.AutoDiscovery
|
||||
import app.k9mail.autodiscovery.api.AutoDiscoveryRunnable
|
||||
import app.k9mail.core.common.mail.EmailAddress
|
||||
import assertk.assertThat
|
||||
import assertk.assertions.isEqualTo
|
||||
import kotlin.test.Test
|
||||
|
||||
class RealAutoDiscoveryRegistryTest {
|
||||
|
||||
@Test
|
||||
fun `getAutoDiscoveries should return given discoveries`() {
|
||||
val autoDiscoveries = listOf(
|
||||
TestAutoDiscovery(),
|
||||
TestAutoDiscovery(),
|
||||
)
|
||||
val testSubject = RealAutoDiscoveryRegistry(autoDiscoveries)
|
||||
|
||||
val result = testSubject.getAutoDiscoveries()
|
||||
|
||||
assertThat(result).isEqualTo(autoDiscoveries)
|
||||
}
|
||||
|
||||
private class TestAutoDiscovery : AutoDiscovery {
|
||||
override fun initDiscovery(email: EmailAddress): List<AutoDiscoveryRunnable> {
|
||||
return emptyList()
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user