|
53 | 53 | 'stream_id': int,
|
54 | 54 | 'stream_ids': List[int], # NOTE: replaces 'stream_id' in ZFL 35 for peer*
|
55 | 55 | 'value': bool,
|
56 |
| - 'message_ids': List[int] # Present when subject of msg(s) is updated |
| 56 | + 'message_ids': List[int], # Present when subject of msg(s) is updated |
| 57 | + # realm emoji: |
| 58 | + 'realm_emoji': Dict[str, Any] |
57 | 59 | }, total=False) # Each Event will only have a subset of these
|
58 | 60 |
|
59 | 61 | EditPropagateMode = Literal['change_one', 'change_all', 'change_later']
|
@@ -141,18 +143,9 @@ def __init__(self, controller: Any) -> None:
|
141 | 143 | self.unread_counts = classify_unread_counts(self)
|
142 | 144 |
|
143 | 145 | self._draft = None # type: Optional[Message]
|
144 |
| - unicode_emoji_data = unicode_emojis.EMOJI_DATA |
145 |
| - for name, data in unicode_emoji_data.items(): |
146 |
| - data['type'] = 'unicode_emoji' |
147 |
| - typed_unicode_emoji_data = cast(NamedEmojiData, unicode_emoji_data) |
148 |
| - custom_emoji_data = self.fetch_custom_emojis() |
149 |
| - zulip_extra_emoji = { |
150 |
| - 'zulip': {'code': 'zulip', 'type': 'zulip_extra_emoji'} |
151 |
| - } # type: NamedEmojiData |
152 |
| - all_emoji_data = {**typed_unicode_emoji_data, |
153 |
| - **custom_emoji_data, |
154 |
| - **zulip_extra_emoji}.items() |
155 |
| - self.active_emoji_data = OrderedDict(sorted(all_emoji_data, |
| 146 | + all_emoji_data = self.generate_all_emoji_data( |
| 147 | + self.initial_data['realm_emoji']) |
| 148 | + self.active_emoji_data = OrderedDict(sorted(all_emoji_data.items(), |
156 | 149 | key=lambda e: e[0]))
|
157 | 150 |
|
158 | 151 | self.new_user_input = True
|
@@ -397,13 +390,28 @@ def update_stream_message(self, topic: str, message_id: int,
|
397 | 390 | display_error_if_present(response, self.controller)
|
398 | 391 | return response['result'] == 'success'
|
399 | 392 |
|
400 |
| - def fetch_custom_emojis(self) -> NamedEmojiData: |
401 |
| - response = self.client.get_realm_emoji() |
| 393 | + def generate_all_emoji_data(self, |
| 394 | + custom_emoji: Dict[str, |
| 395 | + Any]) -> NamedEmojiData: |
| 396 | + unicode_emoji_data = unicode_emojis.EMOJI_DATA |
| 397 | + for name, data in unicode_emoji_data.items(): |
| 398 | + data['type'] = 'unicode_emoji' |
| 399 | + typed_unicode_emoji_data = cast(NamedEmojiData, unicode_emoji_data) |
| 400 | + custom_emoji_data = self.process_realm_emoji_data(custom_emoji) |
| 401 | + zulip_extra_emoji = { |
| 402 | + 'zulip': {'code': 'zulip', 'type': 'zulip_extra_emoji'} |
| 403 | + } # type: NamedEmojiData |
| 404 | + all_emoji_data = {**typed_unicode_emoji_data, |
| 405 | + **custom_emoji_data, |
| 406 | + **zulip_extra_emoji} |
| 407 | + return all_emoji_data |
| 408 | + |
| 409 | + def process_realm_emoji_data(self, |
| 410 | + emoji_data: Dict[str, Any]) -> NamedEmojiData: |
402 | 411 | custom_emojis = {emoji['name']: {'code': emoji_code,
|
403 | 412 | 'type': 'realm_emoji'}
|
404 |
| - for emoji_code, emoji in response['emoji'].items() |
| 413 | + for emoji_code, emoji in emoji_data.items() |
405 | 414 | if not emoji['deactivated']} # type: NamedEmojiData
|
406 |
| - display_error_if_present(response, self.controller) |
407 | 415 | return custom_emojis
|
408 | 416 |
|
409 | 417 | def get_messages(self, *,
|
@@ -1184,6 +1192,7 @@ def _register_desired_events(self, *, fetch_data: bool=False) -> str:
|
1184 | 1192 | 'muted_topics',
|
1185 | 1193 | 'realm_user', # Enables cross_realm_bots
|
1186 | 1194 | 'realm_user_groups',
|
| 1195 | + 'realm_emoji', |
1187 | 1196 | # zulip_version and zulip_feature_level are always returned in
|
1188 | 1197 | # POST /register from Feature level 3.
|
1189 | 1198 | 'zulip_version',
|
|
0 commit comments