diff options
| author | test@dangofactory.cos <you@example.com> | 2026-08-20 16:57:18 +0000 |
|---|---|---|
| committer | test@dangofactory.cos <you@example.com> | 2026-08-20 16:57:18 +0000 |
| commit | 50ce5d5e6cd0d720ff437d35eace545816848428 (patch) | |
| tree | b59af206a36265cf081945e434900b32b0c43edd /backend/api/src/main/java/com | |
| download | monocles_mail-50ce5d5e6cd0d720ff437d35eace545816848428.tar.gz monocles_mail-50ce5d5e6cd0d720ff437d35eace545816848428.tar.bz2 monocles_mail-50ce5d5e6cd0d720ff437d35eace545816848428.zip | |
Inital
Diffstat (limited to 'backend/api/src/main/java/com')
8 files changed, 224 insertions, 0 deletions
diff --git a/backend/api/src/main/java/com/fsck/k9/backend/api/Backend.kt b/backend/api/src/main/java/com/fsck/k9/backend/api/Backend.kt new file mode 100644 index 0000000..d30476a --- /dev/null +++ b/backend/api/src/main/java/com/fsck/k9/backend/api/Backend.kt @@ -0,0 +1,101 @@ +package com.fsck.k9.backend.api + +import com.fsck.k9.mail.BodyFactory +import com.fsck.k9.mail.Flag +import com.fsck.k9.mail.Message +import com.fsck.k9.mail.MessagingException +import com.fsck.k9.mail.Part + +interface Backend { + val supportsFlags: Boolean + val supportsExpunge: Boolean + val supportsMove: Boolean + val supportsCopy: Boolean + val supportsUpload: Boolean + val supportsTrashFolder: Boolean + val supportsSearchByDate: Boolean + val isPushCapable: Boolean + + @Throws(MessagingException::class) + fun refreshFolderList() + + // TODO: Add a way to cancel the sync process + fun sync(folderServerId: String, syncConfig: SyncConfig, listener: SyncListener) + + @Throws(MessagingException::class) + fun downloadMessage(syncConfig: SyncConfig, folderServerId: String, messageServerId: String) + + @Throws(MessagingException::class) + fun downloadMessageStructure(folderServerId: String, messageServerId: String) + + @Throws(MessagingException::class) + fun downloadCompleteMessage(folderServerId: String, messageServerId: String) + + @Throws(MessagingException::class) + fun setFlag(folderServerId: String, messageServerIds: List<String>, flag: Flag, newState: Boolean) + + @Throws(MessagingException::class) + fun markAllAsRead(folderServerId: String) + + @Throws(MessagingException::class) + fun expunge(folderServerId: String) + + @Throws(MessagingException::class) + fun expungeMessages(folderServerId: String, messageServerIds: List<String>) + + @Throws(MessagingException::class) + fun deleteMessages(folderServerId: String, messageServerIds: List<String>) + + @Throws(MessagingException::class) + fun deleteAllMessages(folderServerId: String) + + @Throws(MessagingException::class) + fun moveMessages( + sourceFolderServerId: String, + targetFolderServerId: String, + messageServerIds: List<String> + ): Map<String, String>? + + @Throws(MessagingException::class) + fun moveMessagesAndMarkAsRead( + sourceFolderServerId: String, + targetFolderServerId: String, + messageServerIds: List<String> + ): Map<String, String>? + + @Throws(MessagingException::class) + fun copyMessages( + sourceFolderServerId: String, + targetFolderServerId: String, + messageServerIds: List<String> + ): Map<String, String>? + + @Throws(MessagingException::class) + fun search( + folderServerId: String, + query: String?, + requiredFlags: Set<Flag>?, + forbiddenFlags: Set<Flag>?, + performFullTextSearch: Boolean + ): List<String> + + @Throws(MessagingException::class) + fun fetchPart(folderServerId: String, messageServerId: String, part: Part, bodyFactory: BodyFactory) + + @Throws(MessagingException::class) + fun findByMessageId(folderServerId: String, messageId: String): String? + + @Throws(MessagingException::class) + fun uploadMessage(folderServerId: String, message: Message): String? + + @Throws(MessagingException::class) + fun checkIncomingServerSettings() + + @Throws(MessagingException::class) + fun sendMessage(message: Message) + + @Throws(MessagingException::class) + fun checkOutgoingServerSettings() + + fun createPusher(callback: BackendPusherCallback): BackendPusher +} diff --git a/backend/api/src/main/java/com/fsck/k9/backend/api/BackendFolder.kt b/backend/api/src/main/java/com/fsck/k9/backend/api/BackendFolder.kt new file mode 100644 index 0000000..37b92d7 --- /dev/null +++ b/backend/api/src/main/java/com/fsck/k9/backend/api/BackendFolder.kt @@ -0,0 +1,36 @@ +package com.fsck.k9.backend.api + +import com.fsck.k9.mail.Flag +import com.fsck.k9.mail.Message +import com.fsck.k9.mail.MessageDownloadState +import java.util.Date + +// FIXME: add documentation +interface BackendFolder { + val name: String + val visibleLimit: Int + + fun getMessageServerIds(): Set<String> + fun getAllMessagesAndEffectiveDates(): Map<String, Long?> + fun destroyMessages(messageServerIds: List<String>) + fun clearAllMessages() + fun getMoreMessages(): MoreMessages + fun setMoreMessages(moreMessages: MoreMessages) + fun setLastChecked(timestamp: Long) + fun setStatus(status: String?) + fun isMessagePresent(messageServerId: String): Boolean + fun getMessageFlags(messageServerId: String): Set<Flag> + fun setMessageFlag(messageServerId: String, flag: Flag, value: Boolean) + fun saveMessage(message: Message, downloadState: MessageDownloadState) + fun getOldestMessageDate(): Date? + fun getFolderExtraString(name: String): String? + fun setFolderExtraString(name: String, value: String?) + fun getFolderExtraNumber(name: String): Long? + fun setFolderExtraNumber(name: String, value: Long) + + enum class MoreMessages { + UNKNOWN, + FALSE, + TRUE + } +} diff --git a/backend/api/src/main/java/com/fsck/k9/backend/api/BackendPusher.kt b/backend/api/src/main/java/com/fsck/k9/backend/api/BackendPusher.kt new file mode 100644 index 0000000..f77bda9 --- /dev/null +++ b/backend/api/src/main/java/com/fsck/k9/backend/api/BackendPusher.kt @@ -0,0 +1,8 @@ +package com.fsck.k9.backend.api + +interface BackendPusher { + fun start() + fun updateFolders(folderServerIds: Collection<String>) + fun stop() + fun reconnect() +} diff --git a/backend/api/src/main/java/com/fsck/k9/backend/api/BackendPusherCallback.kt b/backend/api/src/main/java/com/fsck/k9/backend/api/BackendPusherCallback.kt new file mode 100644 index 0000000..d503bb7 --- /dev/null +++ b/backend/api/src/main/java/com/fsck/k9/backend/api/BackendPusherCallback.kt @@ -0,0 +1,7 @@ +package com.fsck.k9.backend.api + +interface BackendPusherCallback { + fun onPushEvent(folderServerId: String) + fun onPushError(exception: Exception) + fun onPushNotSupported() +} diff --git a/backend/api/src/main/java/com/fsck/k9/backend/api/BackendStorage.kt b/backend/api/src/main/java/com/fsck/k9/backend/api/BackendStorage.kt new file mode 100644 index 0000000..42b66bf --- /dev/null +++ b/backend/api/src/main/java/com/fsck/k9/backend/api/BackendStorage.kt @@ -0,0 +1,27 @@ +package com.fsck.k9.backend.api + +import com.fsck.k9.mail.FolderType +import java.io.Closeable + +interface BackendStorage { + fun getFolder(folderServerId: String): BackendFolder + + fun getFolderServerIds(): List<String> + + fun createFolderUpdater(): BackendFolderUpdater + + fun getExtraString(name: String): String? + fun setExtraString(name: String, value: String) + fun getExtraNumber(name: String): Long? + fun setExtraNumber(name: String, value: Long) +} + +interface BackendFolderUpdater : Closeable { + fun createFolders(folders: List<FolderInfo>) + fun deleteFolders(folderServerIds: List<String>) + fun changeFolder(folderServerId: String, name: String, type: FolderType) +} + +inline fun BackendStorage.updateFolders(block: BackendFolderUpdater.() -> Unit) { + createFolderUpdater().use { it.block() } +} diff --git a/backend/api/src/main/java/com/fsck/k9/backend/api/FolderInfo.kt b/backend/api/src/main/java/com/fsck/k9/backend/api/FolderInfo.kt new file mode 100644 index 0000000..dfee1c4 --- /dev/null +++ b/backend/api/src/main/java/com/fsck/k9/backend/api/FolderInfo.kt @@ -0,0 +1,5 @@ +package com.fsck.k9.backend.api + +import com.fsck.k9.mail.FolderType + +data class FolderInfo(val serverId: String, val name: String, val type: FolderType) diff --git a/backend/api/src/main/java/com/fsck/k9/backend/api/SyncConfig.kt b/backend/api/src/main/java/com/fsck/k9/backend/api/SyncConfig.kt new file mode 100644 index 0000000..6e3f6f8 --- /dev/null +++ b/backend/api/src/main/java/com/fsck/k9/backend/api/SyncConfig.kt @@ -0,0 +1,19 @@ +package com.fsck.k9.backend.api + +import com.fsck.k9.mail.Flag +import java.util.Date + +data class SyncConfig( + val expungePolicy: ExpungePolicy, + val earliestPollDate: Date?, + val syncRemoteDeletions: Boolean, + val maximumAutoDownloadMessageSize: Int, + val defaultVisibleLimit: Int, + val syncFlags: Set<Flag> +) { + enum class ExpungePolicy { + IMMEDIATELY, + MANUALLY, + ON_POLL + } +} diff --git a/backend/api/src/main/java/com/fsck/k9/backend/api/SyncListener.kt b/backend/api/src/main/java/com/fsck/k9/backend/api/SyncListener.kt new file mode 100644 index 0000000..026a8f8 --- /dev/null +++ b/backend/api/src/main/java/com/fsck/k9/backend/api/SyncListener.kt @@ -0,0 +1,21 @@ +package com.fsck.k9.backend.api + +interface SyncListener { + fun syncStarted(folderServerId: String) + + fun syncAuthenticationSuccess() + + fun syncHeadersStarted(folderServerId: String) + fun syncHeadersProgress(folderServerId: String, completed: Int, total: Int) + fun syncHeadersFinished(folderServerId: String, totalMessagesInMailbox: Int, numNewMessages: Int) + + fun syncProgress(folderServerId: String, completed: Int, total: Int) + fun syncNewMessage(folderServerId: String, messageServerId: String, isOldMessage: Boolean) + fun syncRemovedMessage(folderServerId: String, messageServerId: String) + fun syncFlagChanged(folderServerId: String, messageServerId: String) + + fun syncFinished(folderServerId: String) + fun syncFailed(folderServerId: String, message: String, exception: Exception?) + + fun folderStatusChanged(folderServerId: String) +} |
