Skip to content

Fix Bluesky login, bubble overlap, image timestamps, join lag - #3

Merged
codegod100 merged 10 commits into
mainfrom
cursor/bluesky-browser-launch-fe0c
Aug 4, 2026
Merged

Fix Bluesky login, bubble overlap, image timestamps, join lag#3
codegod100 merged 10 commits into
mainfrom
cursor/bluesky-browser-launch-fe0c

Conversation

@codegod100

@codegod100 codegod100 commented Aug 4, 2026

Copy link
Copy Markdown
Owner

Summary

Timestamps now appear under every comic panel (the beige strip below each panel border), not only inside photo cards.

What changed

  • Pass IRCv3 server-time into all balloons (text, replies, images)
  • Draw a centered time label under each panel in the strip
  • Reserve vertical space under the panels for that label
  • Photo cards still keep their in-card footer as well

Connect freeze (earlier in this PR)

True async rpg.actor sprite fetches (no nested QEventLoop); history join deferred/batched.

Test plan

  • Connect — UI stays responsive
  • Each comic panel shows a time under its border (e.g. Aug 4, 4:48 AM)
  • Image panels still show time under the photo and under the panel
  • New live messages get a timestamp too
Open in Web Open in Cursor 

cursoragent and others added 5 commits August 4, 2026 03:50
QImage::flipped() is not available in Qt 6.4 (Ubuntu 24.04).
Use mirrored(true, false) so the qt-port builds on common Linux distros.

Co-authored-by: nandi <codegod100@users.noreply.github.com>
QDesktopServices::openUrl often fails silently on Linux or hands URLs to an
existing Chrome session without opening a visible window.

- Add openUrlInBrowser() with google-chrome --new-window and a dedicated
  user-data-dir under /tmp/comic-chat-chrome
- Show a non-modal Bluesky login dialog with Open in browser and Copy URL
- Require a real ATProto handle (no IRC nick fallback); reject spaces

Co-authored-by: nandi <codegod100@users.noreply.github.com>
Stack balloons by full box height plus separation instead of a third-height
step, then resolve cloud-box overlaps against prior balloons and character
bodies by shifting upward. If vertical space is exhausted at the panel top,
nudge sideways for side-by-side speakers.

Co-authored-by: nandi <codegod100@users.noreply.github.com>
Parse IRCv3 server-time from message tags (fallback to local time), reserve
layout space under the bitmap, and draw a muted timestamp line between the
image and nick/caption on photo cards.

Co-authored-by: nandi <codegod100@users.noreply.github.com>
Cap balloon width to each character slot (~90% of panel/crowd), stack only
same-speaker repeats vertically, stagger bubbles by body rank left-to-right,
and resolve remaining overlaps by shifting up then right/left iteratively.

Co-authored-by: nandi <codegod100@users.noreply.github.com>
@cursor cursor Bot changed the title Fix Bluesky login browser launch on Linux Fix Bluesky login, bubble overlap, image timestamps, join lag Aug 4, 2026
cursoragent and others added 5 commits August 4, 2026 04:24
- Parse IRC server-time with Z suffix; always stamp a display time on images
- Lay out and draw timestamp in a dedicated row under the photo bitmap
- Batch comic panel relayout during history flush (one repaint vs per line)
- Skip balloon msgid scans during history flood; cache msgids only until flush

Co-authored-by: nandi <codegod100@users.noreply.github.com>
- Include timestamp row height in image card cloudBox so timestamps are not
  clipped by the photo frame clip rect
- Default timestamp on image balloons when none was passed
- Honor fastJoin: skip per-line rpg.actor fetches during history flush
- Defer image downloads until panel batch ends; batch react relayouts
- Queue chat log lines during IRC history and flush once at batch end

Co-authored-by: nandi <codegod100@users.noreply.github.com>
Timestamps were drawn under the image then immediately painted over by
the nick/caption at the same Y. Caption now starts below timeBox.

