v0.2.25
RustBox CI / rustbox (push) Canceled after 0s

This commit is contained in:
Mateusz Gruszczyński committed 2026-11-04 23:59:38 +01:00
1 parent de4d70970c
commit 648556f762
13 files changed
+147 -59

No files matched your search

+16 -10
View File
@@ -1,7 +1,21 @@
# RustBox 0.2.24 - implementation status
# RustBox 0.2.25 - implementation status
- Draft saves are realtime-silent: Drafts folder/list updates continue, but saving a draft does not surface as a new-mail notification.
This file tracks the `0.2.24` source snapshot. Storage/search scope and outstanding acceptance work are tracked in `TODO.md`. A feature is only listed as implemented when working code exists in this source tree; partial items are called out explicitly.
This file tracks the `0.2.25` source snapshot. Storage/search scope and outstanding acceptance work are tracked in `TODO.md`. A feature is only listed as implemented when working code exists in this source tree; partial items are called out explicitly.
## 0.2.25 filters
- **Apply now** (`POST /api/filters/match`, `src/routes/filters.rs`): the client sends the rule as a JSON tree (`{op: allof|anyof, args}`, `{not}`, `{test: {kind, match, value, header}}`, max depth 12 / 64 tests). The server translates it into two IMAP `UID SEARCH` criteria — an upper bound (superset) and a lower bound (certainly matching) — and runs them via the new `ImapClient::search_uids`. Header/subject `:contains` tests and sizes are exact; address tests (IMAP `FROM` also matches display names), `:is` / `:matches`, non-ASCII values and has-attachment are narrowed from the `messages` cache with three-valued evaluation; messages that still cannot be decided are counted as `uncertain` and not touched. At most 20 000 UIDs are returned.
- The client (`91-sieve-apply.js`) applies, per message: flags (`\Seen`, IMAP keywords), labels (bulk tag endpoint), copies, then one move/Trash — via the existing message endpoints, 4 requests at a time with progress. Redirect, discard and set-flags are not applied to existing messages and are listed as skipped in the confirmation.
- Entry points: *Check matches / Apply now* in the rule editor (re-check required after the rule changes), *Apply now* per rule in the rule list (rules using syntax the editor cannot rewrite are refused), the quick filter dialog option, and *Always move messages from this sender…* in the message context menu.
- Editor additions: exceptions (`allof (<conditions>, not anyof (<exceptions>))`, parsed back), conditions `to-only`, `cc-only`, `size-over` / `size-under`, `has-attachment` (requires `mime`), `priority-high` (`X-Priority` 1/2 or `Importance: high`), actions `label` (`addflag "RustBox-<tag id>"`) and `trash`, templates, missing-folder creation on save. No schema change.
- Not done: drag-and-drop reordering of rules (the ↑/↓ buttons remain).
## 0.2.25 interface fixes
- Message context menu: grouped into submenus (Forward, Labels, Snooze, Filters, Sender, More); menus are capped at the window height and scroll; scrolling inside a menu does not close it; submenus open on hover, click or →, close with ← / Esc.
- Predefined-style editing: enabling it copies the style's layout profile into the user's display preferences and the layout then follows those values while the style's palette, tokens and gradients stay active. A colour change asks to create a RustBox custom copy built from the computed palette on screen plus the current layout, and pins `theme` to the resolved light/dark mode. Changing `interface_skin` clears `preset_scale_unlocked`; changing `skin_depth` while editing re-seeds the layout.
- `data-contrast="soft"` no longer defines `--line` from itself (a CSS custom-property cycle that left it empty).
## 0.2.24 style gradients and retro styles
@@ -16,14 +30,6 @@ This file tracks the `0.2.24` source snapshot. Storage/search scope and outstand
- Calendar: optional second reminder per event (`reminder_extra_minutes`, V054; choices from "at start" to "1 week before"), default reminders for new events in Settings → Notifications (`calendar_settings.default_reminder_minutes` / `default_extra_reminder_minutes`), both exported as VALARMs. All-day events are reminded relative to the working-day start (default 09:00). `UpdateEvent` now distinguishes an absent reminder from `null`, so clearing a reminder works.
- The interface-style selector is grouped with `<optgroup>`s (labels translated through the scoped `_text` map) and uses short names; `INTERFACE_SKINS` follows the same order.
## 0.2.24 filters
- **Apply now** (`POST /api/filters/match`, `src/routes/filters.rs`): the client sends the rule as a JSON tree (`{op: allof|anyof, args}`, `{not}`, `{test: {kind, match, value, header}}`, max depth 12 / 64 tests). The server translates it into two IMAP `UID SEARCH` criteria — an upper bound (superset) and a lower bound (certainly matching) — and runs them via the new `ImapClient::search_uids`. Header/subject `:contains` tests and sizes are exact; address tests (IMAP `FROM` also matches display names), `:is` / `:matches`, non-ASCII values and has-attachment are narrowed from the `messages` cache with three-valued evaluation; messages that still cannot be decided are counted as `uncertain` and not touched. At most 20 000 UIDs are returned.
- The client (`91-sieve-apply.js`) applies, per message: flags (`\Seen`, IMAP keywords), labels (bulk tag endpoint), copies, then one move/Trash — via the existing message endpoints, 4 requests at a time with progress. Redirect, discard and set-flags are not applied to existing messages and are listed as skipped in the confirmation.
- Entry points: *Check matches / Apply now* in the rule editor (re-check required after the rule changes), *Apply now* per rule in the rule list (rules using syntax the editor cannot rewrite are refused), the quick filter dialog option, and *Always move messages from this sender…* in the message context menu.
- Editor additions: exceptions (`allof (<conditions>, not anyof (<exceptions>))`, parsed back), conditions `to-only`, `cc-only`, `size-over` / `size-under`, `has-attachment` (requires `mime`), `priority-high` (`X-Priority` 1/2 or `Importance: high`), actions `label` (`addflag "RustBox-<tag id>"`) and `trash`, templates, missing-folder creation on save. No schema change.
- Not done: drag-and-drop reordering of rules (the ↑/↓ buttons remain).
## 0.2.23 interface styles
- Adds Appearance → **Style depth** (`display_preferences.skin_depth`, migration V053): `colors` applies only a predefined style's palette and leaves layout controls editable; `standard` (default) keeps the previous palette + fixed layout behavior; `immersive` additionally applies the style's structural tokens.