コード例 #1
0
        private static async Task DeleteAllRecords()
        {
            TranslatorDatabase database = App.Database;

            await database.DeleteAllLanguagesAsync();

            await database.DeleteAllRecordsAsync();
        }
コード例 #2
0
        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);
        }
コード例 #3
0
        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;
        }