427f197bb3
Extend IMAPClientProtocol with storeFlags, moveMessage, copyMessage, expunge, appendMessage, capabilities methods. Implement all six in IMAPClient actor using NIOIMAPCore typed commands. Add multi-part command support to IMAPConnection/IMAPCommandRunner for APPEND. MockIMAPClient tracks all write calls for testing. SyncCoordinator detects mailbox roles from LIST attributes with name-based fallback. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
20 lines
910 B
Swift
20 lines
910 B
Swift
import Foundation
|
|
|
|
public protocol IMAPClientProtocol: Sendable {
|
|
func connect() async throws
|
|
func disconnect() async throws
|
|
func listMailboxes() async throws -> [IMAPMailboxInfo]
|
|
func selectMailbox(_ name: String) async throws -> IMAPMailboxStatus
|
|
func fetchEnvelopes(uidsGreaterThan uid: Int) async throws -> [FetchedEnvelope]
|
|
func fetchFlags(uids: ClosedRange<Int>) async throws -> [UIDFlagsPair]
|
|
func fetchBody(uid: Int) async throws -> (text: String?, html: String?)
|
|
|
|
// v0.3 write operations
|
|
func storeFlags(uid: Int, mailbox: String, add: [String], remove: [String]) async throws
|
|
func moveMessage(uid: Int, from: String, to: String) async throws
|
|
func copyMessage(uid: Int, from: String, to: String) async throws
|
|
func expunge(mailbox: String) async throws
|
|
func appendMessage(to mailbox: String, message: Data, flags: [String]) async throws
|
|
func capabilities() async throws -> Set<String>
|
|
}
|