private static async Task DeleteAllRecords() { TranslatorDatabase database = App.Database; await database.DeleteAllLanguagesAsync(); await database.DeleteAllRecordsAsync(); }
private async Task ProcessContentsAsync(byte[] data, string[] lastProcessedWordClosure, bool firstLanguage) { using var streamReader = new StreamReader(new MemoryStream(data), Encoding.UTF8, true); using var csvReader = new CsvReader(streamReader, new CsvConfiguration(CultureInfo.InvariantCulture) { Delimiter = ";" }); if (!await csvReader.ReadAsync()) { this.ResultsLabel.Text = "Ошибка: файл пустой"; return; } int count = csvReader.Parser.Count; if (count < 2) { this.ResultsLabel.Text = "Ошибка: должно быть минимум два языка"; return; } var languages = new Language[count]; for (int i = 0; i < languages.Length; i++) { languages[i] = new Language { Id = i, Name = csvReader.GetField(i) }; } var records = new List <Record>(); while (await csvReader.ReadAsync()) { string sourceText = csvReader.GetField(firstLanguage ? 0 : 1)?.Trim().ToLowerInvariant(); if (string.IsNullOrEmpty(sourceText)) { continue; } lastProcessedWordClosure[0] = sourceText; if (firstLanguage) { // с первого языка на второй, третий и т.п. for (int i = 1; i < count; i++) { records.Add(new Record { SourceText = sourceText, TargetLanguageId = i, Value = csvReader.GetField(i), }); } } else { // со второго языка на первый, третий и т.п. for (int i = 0; i < count; i++) { if (i == 1) { continue; } records.Add(new Record { SourceText = sourceText, TargetLanguageId = i, Value = csvReader.GetField(i), }); } } } TranslatorDatabase database = App.Database; if (firstLanguage) { await database.InsertLanguagesAsync(languages); } await database.InsertRecordsAsync(records); }
private async void SearchBar_OnSearchButtonPressed(object sender, EventArgs e) { if (!this.skipEmptyDatabaseCheck) { if (await App.Database.IsEmptyAsync()) { await this.ResetDatabaseAsync(); } this.skipEmptyDatabaseCheck = true; } this.ResultsLabel.Text = string.Empty; string text = this.SearchBar.Text?.Trim().ToLowerInvariant(); if (string.IsNullOrEmpty(text)) { return; } switch (text) { case "show developer tools": this.AddDeveloperToolbar(); this.ResultsLabel.Text = "Тулбар добавлен." + Environment.NewLine + Environment.NewLine + "Введите \"hide developer tools\", чтобы скрыть."; return; case "hide developer tools": this.RemoveDeveloperToolbar(); this.ResultsLabel.Text = "Тулбар скрыт." + Environment.NewLine + Environment.NewLine + "Введите \"show developer tools\", чтобы показать."; return; } TranslatorDatabase database = App.Database; List <Language> languages = await database.GetLanguagesAsync(); List <Record> exactRecords = await database.SearchRecordsAsync(text); List <Record> startsWithRecords = text.Length > 1 ? await database.SearchRecordsStartsWithAndNotExactAsync(text) : new List <Record>(); List <Record> approximateRecords = text.Length > 2 ? await database.SearchRecordsContainsAndNotExactAsync(text) : new List <Record>(); var formattedText = new FormattedString(); if (exactRecords.Count == 0 && startsWithRecords.Count == 0 && approximateRecords.Count == 0) { this.ResultsLabel.Text = "не найдено"; return; } if (exactRecords.Count > 0) { formattedText.Spans.Add( new Span { Text = text, FontSize = 22.0 }); AddWordTranslations(formattedText, exactRecords, languages); } AddGroupTranslations(formattedText, startsWithRecords, languages); AddGroupTranslations(formattedText, approximateRecords, languages); this.ResultsLabel.FormattedText = formattedText; }