Skip to content

Commit 8b6f15a

Browse files
Cl0v1sadmin
andauthored
feat: do not use language detection features on low end devices (#3317)
Co-authored-by: admin <admin@Sonar.lan>
1 parent dd21480 commit 8b6f15a

File tree

1 file changed

+20
-6
lines changed

1 file changed

+20
-6
lines changed

app/components/publish/PublishWidget.vue

Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -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+
240244
const 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…
244248
if (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

Comments
 (0)