Add localized emoji search

This commit is contained in:
Fedor Indutny 2024-03-21 09:35:54 -07:00 committed by GitHub
parent ce0fb22041
commit e90553b3b3
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
17 changed files with 878 additions and 97 deletions

View file

@ -22,6 +22,7 @@ import { initialize as initializeLogging } from '../logging/set_up_renderer_logg
import { MinimalSignalContext } from './minimalContext';
import type { LocaleDirection } from '../../app/locale';
import type { HourCyclePreference } from '../types/I18N';
import type { LocaleEmojiListType } from '../types/emoji';
strictAssert(Boolean(window.SignalContext), 'context must be defined');
@ -48,6 +49,9 @@ export type MinimalSignalContextType = {
getResolvedMessagesLocale: () => string;
getPreferredSystemLocales: () => Array<string>;
getLocaleOverride: () => string | null;
getLocalizedEmojiList: (
locale: string
) => Promise<LocaleEmojiListType | undefined>;
getMainWindowStats: () => Promise<MainWindowStatsType>;
getMenuOptions: () => Promise<MenuOptionsType>;
getNodeVersion: () => string;

View file

@ -5,6 +5,8 @@ import type { MenuItemConstructorOptions } from 'electron';
import { ipcRenderer } from 'electron';
import type { MenuOptionsType } from '../types/menu';
import type { LocaleEmojiListType } from '../types/emoji';
import { LocaleEmojiListSchema } from '../types/emoji';
import type { MainWindowStatsType, MinimalSignalContextType } from './context';
import { activeWindowService } from '../context/activeWindowService';
import { config } from '../context/config';
@ -18,6 +20,8 @@ import {
} from '../context/localeMessages';
import { waitForSettingsChange } from '../context/waitForSettingsChange';
const emojiListCache = new Map<string, LocaleEmojiListType>();
export const MinimalSignalContext: MinimalSignalContextType = {
activeWindowService,
config,
@ -40,6 +44,21 @@ export const MinimalSignalContext: MinimalSignalContextType = {
async getMenuOptions(): Promise<MenuOptionsType> {
return ipcRenderer.invoke('getMenuOptions');
},
async getLocalizedEmojiList(locale: string) {
const cached = emojiListCache.get(locale);
if (cached) {
return cached;
}
const buf = await ipcRenderer.invoke(
'OptionalResourceService:getData',
`emoji-index-${locale}.json`
);
const json = JSON.parse(Buffer.from(buf).toString());
const result = LocaleEmojiListSchema.parse(json);
emojiListCache.set(locale, result);
return result;
},
getI18nAvailableLocales: () => config.availableLocales,
getI18nLocale: () => config.resolvedTranslationsLocale,
getI18nLocaleMessages: () => localeMessages,