30 lines
1.1 KiB
Swift
30 lines
1.1 KiB
Swift
|
|
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)
|
||
|
|
}
|
||
|
|
}
|