dab246
d256b5ca52
TF-4367 Update logic apply Reply/Forward prefix for subject when compose email
2026-03-11 13:33:28 +07:00
dab246
b7594a4adb
fix: The message field in UnknownRemoteException is typed as String? and the condition will always be false.
2026-03-10 11:06:16 +07:00
dab246
8a21e35d1e
fix: Prefer reusing AppBaseException instead of redefining the exception contract CacheException and RemoteException
2026-03-10 11:06:16 +07:00
dab246
2e8a11e7eb
refactor(sentry): standardize exceptions to prevent Sentry minification
2026-03-10 11:06:16 +07:00
Dat Dang
1b29b481c0
HOTFIX Integration test 0.24.8 ( #4298 )
2026-02-03 12:12:44 +07:00
Dat Dang
de8de6c83f
HOTFIX Create identity memory leak ( #4295 )
2026-02-02 19:46:11 +07:00
dab246
f9ff9ecde7
TF-4229 Add isSelected && condition to non-RTL selectedIconWidget rendering to match RTL behavior.
2026-01-22 10:54:04 +07:00
dab246
2052fdbe5e
TF-4227 Add integration test on mobile for case display_view_with_all_email_with_tag_scenario
2026-01-19 11:34:43 +07:00
dab246
e8b2c1d2a5
TF-4195 Fix comments of coderabbit
2026-01-19 11:34:43 +07:00
dab246
0076a7af57
TF-4195 Implement add a Label to an email on mobile
2026-01-19 11:34:43 +07:00
dab246
03b3d1181f
TF-4195 Add Label as to email context menu
2026-01-19 11:34:43 +07:00
dab246
1514136f39
TF-4136 Replace logError to logWarning for some place
2026-01-15 09:46:51 +07:00
dab246
fedb8fed93
TF-4136 Apply early exit to prevent string operation in log
2026-01-15 09:46:51 +07:00
dab246
df5ed118b3
TF-4141 should not show inkwell effect when user drag email into virtual folder
2026-01-11 22:55:49 +07:00
dab246
a23d15a9ca
TF-4136 refactor(logging): replace logError with logWarning for non-critical cases
2026-01-06 13:53:22 +07:00
Dang Dat
a31898185e
[Memory leak] Handle dispose in MobileEditorWidget
2025-12-29 10:11:56 +07:00
dab246
20b93cd8db
hotfix(ai-scribe): Fix text selection handler correctly gated by AI Scribe availability.
2025-12-29 05:13:18 +07:00
dab246
f45f55751f
hotfix(ai-scribe): Only implement OnTextSelectionChanged when isAIScribeAvailable is true
2025-12-29 05:13:18 +07:00
dab246
29b54a76ee
hotfix(ai-scribe): fix Safari keyboard input issue in AI Scribe search bar dialog
2025-12-23 17:27:26 +07:00
dab246
6e09d853fd
feat(ai-scribe): Fix the English locale file `(intl_en.arb)` is missing all three AI Scribe keys
...
feat(ai-scribe): Fix async function declared without proper return type annotation.
feat(ai-scribe): Fix Async operations not properly awaited.
feat(ai-scribe): Fix inconsistent capitalization between button labels.
feat(ai-scribe): Fix GenerateAITextFailure check will never match.
feat(ai-scribe): Fix consider validating text input for predefined actions.
feat(ai-scribe): Using a subshell for directory isolation.
feat(ai-scribe): Fix verify the mock usage or document intent.
feat(ai-scribe): Using a more conventional import for Offset.
feat(ai-scribe): Adding error handling for consistency
feat(ai-scribe): Remove `fromJson` and `toJson` of AIResponse
feat(ai-scribe): Using constants for role values.
feat(ai-scribe): Using a more specific import.
feat(ai-scribe): Using Timer for cleaner lifecycle management
feat(ai-scribe): Adding error handling to fromMap() for consistency.
feat(ai-scribe): Disposing the ValueNotifier
feat(ai-scribe): Redundant null check after assignment
feat(ai-scribe): Fix calling `registerSelectionChangeListener` multiple times may be inefficient.
feat(ai-scribe): Safer type handling for JavaScript callback args
feat(ai-scribe): Fix async callbacks not awaited in switch statement.
feat(ai-scribe): Fix binding lifecycle mismatch for GetAIScribeConfigInteractor
feat(ai-scribe): Fix ai prompts
feat(ai-scribe): Fix unawaited async call to `_setupSelectionListener`
feat(ai-scribe): Fix switch cases use top-origin coordinates while `PositionedDirectional(bottom:)`` expects bottom-origin coordinates.
feat(ai-scribe): Adding error handling for selection listener setup.
2025-12-19 19:03:39 +07:00
dab246
6e56a50713
feat(ai-scribe): Load AI scribe config in dashboard
2025-12-19 19:03:39 +07:00
HuyNguyen
428d95c999
Enable AI Scribe modal based on configuration and availability
2025-12-19 19:03:39 +07:00
Dat H. Pham
25ea472688
Display AI toggle in Composer
2025-12-19 19:03:39 +07:00
dab246
a686b5d334
feat(ai-scribe): Adding error handling for async operations
2025-12-19 19:03:39 +07:00
Théo Poizat
c78f6b8a76
Improve text replace in Scribe
...
- Delete selection content before inserting
- Insert correct HTML
2025-12-19 19:03:39 +07:00
Théo Poizat
1a79445711
Add a method to delete selection content
2025-12-19 19:03:39 +07:00
dab246
57bfb4f88f
feat(ai-scribe): Fix when using multiple composer, get multiple overlay icons
2025-12-19 19:03:39 +07:00
dab246
27393d4cc8
feat(ai-scribe): Add method to collapse selection and insert/replace callback
2025-12-19 19:03:39 +07:00
Théo Poizat
8ed8100e7e
Add JS method to collapse selection in both composer
...
Collapsing a selection means removing it and keep the cursor at the
end. It will be needed by the scribe for "Insert" action where we
want to insert a text at the cursor even if the user selected text.
2025-12-19 19:03:39 +07:00
dab246
860393fc90
feat(ai-scribe): Improve data & domain layer for ai scribe
2025-12-19 19:03:39 +07:00
dab246
1a1b8f489f
feat(ai-scribe): Improve UI for AI Scribe suggestion modal
2025-12-19 19:03:39 +07:00
dab246
582b1ebe97
feat(ai-scribe): reorganize abstractions and update dialog modal UI
2025-12-19 19:03:39 +07:00
Théo Poizat
755e24895d
Disable AI Scribe if on mobile
2025-12-19 19:03:39 +07:00
Théo Poizat
0075fd64b6
feat: Remove .env file for AI Scribe
...
It was used at the beginning for configuration purpose but now we
have the JMAP capability, no need anymore.
2025-12-19 19:03:39 +07:00
Théo Poizat
2325df616f
Create an isAIScribeAvailable method
...
Check JMAP capability AND if AI is enabled in env.file and use this method everywhere where we checked env.file
2025-12-19 19:03:39 +07:00
Théo Poizat
77a56ae9b7
Export AI Scribe code from controller to a mixin
...
Avoid adding too much code in the controller
2025-12-19 19:03:39 +07:00
Théo Poizat
4d0880b8be
fixup! Extract method to convert html content to text content
...
Move the method in utils
2025-12-19 19:03:39 +07:00
Théo Poizat
d369fcbf5f
Simplify observed values about text selection in composer
...
hasTextSelection had no interest.
The other two values have been put inside an object to observe only one object.
2025-12-19 19:03:39 +07:00
Théo Poizat
2228596c1c
Mutualize event listener in web editor widget
...
Instead of listening multiple times for message from editor JS side,
let's add only one listener and route inside the callback.
2025-12-19 19:03:39 +07:00
Théo Poizat
75f5817e1c
fixup! Implement text selection mixin in mobile and web editor
...
Add try/catch to JSON parse
2025-12-19 19:03:39 +07:00
Théo Poizat
2f3bbe3bbb
Do not display AI scribe if AI is not enabled in env.file
2025-12-19 19:03:39 +07:00
Théo Poizat
bb23792fe3
Use bindings to better separate scribe presentation and data layer
2025-12-19 19:03:39 +07:00
Théo Poizat
6dc58e2eb6
Extract method to convert html content to text content
...
Editor exposes html content (so with html tags) and we do not want to send them to AI backend
2025-12-19 19:03:39 +07:00
Théo Poizat
7d7ccaf874
Open AI Scribe from text selection
2025-12-19 19:03:39 +07:00
Théo Poizat
96c95866c6
Open AI Scribe from bottom bar button
2025-12-19 19:03:39 +07:00
Théo Poizat
23065aa76d
Forward text selection callback from editor view to editor
2025-12-19 19:03:39 +07:00
Théo Poizat
57124f70a8
Implement text selection mixin in mobile and web editor
2025-12-19 19:03:39 +07:00
Théo Poizat
8b17fcdc54
fixup! Add text selection mixin
2025-12-19 19:03:39 +07:00
Théo Poizat
4013973110
Add text selection mixin
...
This mixin leverages HTML callbacks that can be set by WebView editor
to send text selection event to the composer so the composer will
receive text selection event necessary to display buttons related to
text selection.
2025-12-19 19:03:39 +07:00
dab246
860154acc1
TF-4176 Change minimize behavior in mail composer
2025-12-10 09:41:11 +07:00