172 Commits

Author SHA1 Message Date
jared 5cc84991f2 fix(badge): zero-init DIB bits buffer to eliminate black square
Build Lotus Chat Desktop / prepare (push) Successful in 3s
Build Lotus Chat Desktop / update-manifest (push) Has been cancelled
Build Lotus Chat Desktop / build-windows (push) Has been cancelled
Build Lotus Chat Desktop / build-linux (push) Has been cancelled
CreateDIBSection does not guarantee zeroed memory. Uninitialized bytes
with non-zero RGB but zero alpha were getting alpha=255 set by the
existing pixel loop, causing a black square around the badge circle.
Zeroing with write_bytes before GDI drawing ensures only explicitly
painted pixels are opaque.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-15 20:35:31 -04:00
jared 524fa61c01 fix(desktop): taskbar badge transparent circle + larger size
The Windows overlay badge rendered as a black square because GDI drawing
functions do not write the alpha channel — all pixels stay at A=0, causing
Windows to fall back to the opaque monochrome mask and draw corner pixels
as solid black.

Fix: after all GDI calls, iterate the pixel buffer and set alpha=0xFF for
every non-zero pixel; corner pixels (zero) retain A=0 and composite as
transparent, giving a proper circular badge.

Also increased bitmap size 16→20 and font height 11→14 for better
legibility, especially for two-digit mention counts.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-14 17:39:50 -04:00
jared b8f0d7d498 feat(desktop): tray unread overlay + taskbar flash
Build Lotus Chat Desktop / prepare (push) Successful in 16s
Build Lotus Chat Desktop / build-windows (push) Successful in 32m14s
Build Lotus Chat Desktop / build-linux (push) Successful in 25m15s
Build Lotus Chat Desktop / update-manifest (push) Successful in 10s
- set_tray_unread command re-renders the tray icon with a red unread dot
  composited onto the base icon (handle + base pixels kept in managed state).
- flash_window command flashes the taskbar via request_user_attention.
- Register both commands; bump cinny submodule to 107921e0 (web wiring).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-13 23:53:52 -04:00
jared a0707e6113 fix(desktop): enable tauri tray-icon feature
Build Lotus Chat Desktop / prepare (push) Successful in 7s
Build Lotus Chat Desktop / build-linux (push) Successful in 23m1s
Build Lotus Chat Desktop / build-windows (push) Successful in 27m10s
Build Lotus Chat Desktop / update-manifest (push) Successful in 3s
tauri::tray is gated behind the 'tray-icon' Cargo feature; the tray code
failed to compile without it (E0432). Also enable image-png for tray icon
decoding.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-13 19:59:05 -04:00
jared 5da2069eba feat: Windows-native desktop polish (tray, single-instance, deep links, Mica, installer)
Build Lotus Chat Desktop / prepare (push) Successful in 3s
Build Lotus Chat Desktop / build-linux (push) Failing after 14m12s
Build Lotus Chat Desktop / build-windows (push) Failing after 22m14s
Build Lotus Chat Desktop / update-manifest (push) Has been skipped
- System tray with Open/Quit menu + left-click toggle; closing the window now
  minimizes to tray instead of quitting, so notifications keep arriving.
- Single-instance: a second launch focuses the running window (and forwards a
  matrix: link) instead of colliding on the localhost port.
- Window: 1100x720 default, 480x600 min, centered first run; starts hidden and
  shows on page-load to kill the white launch flash (8s failsafe).
- matrix: deep links via tauri-plugin-deep-link -> dispatched to the web client
  (useDeepLinkNavigate) for both cold-start and already-running cases.
- Windows 11 Mica backdrop (subtle; app paints opaque TDS bg).
- NSIS installer: per-user install (no UAC), downloadBootstrapper.
- Remove dead/broken src/menu.rs.
- Bump cinny submodule to 053b364a (deep-link web handler).

