diff --git a/app/src/main/java/io/github/sspanak/tt9/db/DictionaryLoader.java b/app/src/main/java/io/github/sspanak/tt9/db/DictionaryLoader.java index 433a933c..29454a05 100644 --- a/app/src/main/java/io/github/sspanak/tt9/db/DictionaryLoader.java +++ b/app/src/main/java/io/github/sspanak/tt9/db/DictionaryLoader.java @@ -180,18 +180,23 @@ public class DictionaryLoader { sendProgressMessage(language, ++progress, SettingsStore.DICTIONARY_IMPORT_PROGRESS_UPDATE_TIME); logLoadingStep("Letters imported", language, start); + start = System.currentTimeMillis(); + importWordFile(language, lettersCount, progress, 88); + progress = 88; + sendProgressMessage(language, progress, SettingsStore.DICTIONARY_IMPORT_PROGRESS_UPDATE_TIME); + logLoadingStep("Dictionary file imported", language, start); + + start = System.currentTimeMillis(); + DeleteOps.purgeCustomWords(sqlite.getDb(), language.getId()); + sendProgressMessage(language, ++progress, SettingsStore.DICTIONARY_IMPORT_PROGRESS_UPDATE_TIME); + logLoadingStep("Removed custom words, which are already in the dictionary", language, start); + start = System.currentTimeMillis(); InsertOps.restoreCustomWords(sqlite.getDb(), language); InsertOps.restoreCustomWords(sqlite.getDb(), new EmojiLanguage()); sendProgressMessage(language, ++progress, SettingsStore.DICTIONARY_IMPORT_PROGRESS_UPDATE_TIME); logLoadingStep("Custom words restored", language, start); - start = System.currentTimeMillis(); - importWordFile(language, lettersCount, progress, 90); - progress = 90; - sendProgressMessage(language, progress, SettingsStore.DICTIONARY_IMPORT_PROGRESS_UPDATE_TIME); - logLoadingStep("Dictionary file imported", language, start); - start = System.currentTimeMillis(); Tables.createPositionIndex(sqlite.getDb(), language); sendProgressMessage(language, progress + (100f - progress) / 2f, 0); @@ -290,7 +295,7 @@ public class DictionaryLoader { } - public void saveWordBatch(WordBatch batch) { + private void saveWordBatch(WordBatch batch) { InsertOps insertOps = new InsertOps(sqlite.getDb(), batch.getLanguage()); for (int i = 0, end = batch.getWords().size(); i < end; i++) { diff --git a/app/src/main/java/io/github/sspanak/tt9/db/exporter/DictionaryExporter.java b/app/src/main/java/io/github/sspanak/tt9/db/exporter/DictionaryExporter.java index ee9f0406..755a2c1c 100644 --- a/app/src/main/java/io/github/sspanak/tt9/db/exporter/DictionaryExporter.java +++ b/app/src/main/java/io/github/sspanak/tt9/db/exporter/DictionaryExporter.java @@ -77,10 +77,10 @@ public class DictionaryExporter extends AbstractExporter { long start = System.currentTimeMillis(); write(activity); sendSuccess(); - Logger.d(LOG_TAG, "All words for language: " + currentLanguage.getName() + " loaded. Time: " + (System.currentTimeMillis() - start) + "ms"); + Logger.d(LOG_TAG, "All words for language '" + currentLanguage.getName() + "' exported. Time: " + (System.currentTimeMillis() - start) + "ms"); } catch (Exception e) { sendFailure(); - Logger.e(LOG_TAG, "Failed exporting dictionary for " + currentLanguage.getName() + " to: " + getOutputFile() + ". " + e); + Logger.e(LOG_TAG, "Failed exporting dictionary for '" + currentLanguage.getName() + "' to '" + getOutputFile() + "'. " + e); } } } diff --git a/app/src/main/java/io/github/sspanak/tt9/db/sqlite/DeleteOps.java b/app/src/main/java/io/github/sspanak/tt9/db/sqlite/DeleteOps.java index be21f9fe..28b74a23 100644 --- a/app/src/main/java/io/github/sspanak/tt9/db/sqlite/DeleteOps.java +++ b/app/src/main/java/io/github/sspanak/tt9/db/sqlite/DeleteOps.java @@ -14,4 +14,15 @@ public class DeleteOps { db.delete(Tables.getWords(languageId), "word = ?", new String[] { word }); db.delete(Tables.CUSTOM_WORDS, "word = ?", new String[] { word }); } + + public static void purgeCustomWords(@NonNull SQLiteDatabase db, int languageId) { + String words = Tables.getWords(languageId); + + String repeatingWords = + "SELECT " + Tables.CUSTOM_WORDS + ".ROWID FROM " + Tables.CUSTOM_WORDS + + " JOIN " + words + " ON " + words + ".word = " + Tables.CUSTOM_WORDS + ".word " + + " WHERE langId = " + languageId + " AND " + words + ".position > 0"; + + db.delete(Tables.CUSTOM_WORDS, "ROWID IN (" + repeatingWords + ")", null); + } } diff --git a/app/src/main/java/io/github/sspanak/tt9/db/sqlite/SQLiteOpener.java b/app/src/main/java/io/github/sspanak/tt9/db/sqlite/SQLiteOpener.java index f725d41e..e4663c2e 100644 --- a/app/src/main/java/io/github/sspanak/tt9/db/sqlite/SQLiteOpener.java +++ b/app/src/main/java/io/github/sspanak/tt9/db/sqlite/SQLiteOpener.java @@ -22,7 +22,7 @@ public class SQLiteOpener extends SQLiteOpenHelper { private SQLiteDatabase db; - public SQLiteOpener(Context context) { + private SQLiteOpener(Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION); allLanguages = new ArrayList<>(LanguageCollection.getAll(context)); allLanguages.add(new EmojiLanguage());