Commit Graph
88 Commits
Author SHA1 Message Date
PepiandGitHub 594f58aa78 Leave group from chatlist for non-last admins (#638)
* feat: add self demote to bridge

* feat: add leave warnings translations

* feat: add admin demote logic to leave hook

* feat: handle admin leave from chat list

* docs: update changelog
2026-05-15 11:38:51 -04:00
08d5c44a9b Add Chinese localizations (#647)
* Add Chinese localizations

* Fix Chinese locale selection

* Revert "Fix Chinese locale selection"

This reverts commit fa59dc2df05e90551334622d72b600ccc8f6816e.

* Use zh fallback for Simplified Chinese

* Fix script-specific locale equality

* fix: persist Chinese locale settings

Bump whitenoise-rs to the current ref with Chinese language variants and map zh/zh_Hant through the Rust language bridge.

Co-authored-by: stupidloud <klever1988@protonmail.com>

* fix: preserve system locale scripts

Preserve supported system locale script codes when resolving language settings and rendering the system language label.

---------

Co-authored-by: Jeff Gardner <202880+erskingardner@users.noreply.github.com>
2026-05-13 10:14:57 -04:00
Danny MandGitHub 7f69b3e11e Adopt whitenoise-rs arch-refactor: per-account sessions replace the god object (#649) 2026-05-13 11:05:48 +02:00
Danny MandGitHub 8135cbe1e4 fix: load chat summary via point query so archived chats render correctly (#653) 2026-05-12 12:24:25 +02:00
Javier G. Montoya S.andGitHub 9bfd3e5898 feat(rust/api/group_state): expose subscribe_to_group_state stream to dart (#644) 2026-05-11 12:12:26 -04:00
JeffGandGitHub e480f49e9e fix(android): external signer notification recovery (#635)
* Reconcile external signer callbacks on auth lifecycle

* Fix headless external signer notification recovery

* Point whitenoise-rs dependency at merged recovery fix

* Address external signer notification review feedback

* Address notification review follow-ups

* Cover external signer registry fallback paths

* Use developer log in foreground task
2026-05-11 17:21:50 +02:00
Jeff Gardner f77d85db44 chore: prepare v2026.5.7+24 release 2026-05-07 13:46:17 +02:00
bed6630303 Filter blocked users across Flutter messaging surfaces (#623)
* Filter blocked users and fix widgetbook analysis

* Filter blocked users across messaging surfaces

* Guard blocked-user loading windows

* Remove chat list subscription from chat screen and use chat summary  (#633)

* chore: update rust crate

* refactor: move chat summary type to its own rust bridge file

* feat: add get chat summary to rust bridge

* refactor: add use chat summary hook

* feat: add util for shared logig on chat summary dispplay across screens

* refactor: remove chat list suscription from chat screen and replace use chat profile with chat summary

* refactor: use chat summary instead of chat profile in chat info screen

* refactor: use chat summary instead of chat profile in chat invite screen

* refactor: remove use chat profile hook

* Address blocked chat review feedback

* Preserve unread count for blocked chat updates

---------

Co-authored-by: Pepi <mariajosefinaalliende@gmail.com>
2026-05-07 11:07:31 +02:00
JeffGandGitHub 931cec376a [codex] Bump whitenoise-rs master and refresh Android assets (#617)
* Bump whitenoise-rs master and refresh Android assets

* Update version to 2026.5.4

* Use shared group chat flag in chat screen
2026-05-05 17:46:22 +02:00
PepiandGitHub de9ea70804 chore: update rust crate (#608) 2026-04-29 16:24:08 -04:00
PepiandGitHub 2300885c67 Use group capabilities in leave group hook (#600)
* feat: add feature flags provider for leave group

* feat: update leave group locales

* feat: add self remove to chat list chat summary

* feat: adjust use leave group hook to show it only when allowed

* chore: update podfile.lock
2026-04-29 10:08:16 -04:00
Javier G. Montoya S.andGitHub a1312dd9f8 feat(rust): add group_required_proposals method (#590) 2026-04-24 15:38:49 -04:00
PepiandGitHub ca85425958 Replace delete all key packages with delete legacy key packages (#585)
* refactor: rename debug info pill to wn pill

* feat: update rust crate and replace delete all kp with delete legacy kp

* docs: update changelog
2026-04-22 10:28:19 -04:00
PepiandGitHub f67b27dc83 Leave group hook (#571)
* feat: add leave group translations

* feat: add leave group to bridge

* feat: add hook to leave group
2026-04-16 15:13:57 -04:00
Javier G. Montoya S.andGitHub 1abe545f69 feat(rust): add clear_chat, delete_chat and leave_and_delete_group methods (#572) 2026-04-15 13:19:11 -04:00
Mubarak AuwalandGitHub 2cd588272d feat: add block/unblock user Flutter bridge (#554)
* feat: add UserBlockChanged to ChatListUpdateTrigger bridge

* feat: add block/unblock user bridge functions

* chore: regenerate flutter_rust_bridge bindings for mute_list API

* test: enforce exact order in userBlockChanged chat list assertions

* chore: bump whitenoise-rs rev and regenerate bridge bindings

* chore: format generated dart bridge files

* chore: rustfmt generated bridge file

* chore: rebase with master and regenerate bridge bindings

* fix: remove duplicate test function in chat_list
2026-04-14 11:32:43 +01:00
PepiandGitHub 594d817bc6 Refactor default relays urls (#564)
* refactor: move default relays to its own file to avoid repetition

* test: add mock for default relays
2026-04-13 18:58:33 -04:00
JeffGandGitHub 733bc72742 Update whitenoise-rs master ref (#566) 2026-04-13 22:51:56 +02:00
emir yorulmazandGitHub d450a042bb UI Polish: Network & Appearance Screens (#545) 2026-04-11 15:07:41 +03:00
Danny MandGitHub 9e5881bc28 Search 2.0: cross-group message content search in chat list (#557) 2026-04-10 16:50:23 +02:00
Danny MandGitHub 9b0c7b8d3a Remove direct mdk-core dependency in favor of whitenoise re-exports (#559) 2026-04-09 15:06:13 +02:00
Danny MandGitHub a23c1d13b1 Fixes #356: search message content via Rust backend (#494) 2026-04-07 21:39:03 +02:00
fa9112c90b feat: add thumbhash support with blurhash fallback (#549)
* feat: add thumbhash support with blurhash fallback

Bump whitenoise-rs to 0d8024be and mdk-core to fbd3a1be to pick up
thumbhash generation alongside blurhash. Surface the new thumbhash
field through the Flutter Rust bridge, add the thumbhash Dart package,
and replace WnBlurhashPlaceholder with WnMediaPlaceholder that prefers
thumbhash, falls back to blurhash, then a neutral color.

Also wire the new LeftGroup ChatListUpdateTrigger variant from upstream.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* style: fix dart formatting in wn_media_error_placeholder

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* chore: add CLAUDE.md symlink pointing to AGENTS.md

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* test: add thumbhash and leftGroup test coverage

- WnMediaPlaceholder: thumbhash rendering, preference over blurhash,
  invalid thumbhash fallback (already covered)
- WnMediaErrorPlaceholder: thumbhash display, preference over blurhash
- ChatMediaThumbnail: thumbhash placeholder while loading, preference
- ChatMessageMedia: thumbhash placeholder, preference, error state
- MediaImage: thumbhash placeholder, preference, error state,
  removal after fade
- useChatList: leftGroup trigger removes chat, no-op for unknown chat

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix: leftGroup trigger keeps chat in list; guard empty hash tags

- leftGroup now updates the chat item in the map (like removedFromGroup)
  instead of removing it, so ChatScreen's isRemovedFromGroup check can
  detect the removal and show the notice/disable input
- Guard thumbhash and blurhash imeta tag emission against empty/whitespace
  strings

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix: use trimmed hash values in imeta tag emission

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-04 09:30:13 +02:00
JeffGandGitHub f1174d9d2f feat: update whitenoise-rs and add MIP-05 push registration bridge (#548) 2026-04-03 03:08:08 -03:00
Danny MandGitHub 4f4eeb6c86 feat: cursor-based pagination for chat messages (closes #122) (#493) 2026-04-02 17:28:55 +02:00
Mubarak AuwalandGitHub f654badd5f feat: expose mute/unmute chat through Flutter bridge (#541)
* feat: expose mute/unmute chat through Flutter bridge

Bridge whitenoise-rs mute_chat, unmute_chat, and mute_forever_timestamp
to Dart via flutter_rust_bridge. Add muted_until to ChatSummary and
ChatMuteChanged trigger for real-time UI updates.

Also fixes pre-existing subscribe_to_group_messages API mismatch
(new limit parameter added upstream).

* test: cover chatMuteChanged trigger in use_chat_list

* make ccoderabbit happy

* feat: expose ChatMuteDuration enum through Flutter bridge

* chore: regenerate freezed code for ChatMuteDuration

* remove MUTE_FOREVER reference from doc comment
2026-03-30 22:14:38 +01:00
PepiandGitHub 3b768d2365 Archive chats (#532)
* feat: add archive translations

* feat: add archive rust bridge methods

* feat: extend use chat list hook to work with archived stream

* feat: add archive/unarchive actions to chat list tile menu

* feat: show archived chats view in chat list screen

* feat: add hook to archive/unarchive by receiving account and group id

* feat: add archive/unarchive option in chat info screens

* docs: udpate changelog

* test: improve coverage
2026-03-27 12:46:09 -03:00
PepiandGitHub ff9dc8e206 Notifications settings screen (#535)
* feat: add disabled style to checkbox when not enabled

* feat: add notifications translations

* feat: add notification settings methods in rust bridge

* feat: add hook to enable and disabel notifications

* feat: add notification settings screen

* feat: show notification option in settings screen for android

* docs: update changelog
2026-03-27 11:25:17 -03:00
Mubarak AuwalandGitHub f1e94ecb23 feat: expose removed_at and RemovedFromGroup trigger in Rust bridge (#536)
Bumps whitenoise-rs to b5c9e8b and regenerates flutter_rust_bridge bindings.

- Add removed_at: Option<DateTime<Utc>> to ChatSummary so the Flutter
  layer can tell when a group membership was revoked by an admin
- Add RemovedFromGroup variant to ChatListUpdateTrigger so real-time
  removal events can be handled distinctly from archive/unarchive
- Regenerate frb_generated.rs, frb_generated.dart, and
  api/chat_list.dart from the updated bridge definition
2026-03-25 18:03:59 +01:00
JeffGandGitHub 4a1674d7ae chore: prepare 2026.3.23+22 release (#529) 2026-03-23 12:36:57 +01:00
Danny MandGitHub ad7062609b feat: prompt users when a newer Zapstore release is available (#506) 2026-03-20 22:45:48 +01:00
PepiandGitHub b030b1c235 chore: update rust crate (#526) 2026-03-20 18:39:28 -03:00
PepiandGitHub 49d04b5489 chore: upgrade rust crate (#525) 2026-03-20 16:15:16 -03:00
JeffGandGitHub 8714625f13 Stream user metadata updates (#522)
* feat: stream user metadata updates

* fix: address review feedback
2026-03-20 17:36:38 +01:00
PepiandGitHub 4c4971a023 chore: update rust crate (#511) 2026-03-17 13:00:58 -03:00
PepiandGitHub a48f45b66b chore: update rust crate (#509) 2026-03-17 11:43:28 -03:00
PepiandGitHub 9d34297b4c chore: update rust crate (#507) 2026-03-14 19:13:18 -03:00
Danny MandGitHub 2bfec517fb feat: add bug report screen with NIP-44 encrypted anonymous reports (#478) 2026-03-14 21:23:21 +01:00
PepiandGitHub 03696d57e9 Debug and relay screens improvements (#502)
* feat: remove app flavor condition for debug view

* chore: remove APP_FLAVOR unused variable

* fix: add and fix some translations

* fix: loading issues on key packages actions

* refactor: move logs provider into a hook

* refactor: use base mock, remove unused relay status logic

* feat: add copy all logs to app logs screen

* docs: update changelog
2026-03-12 10:19:59 -03:00
JeffGandGitHub 2dd6a1ca19 The great relay restoration (#495)
* Update relay tooling and developer settings

* Update whtienoise-rs version

* Fix reviewed relay diagnostics and locale issues
2026-03-11 00:13:08 -03:00
Danny MandGitHub bd71385051 [Fixes #445] feat: implement NIP-C7 reply threading in chat messages (#468) 2026-03-10 15:39:01 +01:00
Danny MandGitHub d2400d78a1 Fix #327: eliminate N+1 query in useGroups via visible_groups_with_info (#481) 2026-03-09 19:32:22 +01:00
JeffGandGitHub ffe3e87d16 chore: bump whitenoise-rs to 0.2.1 and prep 2026.3.5 release (#450)
* chore: bump whitenoise-rs to 0.2.1 for 2026.3.5 release

* chore: sync widgetbook lockfile with app version

* fix: export iOS deployment target for Rust iOS build

* chore: align changelog release key with app version

* chore: drop build suffix from changelog release key
2026-03-05 19:38:34 +01:00
JeffGandGitHub 0793026b52 chore: bump whitenoise-rs to 0.2.0 and align mdk rev (#444) 2026-03-05 16:04:28 +01:00
PepiandGitHub 6621617355 Fix messages bubbles and handle manual retry (#442)
* fix: blurhash size in message bubble media

* fix: show sender data in chat invite screen bubbles

* feat: add retry method to message service

* refactor: make chat status names match rust

* fix: padding and status positioning in message bubbles and add retry on tap

* feat: retry sending messages from chat screen

* docs: update changelog

* chore: updgrade whitenoise-rs and mdk-core
2026-03-05 11:09:22 -03:00
Mubarak AuwalandGitHub 296e2cc40e feat: wire delivery status from Rust bridge to Flutter UI (#425)
* feat: wire delivery status from Rust bridge to Flutter UI

* chore: regenerate flutter_rust_bridge codegen

* Fix cargo fmt lint and handle messageRetried edge case

Fix import ordering in frb_generated.rs and line break in messages.rs
to pass cargo fmt check. Handle messageRetried when message ID is not
yet in the display list by appending it instead of silently ignoring.

* Run dart format on generated bridge files

* Update whitenoise-rs rev to aa56ba6 to fix mdk version conflict

* Add tests for deliveryStatusChanged and messageRetried handlers

* Add tests for DeliveryStatus mapping in ChatMessageBubble

* Sync with Rust retry redesign: add Retried status, remove messageRetried

Update whitenoise-rs rev to 74a3071 and re-run codegen to sync with
the retry-as-new-message design. DeliveryStatus now includes Retried,
UpdateTrigger no longer has MessageRetried.

- Update whitenoise-rs rev to 74a3071
- Add DeliveryStatus.retried variant and From impl in bridge
- Remove MessageRetried from UpdateTrigger enum and From impl
- Remove messageRetried handler from useChatMessages hook
- Add Retried case to DeliveryStatus mapping in ChatMessageBubble
- Remove messageRetried tests, add retried conversion test

* cargo fmt on generated code, add Retried delivery status test

* Run dart format on generated bridge files
2026-03-05 00:05:04 +01:00
Danny MandGitHub 526288b69b fix: remove redundant tracing init that races with whitenoise-rs (#430)
The app wrapper's initialize_tracing() set a global tracing subscriber
before whitenoise-rs's init_tracing() (called inside initialize_whitenoise),
which then panicked via .init() -> .expect() because the global slot was
already taken. Remove the wrapper's subscriber setup entirely since
whitenoise-rs already handles file + stdout tracing with daily rotation
and OnceLock-based idempotency.

Closes #426
2026-03-02 18:55:19 -03:00
Danny MandGitHub 0c62723df9 fix tests that I broke in the debug PR (#420) 2026-03-02 12:14:44 -03:00
Danny MandGitHub 07c391b8f0 Debug view + Logs View (#417) 2026-03-01 19:27:21 -03:00
Javier G. Montoya S.andGitHub a68bf9ff7a chore(): bump whitenoise crate version (#390) 2026-02-25 02:00:21 -03:00