Search inside messages, across every conversation #43

Merged
paulhitt merged 1 commits from feat/search-across-conversations into main 2026-09-02 20:03:44 +00:00
paulhitt commented 2026-09-02 11:45:55 +00:00 (Migrated from gitlab.com)

There is no index, and that is a decision rather than an omission. An
index derived from decrypted history is plaintext by another name: it
would have to be sealed as carefully as the vault, taken by
forgetEverything, and kept consistent with the threads — a second copy
of everything anybody ever wrote, with its own ways to go wrong. This
reads what already exists and throws the plaintext away.

It costs more here than on iOS, and the code says so. The iPhone app
keeps the whole decrypted history in memory; Android decrypts each
thread on demand. Hence a two-character minimum, a bound, a 250ms
debounce, and Dispatchers.IO.

Folding is length-preserving on purpose: the snippet slices the
ORIGINAL string at an index found in the folded one, so a fold that
dropped characters would cut in the wrong place — and for an accented
character, mid-character. There is a test with accents before the match.

Accent-insensitive because somebody typing "cafe" means "café", and a
search that knows the difference quietly fails in every language with
accents — Spanish is next on the localisation list.

Refs paulhitt/flamenet-messenger-ios#25

Co-Authored-By: Claude Opus 4.8 noreply@anthropic.com

There is no index, and that is a decision rather than an omission. An index derived from decrypted history is plaintext by another name: it would have to be sealed as carefully as the vault, taken by forgetEverything, and kept consistent with the threads — a second copy of everything anybody ever wrote, with its own ways to go wrong. This reads what already exists and throws the plaintext away. It costs more here than on iOS, and the code says so. The iPhone app keeps the whole decrypted history in memory; Android decrypts each thread on demand. Hence a two-character minimum, a bound, a 250ms debounce, and Dispatchers.IO. Folding is length-preserving on purpose: the snippet slices the ORIGINAL string at an index found in the folded one, so a fold that dropped characters would cut in the wrong place — and for an accented character, mid-character. There is a test with accents before the match. Accent-insensitive because somebody typing "cafe" means "café", and a search that knows the difference quietly fails in every language with accents — Spanish is next on the localisation list. Refs paulhitt/flamenet-messenger-ios#25 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
paulhitt commented 2026-09-02 11:45:56 +00:00 (Migrated from gitlab.com)

assigned to @paulhitt

assigned to @paulhitt
paulhitt commented 2026-09-02 20:03:33 +00:00 (Migrated from gitlab.com)

added 25 commits

  • fa9fdf43...5a0a061a - 24 commits from branch main
  • 42b7d173 - Search inside messages, across every conversation

Compare with previous version

added 25 commits <ul><li>fa9fdf43...5a0a061a - 24 commits from branch <code>main</code></li><li>42b7d173 - Search inside messages, across every conversation</li></ul> [Compare with previous version](/paulhitt/flamenet-messenger-android/-/merge_requests/16/diffs?diff_id=2000763367&start_sha=fa9fdf43f37c518e1215471680fa9902e678ef0b)
paulhitt (Migrated from gitlab.com) merged commit 400c910615 into main 2026-09-02 20:03:44 +00:00
paulhitt commented 2026-09-02 20:03:45 +00:00 (Migrated from gitlab.com)

mentioned in commit 400c910615

mentioned in commit 400c910615572ded640aed25b8b953c848fbb202
paulhitt commented 2026-09-09 19:01:53 +00:00 (Migrated from gitlab.com)

changed the description

changed the description
Sign in to join this conversation.