@@ -237,9 +237,13 @@ function stopQuestionMarkPropagation(e: KeyboardEvent) {
237237 e .stopImmediatePropagation ()
238238}
239239
240+ const userSettings = useUserSettings ()
241+
242+ const optimizeForLowPerformanceDevice = computed (() => getPreferences (userSettings .value , ' optimizeForLowPerformanceDevice' ))
243+
240244const languageDetectorInGlobalThis = ' LanguageDetector' in globalThis
241- let supportsLanguageDetector = languageDetectorInGlobalThis && await (globalThis as any ).LanguageDetector .availability () === ' available'
242- let languageDetector: { detect: (arg0 : string ) => any }
245+ let supportsLanguageDetector = ! optimizeForLowPerformanceDevice . value && languageDetectorInGlobalThis && await (globalThis as any ).LanguageDetector .availability () === ' available'
246+ let languageDetector: { detect: (arg0 : string , option : { signal : AbortSignal } ) => any }
243247// If the API is supported, but the model not loaded yet…
244248if (languageDetectorInGlobalThis && ! supportsLanguageDetector ) {
245249 // …trigger the model download
@@ -255,26 +259,36 @@ function countLetters(text: string) {
255259 return letters .length
256260}
257261
258- async function detectLanguage() {
262+ let detectLanguageAbortController = new AbortController ()
263+
264+ const detectLanguage = useDebounceFn (async () => {
259265 if (! supportsLanguageDetector ) {
260266 return
261267 }
262268 if (! languageDetector ) {
269+ // maybe we dont want to mess with this with abort....
263270 languageDetector = await (globalThis as any ).LanguageDetector .create ()
264271 }
272+ // we stop previously running language detection process
273+ detectLanguageAbortController .abort ()
274+ detectLanguageAbortController = new AbortController ()
265275 const text = htmlToText (editor .value ?.getHTML () || ' ' )
266276 if (! text || countLetters (text ) <= 5 ) {
267277 draft .value .params .language = preferredLanguage .value
268278 return
269279 }
270280 try {
271- const detectedLanguage = (await languageDetector .detect (text ))[0 ].detectedLanguage
281+ const detectedLanguage = (await languageDetector .detect (text , { signal: detectLanguageAbortController . signal } ))[0 ].detectedLanguage
272282 draft .value .params .language = detectedLanguage === ' und' ? preferredLanguage .value : detectedLanguage .substring (0 , 2 )
273283 }
274- catch {
284+ catch (e ) {
285+ // if error or abort we end up there
286+ if ((e as Error ).name !== ' AbortError' ) {
287+ console .error (e )
288+ }
275289 draft .value .params .language = preferredLanguage .value
276290 }
277- }
291+ }, 500 )
278292 </script >
279293
280294<template >
0 commit comments