#8849 catch exception in enchant speller backend and avoid multiple speller lookups for missing dictionaries

This commit is contained in:
Stephan Witt 2014-05-18 10:43:32 +02:00
parent 10df612191
commit b3b6fc643d

View File

@ -69,22 +69,18 @@ EnchantChecker::Private::~Private()
enchant::Dict * EnchantChecker::Private::addSpeller(string const & lang) enchant::Dict * EnchantChecker::Private::addSpeller(string const & lang)
{ {
enchant::Broker * instance = enchant::Broker::instance(); enchant::Broker * instance = enchant::Broker::instance();
if (!instance->dict_exists(lang))
// FIXME error handling?
return 0;
enchant::Dict * dict = instance->request_dict(lang);
if (dict) {
Speller m; Speller m;
m.speller = dict;
try {
m.speller = instance->request_dict(lang);
}
catch (const enchant::Exception & e) {
// FIXME error handling?
m.speller = 0;
}
spellers_[lang] = m; spellers_[lang] = m;
return m.speller; return m.speller;
} }
// FIXME error handling?
return 0;
}
enchant::Dict * EnchantChecker::Private::speller(string const & lang) enchant::Dict * EnchantChecker::Private::speller(string const & lang)
@ -135,9 +131,9 @@ void EnchantChecker::advanceChangeNumber()
void EnchantChecker::insert(WordLangTuple const & word) void EnchantChecker::insert(WordLangTuple const & word)
{ {
Spellers::iterator it = d->spellers_.find(word.lang()->code()); enchant::Dict * m = d->speller(word.lang()->code());
if (it != d->spellers_.end()) { if (m) {
it->second.speller->add(to_utf8(word.word())); m->add(to_utf8(word.word()));
advanceChangeNumber(); advanceChangeNumber();
} }
} }
@ -145,9 +141,9 @@ void EnchantChecker::insert(WordLangTuple const & word)
void EnchantChecker::remove(WordLangTuple const & word) void EnchantChecker::remove(WordLangTuple const & word)
{ {
Spellers::iterator it = d->spellers_.find(word.lang()->code()); enchant::Dict * m = d->speller(word.lang()->code());
if (it != d->spellers_.end()) { if (m) {
it->second.speller->remove(to_utf8(word.word())); m->remove(to_utf8(word.word()));
advanceChangeNumber(); advanceChangeNumber();
} }
} }
@ -155,9 +151,9 @@ void EnchantChecker::remove(WordLangTuple const & word)
void EnchantChecker::accept(WordLangTuple const & word) void EnchantChecker::accept(WordLangTuple const & word)
{ {
Spellers::iterator it = d->spellers_.find(word.lang()->code()); enchant::Dict * m = d->speller(word.lang()->code());
if (it != d->spellers_.end()) { if (m) {
it->second.speller->add_to_session(to_utf8(word.word())); m->add_to_session(to_utf8(word.word()));
advanceChangeNumber(); advanceChangeNumber();
} }
} }