@@ -67,7 +67,7 @@ module App =
67 | DoDisconnect
67 | DoDisconnect
68 | SetCompose of string
68 | SetCompose of string
70− | Sent of Result<MessageStatus, string>
70+ | Sent of Result<unit, string>
71 | SetNewPubkey of string
71 | SetNewPubkey of string
72 | SetNewNickname of string
72 | SetNewNickname of string
73 | DoSaveContact
73 | DoSaveContact
@@ -90,6 +90,9 @@ module App =
91 // ── Helpers ──
91 // ── Helpers ──
93+ let private nowStr () =
94+ DateTimeOffset.UtcNow.ToString("HH:mm:ss")
93 let private truncate maxLen (s: string) =
96 let private truncate maxLen (s: string) =
94 if s.Length > maxLen then s.[..maxLen - 1] + "..." else s
97 if s.Length > maxLen then s.[..maxLen - 1] + "..." else s
@@ -204,12 +207,8 @@ module App =
204 model', [ CmdSend(session, pk, compose, id); saveCmdMsg model' ]
207 model', [ CmdSend(session, pk, compose, id); saveCmdMsg model' ]
205 | _ -> model, []
208 | _ -> model, []
207− | Sent(Ok(Delivered | Federated | Queued)) -> model, []
210+ | Sent(Ok()) -> 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}" }, []
211+ | Sent(Error err) -> { model with Error = Some err }, []
214 | PollResult(incoming, status, newCursor) ->
213 | PollResult(incoming, status, newCursor) ->
215 let model' =
214 let model' =
@@ -327,10 +326,14 @@ module App =
328 let blob = Crypto.encrypt session.Identity.PrivKey recipPub payload
327 let blob = Crypto.encrypt session.Identity.PrivKey recipPub payload
329 let blobHex = Crypto.toHex blob
328 let blobHex = Crypto.toHex blob
330− let! result = sendMessage session.Url session.Token recipientHex blobHex ts
329+ let! status = sendMessage session.Url session.Token recipientHex blobHex ts
331− return Sent(Ok result.Status)
330+ return
332+ | Delivered | Federated | Queued -> Sent(Ok())
333+ | Rejected -> Sent(Error "Message rejected by server")
334+ | Unauthorized -> Sent(Error "Not authorized to deliver message")
332 with ex ->
335 with ex ->
333− return Sent(Error ex.Message)
336+ return Sent(Error $"Send failed: {ex.Message}")
336 | CmdPoll(session, cursor) ->
339 | CmdPoll(session, cursor) ->
@@ -349,7 +352,7 @@ module App =
349 if not ackIds.IsEmpty then
352 if not ackIds.IsEmpty then
350 do! ackMessages session.Url session.Token ackIds
353 do! ackMessages session.Url session.Token ackIds
352− let now = DateTimeOffset.UtcNow.ToString("HH:mm:ss")
355+ let now = nowStr ()
354 let status =
357 let status =
355 $"[{now}] evts:{response.Events.Length} msgs:{messages.Length} errs:{errors.Length}"
358 $"[{now}] evts:{response.Events.Length} msgs:{messages.Length} errs:{errors.Length}"
@@ -360,7 +363,7 @@ module App =
360 | :? TimeoutException ->
363 | :? TimeoutException ->
361 return PollResult([], "polling...", cursor)
364 return PollResult([], "polling...", cursor)
363− let now = DateTimeOffset.UtcNow.ToString("HH:mm:ss")
366+ let now = nowStr ()
364 do! Async.Sleep 3000
367 do! Async.Sleep 3000
365 return PollResult([], $"[{now}] poll error: {ex.Message}", cursor)
368 return PollResult([], $"[{now}] poll error: {ex.Message}", cursor)