OpenAsar/core/src/app/discord_native/browser/spellCheck.js

39 lines
1.4 KiB
JavaScript

"use strict";
const electron = require('electron');
const {
SPELLCHECK_REPLACE_MISSPELLING,
SPELLCHECK_GET_AVAILABLE_DICTIONARIES,
SPELLCHECK_SET_LOCALE,
SPELLCHECK_SET_LEARNED_WORDS
} = require('../common/constants').IPCEvents;
let _learnedWords = new Set();
let _hasLoadedLearnedWords = false;
electron.ipcMain.handle(SPELLCHECK_REPLACE_MISSPELLING, async (event, correction) => {
event.sender.replaceMisspelling(correction);
});
electron.ipcMain.handle(SPELLCHECK_GET_AVAILABLE_DICTIONARIES, async _ => {
return electron.session.defaultSession.availableSpellCheckerLanguages;
});
electron.ipcMain.handle(SPELLCHECK_SET_LOCALE, async (_, locale) => {
electron.session.defaultSession.setSpellCheckerLanguages([locale]);
});
electron.ipcMain.handle(SPELLCHECK_SET_LEARNED_WORDS, async (_, newLearnedWords) => {
const session = electron.session.defaultSession;
if (!_hasLoadedLearnedWords) {
const dictionaryContents = await session.listWordsInSpellCheckerDictionary();
_learnedWords = new Set(dictionaryContents);
_hasLoadedLearnedWords = true;
}
_learnedWords.forEach(word => {
if (!newLearnedWords.has(word)) {
session.removeWordFromSpellCheckerDictionary(word);
}
});
newLearnedWords.forEach(word => {
if (!_learnedWords.has(word)) {
session.addWordToSpellCheckerDictionary(word);
}
});
_learnedWords = new Set(newLearnedWords);
});