Note: Rust not compiled locally (no toolchain / Windows-only paths); verified by
careful API review against tauri 2.10 — needs a real 'tauri build' to confirm.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-13 18:52:37 -04:00
jared 368953c0d6 feat: transparent Lotus app icons (no more black/checkerboard square)
Build Lotus Chat Desktop / prepare (push) Successful in 3s
Build Lotus Chat Desktop / build-linux (push) Successful in 23m36s
Build Lotus Chat Desktop / build-windows (push) Successful in 28m0s
Build Lotus Chat Desktop / update-manifest (push) Successful in 3s
Regenerated all desktop icons (32/128/128@2x PNG, multi-res icon.ico [16-256],
icon.icns, Windows Store Square*/StoreLogo) from a genuinely transparent
1024x1024 Lotus source via 'tauri icon'. The old icons had a black square
background that looked wrong on the Windows taskbar; these have an alpha
background so only the lotus + dove show.

Also bumps the cinny submodule to 3282832a (corrected transparent source asset).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-13 14:57:11 -04:00
jared a7e0d7bef9 Fix FONT_PITCH_AND_FAMILY, CreateBitmap, and linuxdeploy ELF wrapper
Windows (windows-rs 0.61):
- FONT_PITCH_AND_FAMILY does not exist; ipitchandfamily is u32 - revert
  to (DEFAULT_PITCH.0 | FF_DONTCARE.0) as u32
- CreateBitmap returns HBITMAP directly (not Result<HBITMAP>); replace
  .map_err()? with explicit null pointer check on hbm_mask.0

