aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorLibravatar Stefan Malzner <stefan@adlk.io>2018-12-07 13:47:00 +0100
committerLibravatar Stefan Malzner <stefan@adlk.io>2018-12-07 13:47:00 +0100
commit0cdc165ace53019371fc126d8d76817f1f2ed027 (patch)
tree1c98c3e31258c29ff2f49b748b9df16a892f66e6 /src
parentBump version to b20 (diff)
downloadferdium-app-0cdc165ace53019371fc126d8d76817f1f2ed027.tar.gz
ferdium-app-0cdc165ace53019371fc126d8d76817f1f2ed027.tar.zst
ferdium-app-0cdc165ace53019371fc126d8d76817f1f2ed027.zip
fix(Spellchecker): Dictionaries are now part of app instead of dynamic download
Diffstat (limited to 'src')
-rw-r--r--src/config.js3
-rw-r--r--src/stores/DictionaryStore.js45
-rw-r--r--src/stores/index.js2
-rw-r--r--src/webview/spellchecker.js34
4 files changed, 15 insertions, 69 deletions
diff --git a/src/config.js b/src/config.js
index d981f9c6a..789ddd1a0 100644
--- a/src/config.js
+++ b/src/config.js
@@ -56,4 +56,5 @@ export const FILE_SYSTEM_SETTINGS_TYPES = [
56 56
57export const SETTINGS_PATH = path.join(app.getPath('userData'), 'config'); 57export const SETTINGS_PATH = path.join(app.getPath('userData'), 'config');
58 58
59export const DICTIONARY_PATH = path.join(app.getPath('userData'), 'dicts'); 59// Replacing app.asar is not beautiful but unforunately necessary
60export const DICTIONARY_PATH = path.join(__dirname, 'dictionaries').replace('app.asar', 'app.asar.unpacked');
diff --git a/src/stores/DictionaryStore.js b/src/stores/DictionaryStore.js
deleted file mode 100644
index b9c5f2abf..000000000
--- a/src/stores/DictionaryStore.js
+++ /dev/null
@@ -1,45 +0,0 @@
1import { observable } from 'mobx';
2import { createDownloader } from 'hunspell-dict-downloader';
3
4import Store from './lib/Store';
5
6import { DICTIONARY_PATH } from '../config';
7
8const debug = require('debug')('Franz:DictionaryStore');
9
10export default class DictionaryStore extends Store {
11 @observable available = []
12 @observable installed = []
13
14 _dictDownloader = null
15
16 constructor(...args) {
17 super(...args);
18
19 this.registerReactions([
20 this._downloadDictForUserLocale.bind(this),
21 ]);
22 }
23
24 async setup() {
25 this._dictDownloader = await createDownloader(DICTIONARY_PATH);
26 debug('dicts', this._dictDownloader);
27
28 this.available = this._dictDownloader.availableDictionaries;
29 this.installed = this._dictDownloader.installedDictionaries;
30
31 if (!this.installed.includes('en-us')) {
32 this._dictDownloader.installDictionary('en-us');
33 }
34 }
35
36 _downloadDictForUserLocale() {
37 const spellcheckerLanguage = this.stores.settings.app.spellcheckerLanguage;
38
39 debug('trying to Downloading dict for', spellcheckerLanguage);
40 if (!this.installed.includes(spellcheckerLanguage) && this.available.includes(spellcheckerLanguage) && spellcheckerLanguage !== 'en-us') {
41 debug('Downloading dict for', spellcheckerLanguage);
42 this._dictDownloader.installDictionary(spellcheckerLanguage);
43 }
44 }
45}
diff --git a/src/stores/index.js b/src/stores/index.js
index f547d0a7a..96b844c95 100644
--- a/src/stores/index.js
+++ b/src/stores/index.js
@@ -9,7 +9,6 @@ import UIStore from './UIStore';
9import PaymentStore from './PaymentStore'; 9import PaymentStore from './PaymentStore';
10import NewsStore from './NewsStore'; 10import NewsStore from './NewsStore';
11import RequestStore from './RequestStore'; 11import RequestStore from './RequestStore';
12import DictionaryStore from './DictionaryStore';
13import GlobalErrorStore from './GlobalErrorStore'; 12import GlobalErrorStore from './GlobalErrorStore';
14 13
15export default (api, actions, router) => { 14export default (api, actions, router) => {
@@ -27,7 +26,6 @@ export default (api, actions, router) => {
27 payment: new PaymentStore(stores, api, actions), 26 payment: new PaymentStore(stores, api, actions),
28 news: new NewsStore(stores, api, actions), 27 news: new NewsStore(stores, api, actions),
29 requests: new RequestStore(stores, api, actions), 28 requests: new RequestStore(stores, api, actions),
30 dictionary: new DictionaryStore(stores, api, actions),
31 globalError: new GlobalErrorStore(stores, api, actions), 29 globalError: new GlobalErrorStore(stores, api, actions),
32 }); 30 });
33 // Initialize all stores 31 // Initialize all stores
diff --git a/src/webview/spellchecker.js b/src/webview/spellchecker.js
index b0192b7ef..ab0cc9a90 100644
--- a/src/webview/spellchecker.js
+++ b/src/webview/spellchecker.js
@@ -1,28 +1,24 @@
1import { webFrame } from 'electron'; 1import { webFrame } from 'electron';
2import fs from 'fs';
3import path from 'path';
4import { SpellCheckerProvider } from 'electron-hunspell'; 2import { SpellCheckerProvider } from 'electron-hunspell';
3import path from 'path';
5 4
6import { DICTIONARY_PATH } from '../config'; 5import { DICTIONARY_PATH } from '../config';
7 6
7
8const debug = require('debug')('Franz:spellchecker'); 8const debug = require('debug')('Franz:spellchecker');
9 9
10let provider; 10let provider;
11let currentDict; 11let currentDict;
12let _isEnabled = false; 12let _isEnabled = false;
13 13
14async function loadDictionaries() { 14async function loadDictionary(locale) {
15 const rawList = fs.readdirSync(DICTIONARY_PATH); 15 try {
16 16 // Replacing app.asar is not beautiful but unforunately necessary
17 const dicts = rawList.filter(item => !item.startsWith('.') && fs.lstatSync(path.join(DICTIONARY_PATH, item)).isDirectory()); 17 const fileLocation = path.join(DICTIONARY_PATH, `hunspell-dict-${locale}/${locale}`);
18 18 console.log(fileLocation, __dirname);
19 debug('Found dictionaries', dicts); 19 await provider.loadDictionary(locale, `${fileLocation}.dic`, `${fileLocation}.aff`);
20 20 } catch (err) {
21 for (let i = 0; i < dicts.length; i += 1) { 21 console.error('Could not load dictionary', err);
22 const fileLocation = `${DICTIONARY_PATH}/${dicts[i]}/${dicts[i]}`;
23 debug('Trying to load', fileLocation);
24 // eslint-disable-next-line
25 await provider.loadDictionary(dicts[i], `${fileLocation}.dic`, `${fileLocation}.aff`);
26 } 22 }
27} 23}
28 24
@@ -30,12 +26,6 @@ export async function switchDict(locale) {
30 try { 26 try {
31 debug('Trying to load dictionary', locale); 27 debug('Trying to load dictionary', locale);
32 28
33 if (!provider.availableDictionaries.includes(locale)) {
34 console.warn('Dict not available', locale);
35
36 return;
37 }
38
39 if (!provider) { 29 if (!provider) {
40 console.warn('SpellcheckProvider not initialized'); 30 console.warn('SpellcheckProvider not initialized');
41 31
@@ -48,6 +38,8 @@ export async function switchDict(locale) {
48 return; 38 return;
49 } 39 }
50 40
41 provider.unloadDictionary(locale);
42 loadDictionary(locale);
51 provider.switchDictionary(locale); 43 provider.switchDictionary(locale);
52 44
53 debug('Switched dictionary to', locale); 45 debug('Switched dictionary to', locale);
@@ -66,7 +58,7 @@ export default async function initialize(languageCode = 'en-us') {
66 58
67 debug('Init spellchecker'); 59 debug('Init spellchecker');
68 await provider.initialize(); 60 await provider.initialize();
69 await loadDictionaries(); 61 // await loadDictionaries();
70 62
71 debug('Available spellchecker dictionaries', provider.availableDictionaries); 63 debug('Available spellchecker dictionaries', provider.availableDictionaries);
72 64