Skip to content

Commit 9ca9390

Browse files
committed
autocomplete: Exclude muted users from user-mention autocomplete
Fixes: #296
1 parent 8cce71c commit 9ca9390

File tree

2 files changed

+16
-3
lines changed

2 files changed

+16
-3
lines changed

lib/model/autocomplete.dart

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import 'compose.dart';
1212
import 'emoji.dart';
1313
import 'narrow.dart';
1414
import 'store.dart';
15+
import 'user.dart';
1516

1617
extension ComposeContentAutocomplete on ComposeContentController {
1718
AutocompleteIntent<ComposeAutocompleteQuery>? autocompleteIntent() {
@@ -449,6 +450,8 @@ class MentionAutocompleteView extends AutocompleteView<MentionAutocompleteQuery,
449450
required PerAccountStore store,
450451
required Narrow narrow,
451452
}) {
453+
// return store.allUsers.whereNot((user) => store.isUserMuted(user.userId)).toList()
454+
// ..sort(_comparator(store: store, narrow: narrow));
452455
return store.allUsers.toList()
453456
..sort(_comparator(store: store, narrow: narrow));
454457
}
@@ -649,7 +652,7 @@ class MentionAutocompleteView extends AutocompleteView<MentionAutocompleteQuery,
649652
}
650653

651654
MentionAutocompleteResult? _testUser(MentionAutocompleteQuery query, User user) {
652-
if (query.testUser(user, store.autocompleteViewManager.autocompleteDataCache)) {
655+
if (query.testUser(user, store.autocompleteViewManager.autocompleteDataCache, store)) {
653656
return UserMentionAutocompleteResult(userId: user.userId);
654657
}
655658
return null;
@@ -754,9 +757,10 @@ class MentionAutocompleteQuery extends ComposeAutocompleteQuery {
754757
|| wildcardOption.localizedCanonicalString(localizations).contains(_lowercase);
755758
}
756759

757-
bool testUser(User user, AutocompleteDataCache cache) {
760+
bool testUser(User user, AutocompleteDataCache cache, UserStore userStore) {
758761
// TODO(#236) test email too, not just name
759762
if (!user.isActive) return false;
763+
if (userStore.isUserMuted(user.userId)) return false;
760764

761765
return _testName(user, cache);
762766
}

test/model/autocomplete_test.dart

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -404,9 +404,12 @@ void main() {
404404
});
405405

406406
group('MentionAutocompleteQuery.testUser', () {
407+
final store = eg.store(initialSnapshot: eg.initialSnapshot(
408+
mutedUsers: [MutedUserItem(id: 1)]));
409+
407410
void doCheck(String rawQuery, User user, bool expected) {
408411
final result = MentionAutocompleteQuery(rawQuery)
409-
.testUser(user, AutocompleteDataCache());
412+
.testUser(user, AutocompleteDataCache(), store);
410413
expected ? check(result).isTrue() : check(result).isFalse();
411414
}
412415

@@ -416,6 +419,12 @@ void main() {
416419
doCheck('Full Name', eg.user(fullName: 'Full Name', isActive: true), true);
417420
});
418421

422+
test('user is always excluded when muted, regardless of other criteria', () {
423+
doCheck('Full Name', eg.user(userId: 1, fullName: 'Full Name'), false);
424+
// When not muted, then other criteria will be checked
425+
doCheck('Full Name', eg.user(userId: 2, fullName: 'Full Name'), true);
426+
});
427+
419428
test('user is included if fullname words match the query', () {
420429
doCheck('', eg.user(fullName: 'Full Name'), true);
421430
doCheck('', eg.user(fullName: ''), true); // Unlikely case, but should not crash

0 commit comments

Comments
 (0)