feat(compose): sort address autocomplete by most recently used
Add ORDER BY receivedAt DESC to the searchAddresses query so the first unique occurrence of each address comes from the newest email. Contacts from recent conversations float to the top of the suggestions list. Add a unit test verifying the sort order. Fixes #83 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Sonnet 4.6
parent
05abc121df
commit
99c3a1d808
@@ -2614,6 +2614,7 @@ class EmailRepositoryImpl implements EmailRepository {
|
||||
t.ccJson.like(pattern));
|
||||
return cond;
|
||||
})
|
||||
..orderBy([(t) => OrderingTerm.desc(t.receivedAt)])
|
||||
..limit(100))
|
||||
.get();
|
||||
|
||||
|
||||
@@ -421,6 +421,48 @@ void main() {
|
||||
expect(results3, isEmpty);
|
||||
});
|
||||
|
||||
test('searchAddresses returns results sorted by most recently used',
|
||||
() async {
|
||||
final r = _makeRepos();
|
||||
await r.accounts.addAccount(_account, 'pw');
|
||||
|
||||
final older = DateTime(2024);
|
||||
final newer = DateTime(2024, 6);
|
||||
|
||||
// Two emails — older one has alice@, newer one has bob@.
|
||||
await r.db.into(r.db.emails).insert(
|
||||
EmailsCompanion.insert(
|
||||
id: 'acc-1:old',
|
||||
accountId: 'acc-1',
|
||||
mailboxPath: 'INBOX',
|
||||
uid: 1,
|
||||
receivedAt: older,
|
||||
toAddresses: const Value(
|
||||
'[{"name":"Alice","email":"alice@example.com"}]',
|
||||
),
|
||||
),
|
||||
);
|
||||
await r.db.into(r.db.emails).insert(
|
||||
EmailsCompanion.insert(
|
||||
id: 'acc-1:new',
|
||||
accountId: 'acc-1',
|
||||
mailboxPath: 'Sent',
|
||||
uid: 2,
|
||||
receivedAt: newer,
|
||||
toAddresses: const Value(
|
||||
'[{"name":"Bob","email":"bob@example.com"}]',
|
||||
),
|
||||
),
|
||||
);
|
||||
|
||||
// Query matching both; newer (bob) should come first.
|
||||
final results = await r.emails.searchAddresses(null, 'example');
|
||||
expect(
|
||||
results.map((a) => a.email).toList(),
|
||||
['bob@example.com', 'alice@example.com'],
|
||||
);
|
||||
});
|
||||
|
||||
// ── IMAP method tests ────────────────────────────────────────────────────
|
||||
|
||||
test(
|
||||
|
||||
Reference in New Issue
Block a user