feat: show per-relay publish status on outgoing messages #290

Merged
hodlbod merged 1 commits from userAdityaa/flotilla:feat/per-relay-message-delivery-status into dev 2026-06-04 21:10:00 +00:00
Collaborator

Summary

Outgoing messages in DMs and rooms now show a delivery status row (sending, delivered, partial, failed) with colored icons and neutral text. Tapping a completed status opens a per-relay breakdown with errors and per-relay retry. Desktop chat views get bottom padding so the last message and status row clear the compose bar.

Closes #56.

Screenshots

Screenshot 2026-06-01 at 3.27.07 PM.pngScreenshot 2026-06-01 at 3.27.18 PM.pngScreenshot 2026-06-01 at 3.30.20 PM.png

### Summary Outgoing messages in DMs and rooms now show a delivery status row (sending, delivered, partial, failed) with colored icons and neutral text. Tapping a completed status opens a per-relay breakdown with errors and per-relay retry. Desktop chat views get bottom padding so the last message and status row clear the compose bar. Closes #56. ### Screenshots <img width="711" alt="Screenshot 2026-06-01 at 3.27.07 PM.png" src="attachments/465cd7e4-f164-44dd-aabb-71fe3462492d"><img width="711" alt="Screenshot 2026-06-01 at 3.27.18 PM.png" src="attachments/aafe735e-0044-4166-9402-ea616c5e3aaf"><img width="709" alt="Screenshot 2026-06-01 at 3.30.20 PM.png" src="attachments/95a2c80b-238c-4045-8a81-f659d41c1b37">
Owner

This is a regression of a lot of behavior that is subtle but deliberate. Biggest thing is that there should be no success messages — only pending and failure. So the restructure of ThunkStatus etc is unnecessary, this issue is pretty much just about changing how failure renders to show more information.

This is a regression of a lot of behavior that is subtle but deliberate. Biggest thing is that there should be no success messages — only pending and failure. So the restructure of ThunkStatus etc is unnecessary, this issue is pretty much just about changing how failure renders to show more information.
userAdityaa force-pushed feat/per-relay-message-delivery-status from d2f2263676 to 39a58910f8 2026-06-02 05:57:13 +00:00 Compare
Author
Collaborator

Yeah, I felt the same about not including all of those. However, from the discussion here, my understanding was that we had agreed to show those status messages, so I went ahead and implemented them. I've reverted those changes now, and currently only the pending and failed states are shown.

Yeah, I felt the same about not including all of those. However, from the [discussion here](https://gitea.coracle.social/coracle/flotilla/issues/56#issuecomment-2527), my understanding was that we had agreed to show those status messages, so I went ahead and implemented them. I've reverted those changes now, and currently only the pending and failed states are shown.
hodlbod reviewed 2026-06-02 15:53:45 +00:00
hodlbod left a comment
Owner

Makes sense, I didn't even notice that change in the mockup.

  • On line 21 of ThunkFailure, the aborted urls are never relevant, because if the thunk was aborted its event will have been removed from the repository and it won't be visible.
  • I don't think the manual management of the popover is necessary, I think hiding on hide is probably the default behavior.
Makes sense, I didn't even notice that change in the mockup. - On line 21 of ThunkFailure, the aborted urls are never relevant, because if the thunk was aborted its event will have been removed from the repository and it won't be visible. - I don't think the manual management of the popover is necessary, I think hiding on hide is probably the default behavior.
@@ -125,6 +122,9 @@
<Content showEntire {event} />
</div>
</TapTarget>
{#if isOwn && thunk}
Owner

This check is redundant, there will never be a thunk for an event not by the current author.

This check is redundant, there will never be a thunk for an event not by the current author.
hodlbod marked this conversation as resolved
@@ -128,3 +128,2 @@
<RoomItemContent {url} event={$innerEvent ?? event} />
{#if thunk}
<ThunkFailure showToastOnRetry {thunk} class="mt-2 text-sm" />
{#if event.pubkey === $pubkey && thunk}
Owner

This check is redundant, there will never be a thunk for an event not by the current author.

This check is redundant, there will never be a thunk for an event not by the current author.
hodlbod marked this conversation as resolved
@@ -16,0 +31,4 @@
const successUrls = $derived(getThunkUrlsWithStatus(PublishStatus.Success, $thunk))
const failedUrls = $derived([
...getFailedThunkUrls($thunk),
...getThunkUrlsWithStatus(PublishStatus.Aborted, $thunk),
Owner

This isn't necessary, if a thunk is aborted the event is removed from the repo and will not appear.

This isn't necessary, if a thunk is aborted the event is removed from the repo and will not appear.
hodlbod reviewed 2026-06-02 15:56:08 +00:00
@@ -25,0 +70,4 @@
return
}
}
Owner

Why inline this instead of pass retry through?

Why inline this instead of pass retry through?
userAdityaa force-pushed feat/per-relay-message-delivery-status from 39a58910f8 to fb3d9f3923 2026-06-03 17:14:04 +00:00 Compare
hodlbod reviewed 2026-06-03 17:27:00 +00:00
@@ -471,3 +471,3 @@
onscroll={onScroll}
class={cx(
"flex-col-reverse pb-0! pt-4",
"flex-col-reverse pb-0! pt-4 md:pb-8!",
Owner

This breaks on small screens

This breaks on small screens
hodlbod reviewed 2026-06-03 17:27:08 +00:00
@@ -319,3 +319,3 @@
</SpaceBar>
<PageContent bind:element onscroll={onScroll} class="flex flex-col-reverse pt-4 pb-0!">
<PageContent bind:element onscroll={onScroll} class="flex flex-col-reverse pt-4 pb-0! md:pb-8!">
Owner

This breaks on small screens

This breaks on small screens
userAdityaa force-pushed feat/per-relay-message-delivery-status from fb3d9f3923 to caf3f620e4 2026-06-03 19:53:26 +00:00 Compare
hodlbod reviewed 2026-06-03 23:12:39 +00:00
@@ -67,4 +67,1 @@
{#if thunk}
<ThunkFailure showToastOnRetry {thunk} class="mt-1" />
{/if}
Owner

I think moving this may be causing the problem in the screenshot below.

I think moving this may be causing the problem in the screenshot below.
hodlbod reviewed 2026-06-03 23:14:49 +00:00
hodlbod left a comment
Owner

Looks good, just one more thing

Looks good, just one more thing
@@ -128,3 +128,3 @@
<RoomItemContent {url} event={$innerEvent ?? event} />
{#if thunk}
<ThunkFailure showToastOnRetry {thunk} class="mt-2 text-sm" />
<ThunkFailure showToastOnRetry {thunk} class="mt-1 flex justify-end" />
Owner

Or maybe this

Or maybe this
userAdityaa force-pushed feat/per-relay-message-delivery-status from caf3f620e4 to 7365fb7a35 2026-06-04 05:07:17 +00:00 Compare
userAdityaa force-pushed feat/per-relay-message-delivery-status from 7365fb7a35 to 6255dc2d39 2026-06-04 05:13:26 +00:00 Compare
hodlbod added 1 commit 2026-06-04 21:09:54 +00:00
hodlbod force-pushed feat/per-relay-message-delivery-status from 6255dc2d39 to 32cf909d45 2026-06-04 21:09:54 +00:00 Compare
hodlbod merged commit 4d57e4e6ed into dev 2026-06-04 21:10:00 +00:00
hodlbod deleted branch feat/per-relay-message-delivery-status 2026-06-04 21:10:00 +00:00
Sign in to join this conversation.