From 35c8355f6a6299e73d29942a91b31c45cf6d75fb Mon Sep 17 00:00:00 2001 From: Roo4L Date: Sat, 11 Sep 2021 16:28:52 +0300 Subject: [PATCH] Add support of importing user defined translations Add feature of specifing user translations in input .txt file. TextReader class automaticly detects user translation after ";" sign and exports them to user dictionary. Translations are searched with pattern "word;translation". --- README.md | 7 +++++++ src/main/java/com/lingualeo/Importer.java | 19 +++++++++++++++++-- .../lingualeo/controller/FormController.java | 5 +++++ .../java/com/lingualeo/reader/BaseReader.java | 3 +++ .../java/com/lingualeo/reader/TextReader.java | 10 ++++++++-- 5 files changed, 40 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 04e0e51..c73c5ff 100644 --- a/README.md +++ b/README.md @@ -22,8 +22,15 @@ gradlew.bat run ## Formats - Kindle (sqlite) Default file located /Volumes/Kindle/system/vocabulary/vocab.db - Text. All words should be in one column. +- Text with translations. (CSV separation with ";" sign) ## Text example: +### Text witout translations apple orange watermelon +### Text with translations +adversarial;состязательный +cinnamon;корица +draw up;составлять (документы) +vigorously;энергично, решительно diff --git a/src/main/java/com/lingualeo/Importer.java b/src/main/java/com/lingualeo/Importer.java index 37ead69..c8cc4a1 100644 --- a/src/main/java/com/lingualeo/Importer.java +++ b/src/main/java/com/lingualeo/Importer.java @@ -7,6 +7,7 @@ import javax.naming.AuthenticationException; import java.io.IOException; +import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.logging.Level; @@ -15,6 +16,7 @@ public class Importer { private final List words; private final ApiClient client; + private HashMap translations; private static final Logger logger = Logger.getLogger(Importer.class.getName()); private ProgressBar progressBar; @@ -30,6 +32,10 @@ public Importer(List words, ApiClient client) { this.client = client; } + public void setTranslations(HashMap translations) { + this.translations = translations; + } + public void startImport() { if (words.isEmpty()) { logger.warning("You don't have words in the file"); @@ -50,8 +56,16 @@ public void startImport() { for (Word word : words) { try { - Iterator it = client.getTranslates(word.getName()).iterator(); - processWord(word, it); + if (translations == null + || translations.isEmpty() + || !translations.containsKey(word.getName())) { + + Iterator it = client.getTranslates(word.getName()).iterator(); + processWord(word, it); + } else { + client.addWord(word.getName(), translations.get(word.getName()), word.getContext()); + logger.finest("Word added: " + word.getName()); + } float percent = i / count; updateProgress(percent); @@ -61,6 +75,7 @@ public void startImport() { logger.log(Level.SEVERE, e.getMessage(), e); } } + updateProgress(1); logger.finest("End import to Lingualeo..."); } diff --git a/src/main/java/com/lingualeo/controller/FormController.java b/src/main/java/com/lingualeo/controller/FormController.java index c1c89c7..50784cd 100644 --- a/src/main/java/com/lingualeo/controller/FormController.java +++ b/src/main/java/com/lingualeo/controller/FormController.java @@ -10,6 +10,7 @@ import javafx.stage.FileChooser; import java.io.File; +import java.util.HashMap; import java.util.List; public class FormController { @@ -18,7 +19,9 @@ public class FormController { public Button startButton; public TextArea textField; public ProgressBar progressBar; + public CheckBox translationsCheckBox; private List words; + private HashMap translations; @FXML protected void handleSubmitButtonAction() { @@ -26,6 +29,7 @@ protected void handleSubmitButtonAction() { () -> { String password = passwordField.getText(); Importer importer = new Importer(words, new ApiClient(emailField.getText(), password), progressBar); + importer.setTranslations(translations); startButton.setDisable(true); importer.startImport(); } @@ -44,6 +48,7 @@ protected void handleFileChooserAction() { if (file != null) { BaseReader reader = ReaderFactory.create(file); words = reader.read(); + translations = reader.getTranslations(); this.startButton.setDisable(false); } } diff --git a/src/main/java/com/lingualeo/reader/BaseReader.java b/src/main/java/com/lingualeo/reader/BaseReader.java index f59975e..41df9a9 100644 --- a/src/main/java/com/lingualeo/reader/BaseReader.java +++ b/src/main/java/com/lingualeo/reader/BaseReader.java @@ -2,11 +2,13 @@ import java.io.File; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; public abstract class BaseReader { File file; List words = new ArrayList<>(); + HashMap translations = new HashMap<>(); BaseReader(File file) { this.file = file; @@ -15,6 +17,7 @@ public abstract class BaseReader { List getWords() { return words; } + public HashMap getTranslations() { return translations; } public abstract List read(); } diff --git a/src/main/java/com/lingualeo/reader/TextReader.java b/src/main/java/com/lingualeo/reader/TextReader.java index cfc2e7f..2ff88ea 100644 --- a/src/main/java/com/lingualeo/reader/TextReader.java +++ b/src/main/java/com/lingualeo/reader/TextReader.java @@ -22,8 +22,14 @@ public List read() { BufferedReader br = new BufferedReader(fileReader); String line; while ((line = br.readLine()) != null) { - line = line.trim(); - this.words.add(new Word(line.toLowerCase())); + String[] split_str = line.split(";", 2); + if (split_str.length == 1) { + line = line.trim(); + this.words.add(new Word(line.toLowerCase())); + } else { + this.words.add(new Word(split_str[0].trim())); + this.translations.put(split_str[0].trim(), split_str[1].trim()); + } } fileReader.close(); } catch (IOException e) {