Skip to content

Commit 0bd0caa

Browse files
committed
wip override individual names, not whole emoji
1 parent 0ce0115 commit 0bd0caa

File tree

1 file changed

+36
-11
lines changed

1 file changed

+36
-11
lines changed

lib/model/emoji.dart

Lines changed: 36 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import 'package:collection/collection.dart';
2+
13
import '../api/model/events.dart';
24
import '../api/model/initial_snapshot.dart';
35
import '../api/model/model.dart';
@@ -188,28 +190,51 @@ class EmojiStoreImpl with EmojiStore {
188190
}
189191

190192
List<EmojiCandidate> _generateAllCandidates() {
191-
final byEmojiName = <String, EmojiCandidate>{};
193+
final results = <EmojiCandidate>[];
194+
195+
final namesOverridden = {
196+
for (final emoji in realmEmoji.values) emoji.name,
197+
'zulip',
198+
};
192199
for (final entry in _serverEmojiData.entries) {
193-
final emojiName = entry.value.first;
194-
byEmojiName[emojiName] = _emojiCandidateFor(
200+
final allNames = entry.value;
201+
final String emojiName;
202+
final List<String>? aliases;
203+
if (allNames.any(namesOverridden.contains)) {
204+
final names = allNames.whereNot(namesOverridden.contains).toList();
205+
if (names.isEmpty) continue;
206+
emojiName = names.removeAt(0);
207+
aliases = names;
208+
} else {
209+
// Most emoji aren't overridden, so avoid copying the list.
210+
emojiName = allNames.first;
211+
aliases = allNames.length > 1 ? allNames.sublist(1) : null;
212+
}
213+
results.add(_emojiCandidateFor(
195214
emojiType: ReactionType.unicodeEmoji,
196215
emojiCode: entry.key, emojiName: emojiName,
197-
aliases: entry.value.length > 1 ? entry.value.sublist(1) : null);
216+
aliases: aliases));
198217
}
218+
199219
for (final entry in realmEmoji.entries) {
200220
final emojiName = entry.value.name;
201-
byEmojiName[emojiName] = _emojiCandidateFor(
221+
if (emojiName == 'zulip') {
222+
// TODO does 'zulip' really override realm emoji?
223+
// (This is copied from zulip-mobile's behavior.)
224+
continue;
225+
}
226+
results.add(_emojiCandidateFor(
202227
emojiType: ReactionType.realmEmoji,
203228
emojiCode: entry.key, emojiName: emojiName,
204-
aliases: null);
229+
aliases: null));
205230
}
206-
// TODO does 'zulip' really override realm emoji?
207-
// (This is copied from zulip-mobile's behavior.)
208-
byEmojiName['zulip'] = _emojiCandidateFor(
231+
232+
results.add(_emojiCandidateFor(
209233
emojiType: ReactionType.zulipExtraEmoji,
210234
emojiCode: 'zulip', emojiName: 'zulip',
211-
aliases: null);
212-
return byEmojiName.values.toList(growable: false);
235+
aliases: null));
236+
237+
return results;
213238
}
214239

215240
// Compare query_matches_string_in_order in Zulip web:shared/src/typeahead.ts .

0 commit comments

Comments
 (0)