0
0
mirror of https://github.com/thunderbird/thunderbird-android.git synced 2024-09-20 04:02:14 +02:00

Add JMAP backend module

This commit is contained in:
cketti 2019-12-02 17:08:39 +01:00
parent 6e7f7549f8
commit 65201633e8
5 changed files with 186 additions and 0 deletions

49
backend/jmap/build.gradle Normal file
View File

@ -0,0 +1,49 @@
apply plugin: 'com.android.library'
apply plugin: 'org.jetbrains.kotlin.android'
apply plugin: 'org.jlleitschuh.gradle.ktlint'
if (rootProject.testCoverage) {
apply plugin: 'jacoco'
}
dependencies {
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:${versions.kotlin}"
api project(":backend:api")
implementation 'rs.ltt.jmap:jmap-client:0.2.2'
implementation "com.jakewharton.timber:timber:${versions.timber}"
testImplementation project(":mail:testing")
testImplementation "junit:junit:${versions.junit}"
testImplementation "org.mockito:mockito-core:${versions.mockito}"
}
android {
compileSdkVersion buildConfig.compileSdk
buildToolsVersion buildConfig.buildTools
defaultConfig {
minSdkVersion buildConfig.minSdk
}
buildTypes {
debug {
testCoverageEnabled rootProject.testCoverage
}
}
lintOptions {
abortOnError false
lintConfig file("$rootProject.projectDir/config/lint/lint.xml")
}
compileOptions {
sourceCompatibility javaVersion
targetCompatibility javaVersion
}
kotlinOptions {
jvmTarget = kotlinJvmVersion
}
}

View File

@ -0,0 +1,2 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest package="com.fsck.k9.backend.jmap" />

View File

@ -0,0 +1,126 @@
package com.fsck.k9.backend.jmap
import com.fsck.k9.backend.api.Backend
import com.fsck.k9.backend.api.BackendStorage
import com.fsck.k9.backend.api.SyncConfig
import com.fsck.k9.backend.api.SyncListener
import com.fsck.k9.mail.BodyFactory
import com.fsck.k9.mail.FetchProfile
import com.fsck.k9.mail.Flag
import com.fsck.k9.mail.Message
import com.fsck.k9.mail.Part
import com.fsck.k9.mail.PushReceiver
import com.fsck.k9.mail.Pusher
import okhttp3.HttpUrl
import rs.ltt.jmap.client.JmapClient
import rs.ltt.jmap.common.method.call.core.EchoMethodCall
class JmapBackend(
private val backendStorage: BackendStorage,
config: JmapConfig
) : Backend {
private val jmapClient = config.toJmapClient()
private val accountId = config.accountId
override val supportsSeenFlag = true
override val supportsExpunge = false
override val supportsMove = true
override val supportsCopy = true
override val supportsUpload = true
override val supportsTrashFolder = true
override val supportsSearchByDate = true
override val isPushCapable = false // FIXME
override val isDeleteMoveToTrash = false
override fun refreshFolderList() {
// TODO: implement
}
override fun sync(folder: String, syncConfig: SyncConfig, listener: SyncListener) {
// TODO: implement
}
override fun downloadMessage(syncConfig: SyncConfig, folderServerId: String, messageServerId: String) {
throw UnsupportedOperationException("not implemented")
}
override fun setFlag(folderServerId: String, messageServerIds: List<String>, flag: Flag, newState: Boolean) {
throw UnsupportedOperationException("not implemented")
}
override fun markAllAsRead(folderServerId: String) {
throw UnsupportedOperationException("not implemented")
}
override fun expunge(folderServerId: String) {
throw UnsupportedOperationException("not implemented")
}
override fun expungeMessages(folderServerId: String, messageServerIds: List<String>) {
throw UnsupportedOperationException("not implemented")
}
override fun deleteMessages(folderServerId: String, messageServerIds: List<String>) {
throw UnsupportedOperationException("not implemented")
}
override fun deleteAllMessages(folderServerId: String) {
throw UnsupportedOperationException("not implemented")
}
override fun moveMessages(sourceFolderServerId: String, targetFolderServerId: String, messageServerIds: List<String>): Map<String, String>? {
throw UnsupportedOperationException("not implemented")
}
override fun moveMessagesAndMarkAsRead(sourceFolderServerId: String, targetFolderServerId: String, messageServerIds: List<String>): Map<String, String>? {
throw UnsupportedOperationException("not implemented")
}
override fun copyMessages(sourceFolderServerId: String, targetFolderServerId: String, messageServerIds: List<String>): Map<String, String>? {
throw UnsupportedOperationException("not implemented")
}
override fun search(folderServerId: String, query: String?, requiredFlags: Set<Flag>?, forbiddenFlags: Set<Flag>?): List<String> {
throw UnsupportedOperationException("not implemented")
}
override fun fetchMessage(folderServerId: String, messageServerId: String, fetchProfile: FetchProfile): Message {
throw UnsupportedOperationException("not implemented")
}
override fun fetchPart(folderServerId: String, messageServerId: String, part: Part, bodyFactory: BodyFactory) {
throw UnsupportedOperationException("not implemented")
}
override fun findByMessageId(folderServerId: String, messageId: String): String? {
throw UnsupportedOperationException("not implemented")
}
override fun uploadMessage(folderServerId: String, message: Message): String? {
throw UnsupportedOperationException("not implemented")
}
override fun createPusher(receiver: PushReceiver): Pusher {
throw UnsupportedOperationException("not implemented")
}
override fun checkIncomingServerSettings() {
jmapClient.call(EchoMethodCall()).get()
}
override fun sendMessage(message: Message) {
throw UnsupportedOperationException("not implemented")
}
override fun checkOutgoingServerSettings() {
checkIncomingServerSettings()
}
private fun JmapConfig.toJmapClient(): JmapClient {
return if (baseUrl == null) {
JmapClient(username, password)
} else {
val baseHttpUrl = HttpUrl.parse(baseUrl)
JmapClient(username, password, baseHttpUrl)
}
}
}

View File

@ -0,0 +1,8 @@
package com.fsck.k9.backend.jmap
data class JmapConfig(
val username: String,
val password: String,
val baseUrl: String?,
val accountId: String
)

View File

@ -15,4 +15,5 @@ include ':backend:api'
include ':backend:imap'
include ':backend:pop3'
include ':backend:webdav'
include ':backend:jmap'
include ':plugins:openpgp-api-lib:openpgp-api'