@@ -67,7 +67,7 @@ module App =
6767 | DoDisconnect
6868 | SetCompose of string
6969 | DoSend
70− | Sent of Result<MessageStatus, string>
70+ | Sent of Result<unit, string>
7171 | SetNewPubkey of string
7272 | SetNewNickname of string
7373 | DoSaveContact
@@ -90,6 +90,9 @@ module App =
9090
9191 // ── Helpers ──
9292
93+ let private nowStr () =
94+ DateTimeOffset.UtcNow.ToString("HH:mm:ss")
95+
9396 let private truncate maxLen (s: string) =
9497 if s.Length > maxLen then s.[..maxLen - 1] + "..." else s
9598
@@ -204,12 +207,8 @@ module App =
204207 model', [ CmdSend(session, pk, compose, id); saveCmdMsg model' ]
205208 | _ -> model, []
206209
207− | Sent(Ok(Delivered | Federated | Queued)) -> model, []
208− | Sent(Ok Rejected) ->
209− { model with Error = Some "Message rejected by server" }, []
210− | Sent(Ok Unauthorized) ->
211− { model with Error = Some "Not authorized to deliver message" }, []
212− | Sent(Error err) -> { model with Error = Some $"Send failed: {err}" }, []
210+ | Sent(Ok()) -> model, []
211+ | Sent(Error err) -> { model with Error = Some err }, []
213212
214213 | PollResult(incoming, status, newCursor) ->
215214 let model' =
@@ -327,10 +326,14 @@ module App =
327326
328327 let blob = Crypto.encrypt session.Identity.PrivKey recipPub payload
329328 let blobHex = Crypto.toHex blob
330− let! result = sendMessage session.Url session.Token recipientHex blobHex ts
331− return Sent(Ok result.Status)
329+ let! status = sendMessage session.Url session.Token recipientHex blobHex ts
330+ return
331+ match status with
332+ | Delivered | Federated | Queued -> Sent(Ok())
333+ | Rejected -> Sent(Error "Message rejected by server")
334+ | Unauthorized -> Sent(Error "Not authorized to deliver message")
332335 with ex ->
333− return Sent(Error ex.Message)
336+ return Sent(Error $"Send failed: {ex.Message}")
334337 })
335338
336339 | CmdPoll(session, cursor) ->
@@ -349,7 +352,7 @@ module App =
349352 if not ackIds.IsEmpty then
350353 do! ackMessages session.Url session.Token ackIds
351354
352− let now = DateTimeOffset.UtcNow.ToString("HH:mm:ss")
355+ let now = nowStr ()
353356
354357 let status =
355358 $"[{now}] evts:{response.Events.Length} msgs:{messages.Length} errs:{errors.Length}"
@@ -360,7 +363,7 @@ module App =
360363 | :? TimeoutException ->
361364 return PollResult([], "polling...", cursor)
362365 | ex ->
363− let now = DateTimeOffset.UtcNow.ToString("HH:mm:ss")
366+ let now = nowStr ()
364367 do! Async.Sleep 3000
365368 return PollResult([], $"[{now}] poll error: {ex.Message}", cursor)
366369 })