macsync/@packages/imessage/Sources/IMessageSync/SendQueueAdapter.swift

30 lines
1.1 KiB
Swift
Raw Normal View History

import Foundation
import MacSyncShared
/// Bridges the iMessage server-side send-queue (legacy `icloud.send_queue`
/// table with bespoke `phoneNumber` + `body` columns) to the generic
/// `SendQueueClient` poll/apply/ack loop. The server side is intentionally
/// untouched; this adapter is what lets the Mac client consolidate around
/// the same SendQueueClient pattern that ICalSync / IReminderSync /
/// INoteSync use.
struct IMessageSendTransport: SendQueueTransport {
typealias PendingItem = PendingSendMessage
private let apiClient: any APIClientProtocol
init(apiClient: any APIClientProtocol) {
self.apiClient = apiClient
}
func id(of item: PendingSendMessage) -> String { item.id }
func fetchPending() async throws -> [PendingSendMessage] {
guard apiClient.isAuthenticated else { return [] }
return try await apiClient.getPendingSends()
}
func reportResult(id: String, status: String, error: String?) async throws {
try await apiClient.reportSendResult(messageId: id, status: status, error: error)
}
}