void mozHunspell::LoadDictionaryList() { mDictionaries.Clear(); nsresult rv; nsCOMPtr<nsIProperties> dirSvc = do_GetService(NS_DIRECTORY_SERVICE_CONTRACTID); if (!dirSvc) return; nsCOMPtr<nsIFile> dictDir; rv = dirSvc->Get(DICTIONARY_SEARCH_DIRECTORY, NS_GET_IID(nsIFile), getter_AddRefs(dictDir)); if (NS_SUCCEEDED(rv)) { LoadDictionariesFromDir(dictDir); } else { // try to load gredir/dictionaries nsCOMPtr<nsIFile> greDir; rv = dirSvc->Get(NS_GRE_DIR, NS_GET_IID(nsIFile), getter_AddRefs(greDir)); if (NS_SUCCEEDED(rv)) { greDir->AppendNative(NS_LITERAL_CSTRING("dictionaries")); LoadDictionariesFromDir(greDir); } // try to load appdir/dictionaries only if different than gredir nsCOMPtr<nsIFile> appDir; rv = dirSvc->Get(NS_XPCOM_CURRENT_PROCESS_DIR, NS_GET_IID(nsIFile), getter_AddRefs(appDir)); PRBool equals; if (NS_SUCCEEDED(rv) && NS_SUCCEEDED(appDir->Equals(greDir, &equals)) && !equals) { appDir->AppendNative(NS_LITERAL_CSTRING("dictionaries")); LoadDictionariesFromDir(appDir); } } nsCOMPtr<nsISimpleEnumerator> dictDirs; rv = dirSvc->Get(DICTIONARY_SEARCH_DIRECTORY_LIST, NS_GET_IID(nsISimpleEnumerator), getter_AddRefs(dictDirs)); if (NS_FAILED(rv)) return; PRBool hasMore; while (NS_SUCCEEDED(dictDirs->HasMoreElements(&hasMore)) && hasMore) { nsCOMPtr<nsISupports> elem; dictDirs->GetNext(getter_AddRefs(elem)); dictDir = do_QueryInterface(elem); if (dictDir) LoadDictionariesFromDir(dictDir); } }
void mozHunspell::LoadDictionaryList() { mDictionaries.Clear(); nsresult rv; nsCOMPtr<nsIProperties> dirSvc = do_GetService(NS_DIRECTORY_SERVICE_CONTRACTID); if (!dirSvc) return; // find built in dictionaries nsCOMPtr<nsIFile> dictDir; rv = dirSvc->Get(DICTIONARY_SEARCH_DIRECTORY, NS_GET_IID(nsIFile), getter_AddRefs(dictDir)); if (NS_SUCCEEDED(rv)) { LoadDictionariesFromDir(dictDir); } else { // try to load gredir/dictionaries nsCOMPtr<nsIFile> greDir; rv = dirSvc->Get(NS_GRE_DIR, NS_GET_IID(nsIFile), getter_AddRefs(greDir)); if (NS_SUCCEEDED(rv)) { greDir->AppendNative(NS_LITERAL_CSTRING("dictionaries")); LoadDictionariesFromDir(greDir); } // try to load appdir/dictionaries only if different than gredir nsCOMPtr<nsIFile> appDir; rv = dirSvc->Get(NS_XPCOM_CURRENT_PROCESS_DIR, NS_GET_IID(nsIFile), getter_AddRefs(appDir)); bool equals; if (NS_SUCCEEDED(rv) && NS_SUCCEEDED(appDir->Equals(greDir, &equals)) && !equals) { appDir->AppendNative(NS_LITERAL_CSTRING("dictionaries")); LoadDictionariesFromDir(appDir); } } // find dictionaries from extensions requiring restart nsCOMPtr<nsISimpleEnumerator> dictDirs; rv = dirSvc->Get(DICTIONARY_SEARCH_DIRECTORY_LIST, NS_GET_IID(nsISimpleEnumerator), getter_AddRefs(dictDirs)); if (NS_FAILED(rv)) return; bool hasMore; while (NS_SUCCEEDED(dictDirs->HasMoreElements(&hasMore)) && hasMore) { nsCOMPtr<nsISupports> elem; dictDirs->GetNext(getter_AddRefs(elem)); dictDir = do_QueryInterface(elem); if (dictDir) LoadDictionariesFromDir(dictDir); } // find dictionaries from restartless extensions for (PRUint32 i = 0; i < mDynamicDirectories.Count(); i++) { LoadDictionariesFromDir(mDynamicDirectories[i]); } // Now we have finished updating the list of dictionaries, update the current // dictionary and any editors which may use it. mozInlineSpellChecker::UpdateCanEnableInlineSpellChecking(); // Check if the current dictionary is still available. // If not, try to replace it with another dictionary of the same language. if (!mDictionary.IsEmpty()) { rv = SetDictionary(mDictionary.get()); if (NS_SUCCEEDED(rv)) return; } // If the current dictionary has gone, and we don't have a good replacement, // set no current dictionary. if (!mDictionary.IsEmpty()) { SetDictionary(EmptyString().get()); } }