Connect freeze came from nested QEventLoop HTTP in rpg.actor sprite
fetches during join. requestSpriteAsync uses plain QNetworkReply chains;
ensureRpgSpriteAsync and connect/login no longer block the UI thread.

Also treat join-window PRIVMSG as history for 8s when BATCH tags are
missing, and insert the history log in one pass without per-row scroll.

Co-authored-by: nandi <codegod100@users.noreply.github.com>
Portrait photos sized the white card to the bitmap width, which was
narrower than "Aug 4, 4:48 AM" — the clip rect cut the timestamp away.
Widen the card to fit the timestamp, stop clipping text to the frame,
and draw a clear footer band under the photo.

Co-authored-by: nandi <codegod100@users.noreply.github.com>
Timestamps were only drawn inside photo cards. Text panels (hrm, lalala,
etc.) had no time at all. Pass IRCv3 server-time into all balloons and
draw the label centered under each panel border in the strip.

Co-authored-by: nandi <codegod100@users.noreply.github.com>
@codegod100
codegod100 marked this pull request as ready for review August 4, 2026 05:00
Copilot AI lite review requested due to automatic review settings August 4, 2026 05:00
@codegod100
codegod100 merged commit a524383 into main Aug 4, 2026
1 check passed

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR improves the Qt port’s chat UX by making Bluesky login more reliable, reducing join/connect UI lag, improving balloon layout (overlap avoidance), and ensuring message timestamps are rendered consistently (including a new per-panel footer strip).

Changes:

  • Add a cross-platform openUrlInBrowser() helper and wire it into Freeq login with a non-blocking “Bluesky login” dialog.
  • Convert rpg.actor sprite fetching to a fully async path and batch/queue join-history updates to keep the UI responsive.
  • Propagate IRCv3 server-time into scene balloons and render timestamps under each panel (plus a photo-card footer), while adding balloon overlap resolution.

Reviewed changes

Copilot reviewed 16 out of 16 changed files in this pull request and generated 1 comment.

Show a summary per file
File Description
qt-port/platform/BrowserLaunch.h Declares a helper for launching URLs via explicit browser binaries (esp. Linux).
qt-port/platform/BrowserLaunch.cpp Implements browser launch attempts (Chrome/Chromium/Firefox/xdg-open) with fallback to QDesktopServices.
qt-port/net/RpgActorClient.h Introduces async sprite request API and in-flight tracking.
qt-port/net/RpgActorClient.cpp Implements async network chain for sprite resolution/download without nested event loops.
qt-port/net/IrcClient.h Adds a short post-JOIN history window to classify messages as history even without BATCH tags.
qt-port/net/IrcClient.cpp Implements join-history timer/window and flush behavior.
qt-port/net/FreeqAuth.h Adds loginUrlReady(url, browserOpened) signal for UI handling.
qt-port/net/FreeqAuth.cpp Uses openUrlInBrowser() and emits loginUrlReady instead of relying solely on QDesktopServices.
qt-port/engine/scene.h Adds per-balloon timestamp storage, updates APIs to accept timestamps, and adds overlap-resolution hooks.
qt-port/engine/scene.cpp Implements timestamp layout/drawing (panel footer + photo footer), overlap resolution, and various layout adjustments.
qt-port/engine/pose.cpp Switches horizontal flip implementation to mirrored(true, false).
qt-port/CMakeLists.txt Adds BrowserLaunch.cpp to the comic_platform static library.
qt-port/app/MainWindow.h Adds login URL handler + queues history log lines for batched flush.
qt-port/app/MainWindow.cpp Implements non-modal login URL dialog; batches history log/comic updates to reduce join lag.
qt-port/app/ComicWidget.h Adds batch-update API, async timestamp formatting, and deferred image fetch during batching.
qt-port/app/ComicWidget.cpp Implements batching/deferred fetches, server-time formatting, and async rpg sprite request path.

Comment on lines +67 to +70
if (attempt.profileFlag && attempt.profilePath) {
args << QString::fromUtf8(attempt.profileFlag)
<< QString::fromUtf8(attempt.profilePath);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants