Added lint rule to analysis_options.yaml and ran dart fix --apply to convert 125 relative imports in 33 files to package:sharedinbox/... style. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2.2 KiB
Done
This file contains tasks which got implemented.
Tasks get moved from NEXT.md to DONE.md
Tasks
Enable always_use_package_imports lint rule
Added rule to analysis_options.yaml; dart fix --apply converted 125 relative
imports across 33 files to package:sharedinbox/... style automatically.
Replace silent catch (_) with logged errors
5 catch (_) blocks in JMAP push stream setup and 2 in UI screens now use
catch (e) with log(...) via the project's logger.dart wrapper.
The two intentionally silent catches (malformed SSE JSON, Sent folder already
exists) were left as-is since they already had explanatory comments.
Safety hardening before real account use
1. Fix non-PEEK body fetch (silently sets \Seen)
lib/data/repositories/email_repository_impl.dart ~line 163
Change '(BODY[])' → '(BODY.PEEK[])' so fetching the body does not set \Seen
as a side-effect of the IMAP FETCH command.
Same fix at ~line 1696 for attachment part fetches: BODY[partId] → BODY.PEEK[partId].
2. Move to Trash instead of EXPUNGE
lib/data/repositories/email_repository_impl.dart deleteEmail method
Before enqueuing a hard delete, query the local mailboxes cache for a 'trash'-role
folder for that account.
- If found AND the email is not already in Trash: call
moveEmailto that path. - If not found OR already in Trash: fall back to the existing EXPUNGE path.
This makes delete reversible — the user can recover from Trash.
3. Confirmation dialog for delete
Three call sites need a showDialog confirmation before deleting:
a) Delete button in detail view
lib/ui/screens/email_detail_screen.dart ~line 97
Show AlertDialog "Delete this email?" with Cancel / Delete buttons.
b) Batch delete in list view
lib/ui/screens/email_list_screen.dart _batchDelete ~line 268
Show AlertDialog "Delete N emails?" with Cancel / Delete buttons.
c) Swipe-to-delete in list view
lib/ui/screens/email_list_screen.dart Dismissible.onDismissed ~line 436
Use Dismissible.confirmDismiss callback (fires before the item is removed)
to show a confirmation for the right-swipe (delete) direction only.
Return false to cancel and keep the item in the list.