Linux AppImage:
- Shell script wrapper is destroyed by Tauri's `dd if=/dev/zero bs=1
  count=3 seek=8` which zeroes the shebang at bytes 8-10
- Compile a tiny C ELF forwarder instead: ELF bytes 8-10 are
  EI_OSABI/EI_ABIVERSION padding (already zero), dd is a no-op
- Use page-aligned squashfs offset search for more reliable extraction
- Add set -e to Stage step and explicit gcc install

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-11 11:27:06 -04:00
jared 768c286d4a Fix Windows badge API for windows-rs 0.61 + add libfuse2 for Linux AppImage
Build Lotus Chat Desktop / prepare (push) Successful in 5s
Build Lotus Chat Desktop / build-linux (push) Failing after 14m42s
Build Lotus Chat Desktop / build-windows (push) Failing after 16m14s
Build Lotus Chat Desktop / update-manifest (push) Has been skipped
- Move BOOL import to windows::core (removed from Win32::Foundation in 0.61)
- Move CreateBitmap import from WindowsAndMessaging to Win32::Graphics::Gdi
- Wrap nullable handles in Some() for GetDC, CreateCompatibleDC,
  CreateDIBSection, ReleaseDC (new Option<T> API in 0.61)
- Add .into() for all SelectObject/DeleteObject GDI handle args (now HGDIOBJ)
- Use FONT_PITCH_AND_FAMILY type directly in CreateFontW instead of u32 cast
- Make DrawTextW slice mutable (&mut [u16] required in 0.61)
- Use hicon.unwrap_or_default() for SetOverlayIcon (takes HICON not Option<HICON>)
- Add libfuse2 to apt-get for Linux AppImage bundler (FUSE mount fallback)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-11 10:20:34 -04:00
jared 3be18b8e5d fix: Windows JSON patch via node, Linux AppImage via APPIMAGE_EXTRACT_AND_RUN
Build Lotus Chat Desktop / prepare (push) Successful in 8s
Build Lotus Chat Desktop / build-linux (push) Failing after 18m17s
Build Lotus Chat Desktop / build-windows (push) Failing after 20m37s
Build Lotus Chat Desktop / update-manifest (push) Has been skipped
Windows: ConvertTo-Json outputs True/False (invalid JSON) and UTF-16
BOM, corrupting tauri.conf.json. Switch to `node -e` which round-trips
JSON correctly.

Linux: linuxdeploy is itself an AppImage and cannot execute inside
Docker without FUSE. APPIMAGE_EXTRACT_AND_RUN=1 makes it self-extract
and run as a plain binary instead.

Also fix unreachable_code warning in check_for_update.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-10 22:52:54 -04:00
jared 0bdaa66d24 fix: convert all PNG icons from RGB to RGBA
Build Lotus Chat Desktop / prepare (push) Successful in 8s
Build Lotus Chat Desktop / build-linux (push) Failing after 18m9s
Build Lotus Chat Desktop / build-windows (push) Failing after 22m23s
Build Lotus Chat Desktop / update-manifest (push) Has been skipped
Tauri's generate_context! macro requires RGBA PNG icons. All 14 files
were RGB (source logo is RGB); converted with Pillow.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-10 20:38:18 -04:00
jared 32286d03de feat: native notifications + in-app update checker
Build Lotus Chat Desktop / prepare (push) Successful in 9s
Build Lotus Chat Desktop / build-linux (push) Failing after 18m6s
Build Lotus Chat Desktop / build-windows (push) Failing after 23m47s
Build Lotus Chat Desktop / update-manifest (push) Has been skipped
- Register tauri-plugin-notification; inject initialization script that
  patches window.Notification to route through the native plugin and
  always report permission as granted — bypasses WebView2's default deny
- Also grant COREWEBVIEW2_PERMISSION_KIND_NOTIFICATIONS via existing
  PermissionRequestedEventHandler
- Register tauri-plugin-updater; add check_for_update and install_update
  commands using the pubkey/endpoint already in tauri.conf.json

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-10 20:31:25 -04:00
jared b4812e6659 feat: Windows taskbar overlay badge via ITaskbarList3
Build Lotus Chat Desktop / prepare (push) Successful in 7s
Build Lotus Chat Desktop / build-windows (push) Failing after 1m31s
Build Lotus Chat Desktop / build-linux (push) Failing after 15m17s
Build Lotus Chat Desktop / update-manifest (push) Has been skipped
Adds set_badge_count Tauri command (Windows only). Uses CoCreateInstance
to get ITaskbarList3 and SetOverlayIcon to display a dynamically drawn
badge on the taskbar button. The badge is a 16x16 GDI bitmap: red circle,
white bold Segoe UI text, capped at "99+". Passing count=0 clears the
overlay. Uses windows = 0.61 (already a transitive dep via webview2-com).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-10 17:32:53 -04:00
jared f0100c0c0c feat: replace all desktop icons with custom Lotus Chat logo
Build Lotus Chat Desktop / prepare (push) Successful in 3s
Build Lotus Chat Desktop / build-windows (push) Failing after 3m9s
Build Lotus Chat Desktop / build-linux (push) Failing after 15m22s
Build Lotus Chat Desktop / update-manifest (push) Has been skipped
Updates all Tauri icon targets: 32x32, 128x128, 128x128@2x, icon.png,
icon.ico (multi-size), icon.icns (16/32/128/256/512), and all Windows
NSIS Square*Logo and StoreLogo sizes. Generated from lotus_chat.png
(1254x1254 source in the cinny repo).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-10 17:02:01 -04:00
jared ed718704ee fix(ci): add prepare job, auto-version, fix Windows build issues
- Add prepare job: computes version (4.12.{run_number}), creates/updates
  the Gitea release once — eliminates the race condition where build-windows
  and build-linux both tried to create the same release simultaneously.
- Auto-increment version: both build jobs patch tauri.conf.json with
  4.12.{run_number} before building, so every CI run produces a strictly
  increasing semver and the Tauri updater fires correctly.
- Fix double -- in Windows build command: was 'build -- --bundles nsis'
  which passed --bundles as cargo args (silently ignored), causing all
  bundle targets to build. Now 'build --bundles nsis' (single --).
- Add setup-node to Windows build: pins Node.js to .node-version like
  the Linux job already does.
- update-manifest: uses version/release_id from prepare outputs instead
  of re-fetching and parsing the release name.
- Fix window title: was "Cinny", now "Lotus Chat".

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-10 17:02:01 -04:00
jared 4b71e80636 fix(windows): call with_webview on built window, import COREWEBVIEW2_PERMISSION_KIND type
Build Lotus Chat Desktop / build-windows (push) Successful in 27m6s
Build Lotus Chat Desktop / build-linux (push) Successful in 20m21s
Build Lotus Chat Desktop / update-manifest (push) Failing after 3s
with_webview is on WebviewWindow (the built window), not WebviewWindowBuilder.
Also import COREWEBVIEW2_PERMISSION_KIND as a type for the out-param zero-init.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-10 10:05:49 -04:00
jared d043f9c416 fix(windows): fix PermissionKind out-param and add AppImage support
Build Lotus Chat Desktop / build-windows (push) Failing after 23m52s
Build Lotus Chat Desktop / build-linux (push) Has been cancelled
Build Lotus Chat Desktop / update-manifest (push) Has been cancelled
- Fix COREWEBVIEW2_PERMISSION_KIND out-param pattern in PermissionRequestedEventHandler
- Add "wry" feature to tauri dep so with_webview compiles on Windows
- Build both appimage and deb on Linux for auto-update compatibility
- Commit AppRun-x86_64 binary to avoid GitHub download timeout in CI

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-10 00:06:12 -04:00
jared eadd3bfc48 fix(windows): use webview2_com built-in handler instead of #[implement]
Build Lotus Chat Desktop / build-linux (push) Failing after 17m40s
Build Lotus Chat Desktop / build-windows (push) Failing after 22m16s
Build Lotus Chat Desktop / update-manifest (push) Has been skipped
The previous approach used windows::core::implement to manually implement
ICoreWebView2PermissionRequestedEventHandler_Impl, but the sealed
IUnknownImpl constraint in webview2-com prevents external #[implement]
usage — you must use the crate's own pre-built handler types.

Replace with PermissionRequestedEventHandler::create() which wraps the
closure and handles COM ref-counting internally. Also removes the now-
unused windows = "0.61" direct dependency.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-09 23:32:02 -04:00
jared 443c85c9b5 fix(windows): gate with_webview call to Windows only
Build Lotus Chat Desktop / build-linux (push) Failing after 13m50s
Build Lotus Chat Desktop / build-windows (push) Failing after 23m55s
Build Lotus Chat Desktop / update-manifest (push) Has been skipped
with_webview is not available on Linux; break the builder chain and apply
it conditionally so the Linux build compiles without the wry feature flag.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-09 21:52:09 -04:00
jared 838c69f46e fix(windows): grant microphone and camera permissions in WebView2
WebView2 silently denies getUserMedia() unless a PermissionRequested
handler explicitly allows it. macOS was already covered by Info.plist;
Windows had nothing. Adds a COM event handler via with_webview that
auto-approves mic and camera requests so Element Call voice/video
works in the desktop app.

Also includes previously uncommitted changes:
- tauri.conf.json: add media-src / mediastream: to CSP
- Info.plist: macOS NSMicrophoneUsageDescription / NSCameraUsageDescription

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-09 18:27:12 -04:00
jared 8f0f8db201 Rename to Lotus Chat, point updater at our release manifest
Build Lotus Chat Desktop / build-windows (push) Has been cancelled
Build Lotus Chat Desktop / build-linux (push) Has been cancelled
2026-06-07 13:13:32 -04:00
Krishan 36887eaf40 chore: Release v4.12.2 (#580)
Release v4.12.2
2026-05-23 23:18:03 +10:00
Krishan 2b61520524 fix: update CSP to allow reordering rooms inside space (#579)
* fix: update CSP to allow reordering rooms inside space

Fixes https://github.com/cinnyapp/cinny/issues/2949

* disable native dnd in windows configuration

* Disable drag and drop for main webview window in lib.rs

* Remove dragDropEnabled setting from tauri.conf.json

* Replace drag_drop_enabled with disable_drag_drop_handler
2026-05-23 21:52:14 +10:00
Krishan 8b7bced138 chore: Release v4.12.1 (#577)
chore: release v4.12.1
2026-05-15 19:16:31 +10:00
Shenwei Wang 08fcd330e1 fix: enable tauri plugin opener (#559)
* fix: enable tauri plugin opener

* fix: add remote urls to make build work on Windows

* fix: update Cargo.lock

We need tauri v2.8.0 since which supports `WebviewBuilder::on_new_window`

* fix: handle `window.open()` using `WebviewBuilder::on_new_window`

---------

Co-authored-by: Krishan <33421343+kfiven@users.noreply.github.com>
2026-04-13 17:20:44 +10:00
Shenwei Wang 89804c83ac fix: use devUrl when dev (#556) 2026-03-18 00:29:22 +11:00
Shenwei Wang a396a54f90 fix: modify CSP to allow connect-src blob (#549)
* Modify CSP to allow connect-src blob

Updated Content Security Policy to include 'blob' in connect-src.

Fixing #548

* chore(ci): Disable Updater for Fork PRs

* fix: disable createUpdaterArtifacts for fork PRs

* fix: always disable createUpdaterArtifacts

* fix: fix typos
2026-03-17 23:57:32 +11:00
Krishan d2b51ee0e6 chore(release): v4.11.2 [skip ci] (#543) 2026-03-12 01:10:36 +11:00
Krishan 8da44b2b88 chore(release): v4.11.1 [skip ci] (#541) 2026-03-12 00:35:57 +11:00
Krishan fcd638bc1c fix: duplicate window creation and CSP issues (#540) 2026-03-12 00:23:50 +11:00
Krishan d15e86a176 Update Tauri from v1 to v2 (#496)
* Upgrade tauri to v2

* update action and disable menu

* Add args to workflow step in test.yml

* Rename environment variables for Tauri signing

* Change mainBinaryName from 'Cinny' to 'cinny'

* Update linux file names to use 'Cinny' instead of 'cinny'

* Upgrade Tauri action to v0.6.1 and fix targets

Updated Tauri action version and corrected target specification.
2026-03-03 23:16:04 +11:00
Krishan 92b4f91c6b Release v4.10.5 (#524) 2026-02-23 23:16:03 +11:00
Krishan 7ae56af131 Release v4.10.4 (#523)
* Release v4.10.4

* bump cinny submod
2026-02-23 22:48:07 +11:00
Krishan fb6dc8ba9a Release v4.10.3 (#510) 2026-02-16 22:51:29 +11:00
Krishan b102ceba08 Release v4.10.2 (#481) 2025-11-05 18:22:29 +11:00
Krishan 22f7d58c9f Release v4.10.1 (#471) 2025-09-29 14:50:30 +10:00
Krishan fbc7071696 Release v4.10.0 (#466)
* Release v4.10.0

* bump cinny submodule
2025-08-31 21:24:20 +10:00
Krishan f127a1474b Release v4.9.1 (#463) 2025-08-17 21:28:42 +10:00
Krishan 8b293cfd51 Release v4.9.0 (#462)
* Release v4.9.0

* bump cinny sub module
2025-08-13 12:25:53 +10:00
Ajay Bura e34faf7f6c Release v4.8.1 (#454) 2025-06-11 00:00:17 +10:00
Ajay Bura b4a9779f9d Release v4.8.0 (#452)
* Release v4.8.0

* update cinny submodule
2025-05-24 21:28:06 +05:30
Ajay Bura 22489e880f Release v4.7.1 (#450)
* Release v4.7.1

* update cinny submodule
2025-05-21 17:46:13 +05:30
Ajay Bura 77952f5c58 Release v4.7.0 (#448) 2025-05-18 12:50:02 +05:30
Krishan 2329d2c55c Release v4.6.0 (#441)
* Release v4.6.0

* bump cinny submodule
2025-03-31 23:37:13 +11:00
Krishan fe40597eac Release v4.5.1 (#428)
* Release v4.5.1

* bump cinny submodule
2025-03-05 13:38:28 +11:00
Krishan de29f8a49e Release v4.5.0 (#425)
* Release v4.5.0

* bump cinny submodule
2025-03-04 17:53:14 +11:00
Krishan ab3ca3ead4 Release v4.4.0 (#420)
* Release v4.4.0

* bump cinny submodule
2025-02-23 23:39:58 +11:00
Krishan 90af6493d5 Release v4.3.2 (#419)
* Release v4.3.2

* bump cinny submodule
2025-02-17 12:10:11 +11:00
Krishan c25f7e5afb Release v4.3.1 (#416) 2025-02-11 22:02:44 +11:00
Krishan 39c12c541c Fix cargo lock (#417) 2025-02-11 21:59:02 +11:00
Krishan e8837ef50e Release v4.3.0 (#414)
* Release v4.3.0

* update cinny submodule
2025-02-11 17:11:31 +11:00