public async void Load(string query) { if (this.IsLoading) { return; } this.IsLoading = true; await DownloadArabicSearchFile(); var translation = SettingsUtils.Get<string>(Constants.PREF_ACTIVE_TRANSLATION); if (!string.IsNullOrEmpty(translation)) { var translationFile = translation.Split('|')[0]; try { var translationVerses = new List<QuranAyah>(); var arabicVerses = new List<ArabicAyah>(); var taskFactory = new TaskFactory(); if (await FileUtils.FileExists(FileUtils.DatabaseFolder, translationFile)) { using (var db = new QuranDatabaseHandler<QuranAyah>(Path.Combine(FileUtils.GetQuranDatabaseDirectory(), translationFile))) { translationVerses = await taskFactory.StartNew(() => db.Search(query)); } } if (await FileUtils.HaveArabicSearchFile()) { using (var dbArabic = new QuranDatabaseHandler<ArabicAyah>(Path.Combine(FileUtils.GetQuranDatabaseDirectory(), FileUtils.QURAN_ARABIC_DATABASE))) { arabicVerses = await taskFactory.StartNew(() => dbArabic.Search(query)); } } this.SearchResults.Clear(); // Merging 2 results int a = 0; int t = 0; var arabicVerse = new QuranAyah { Surah = int.MaxValue, Ayah = int.MaxValue }; var translationVerse = new QuranAyah { Surah = int.MaxValue, Ayah = int.MaxValue }; var verseToDisplay = new QuranAyah(); var comparer = new AyahComparer(); while (a < arabicVerses.Count || t < translationVerses.Count) { if (a < arabicVerses.Count) arabicVerse = arabicVerses[a]; else arabicVerse = new QuranAyah { Surah = int.MaxValue, Ayah = int.MaxValue }; if (t < translationVerses.Count) translationVerse = translationVerses[t]; else translationVerse = new QuranAyah { Surah = int.MaxValue, Ayah = int.MaxValue }; if (comparer.Compare(arabicVerse, translationVerse) > 0) { verseToDisplay = translationVerse; t++; } else if (comparer.Compare(arabicVerse, translationVerse) < 0) { verseToDisplay = arabicVerse; a++; } else if (comparer.Compare(arabicVerse, translationVerse) == 0) { verseToDisplay = arabicVerse; a++; t++; } var verse = verseToDisplay; var text = TrimText(verse.Text, MaxPreviewCharacter); this.SearchResults.Add(new ItemViewModel { Id = string.Format("{0} ({1}:{2})", QuranUtils.GetSurahName(verse.Surah, false), verse.Surah, verse.Ayah), Details = text, PageNumber = QuranUtils.GetPageFromAyah(verse.Surah, verse.Ayah), SelectedAyah = new QuranAyah(verse.Surah, verse.Ayah) }); } return; } catch (Exception ex) { telemetry.TrackException(ex, new Dictionary<string, string> { { "Scenario", "LoadingTranslations" } }); this.SearchResults.Add(new ItemViewModel { Id = "Error", Details = "Error performing translation", PageNumber = 1, SelectedAyah = new QuranAyah() }); } finally { IsLoading = false; } } await QuranApp.NativeProvider.ShowInfoMessageBox(Resources.no_translation_to_search); }
public async void Load(string query) { if (this.IsLoading) { return; } this.IsLoading = true; var translation = SettingsUtils.Get <string>(Constants.PREF_ACTIVE_TRANSLATION); if (!string.IsNullOrEmpty(translation)) { var translationFile = translation.Split('|')[0]; try { var translationVerses = new List <QuranAyah>(); var arabicVerses = new List <ArabicAyah>(); var taskFactory = new TaskFactory(); if (await FileUtils.FileExists(FileUtils.DatabaseFolder, translationFile)) { using (var db = new QuranDatabaseHandler <QuranAyah>(Path.Combine(FileUtils.GetQuranDatabaseDirectory(), translationFile))) { translationVerses = await taskFactory.StartNew(() => db.Search(query)); } } using (var dbArabic = new QuranDatabaseHandler <ArabicAyah>(FileUtils.ArabicDatabase)) { arabicVerses = await taskFactory.StartNew(() => dbArabic.Search(query)); } this.SearchResults.Clear(); // Merging 2 results int a = 0; int t = 0; var arabicVerse = new QuranAyah { Surah = int.MaxValue, Ayah = int.MaxValue }; var translationVerse = new QuranAyah { Surah = int.MaxValue, Ayah = int.MaxValue }; var verseToDisplay = new QuranAyah(); var comparer = new AyahComparer(); while (a < arabicVerses.Count || t < translationVerses.Count) { if (a < arabicVerses.Count) { arabicVerse = arabicVerses[a]; } else { arabicVerse = new QuranAyah { Surah = int.MaxValue, Ayah = int.MaxValue } }; if (t < translationVerses.Count) { translationVerse = translationVerses[t]; } else { translationVerse = new QuranAyah { Surah = int.MaxValue, Ayah = int.MaxValue } }; if (comparer.Compare(arabicVerse, translationVerse) > 0) { verseToDisplay = translationVerse; t++; } else if (comparer.Compare(arabicVerse, translationVerse) < 0) { verseToDisplay = arabicVerse; a++; } else if (comparer.Compare(arabicVerse, translationVerse) == 0) { verseToDisplay = arabicVerse; a++; t++; } var verse = verseToDisplay; var text = TrimText(verse.Text, MaxPreviewCharacter); this.SearchResults.Add(new ItemViewModel { Id = string.Format("{0} ({1}:{2})", QuranUtils.GetSurahName(verse.Surah, false), verse.Surah, verse.Ayah), Details = text, PageNumber = QuranUtils.GetPageFromAyah(verse.Surah, verse.Ayah), SelectedAyah = new QuranAyah(verse.Surah, verse.Ayah) }); } return; } catch (Exception ex) { telemetry.TrackException(ex, new Dictionary <string, string> { { "Scenario", "LoadingTranslations" } }); this.SearchResults.Add(new ItemViewModel { Id = "Error", Details = "Error performing translation", PageNumber = 1, SelectedAyah = new QuranAyah() }); } finally { IsLoading = false; } } await QuranApp.NativeProvider.ShowInfoMessageBox(Resources.no_translation_to_search); }
public async void Load(string query) { // Set translation if ((string.IsNullOrEmpty(QuranApp.DetailsViewModel.TranslationFile) || !FileUtils.FileExists(PathHelper.Combine(FileUtils.GetQuranDatabaseDirectory(false), QuranApp.DetailsViewModel.TranslationFile))) && !FileUtils.FileExists(PathHelper.Combine(FileUtils.GetQuranDatabaseDirectory(false), FileUtils.QURAN_ARABIC_DATABASE))) { QuranApp.NativeProvider.ShowInfoMessageBox(AppResources.no_translation_to_search); } else { IsLoading = true; try { var translationVerses = new List<QuranAyah>(); var arabicVerses = new List<ArabicAyah>(); var tasks = new List<Task>(); var taskFactory = new TaskFactory(); if (QuranApp.DetailsViewModel.TranslationFile != null && FileUtils.FileExists(PathHelper.Combine(FileUtils.GetQuranDatabaseDirectory(false), QuranApp.DetailsViewModel.TranslationFile))) { using (var db = new QuranDatabaseHandler<QuranAyah>(QuranApp.DetailsViewModel.TranslationFile)) { translationVerses = await taskFactory.StartNew(() => db.Search(query)); } } if (FileUtils.FileExists(PathHelper.Combine(FileUtils.GetQuranDatabaseDirectory(false), FileUtils.QURAN_ARABIC_DATABASE))) { using (var dbArabic = new QuranDatabaseHandler<ArabicAyah>(FileUtils.QURAN_ARABIC_DATABASE)) { arabicVerses = await taskFactory.StartNew(() => dbArabic.Search(query)); } } this.SearchResults.Clear(); // Merging 2 results int a = 0; int t = 0; var arabicVerse = new QuranAyah { Surah = int.MaxValue, Ayah = int.MaxValue }; var translationVerse = new QuranAyah { Surah = int.MaxValue, Ayah = int.MaxValue }; var verseToDisplay = new QuranAyah(); var comparer = new AyahComparer(); while (a < arabicVerses.Count || t < translationVerses.Count) { if (a < arabicVerses.Count) arabicVerse = arabicVerses[a]; else arabicVerse = new QuranAyah { Surah = int.MaxValue, Ayah = int.MaxValue }; if (t < translationVerses.Count) translationVerse = translationVerses[t]; else translationVerse = new QuranAyah { Surah = int.MaxValue, Ayah = int.MaxValue }; if (comparer.Compare(arabicVerse, translationVerse) > 0) { verseToDisplay = translationVerse; t++; } else if (comparer.Compare(arabicVerse, translationVerse) < 0) { verseToDisplay = arabicVerse; a++; } else if (comparer.Compare(arabicVerse, translationVerse) == 0) { verseToDisplay = arabicVerse; a++; t++; } var verse = verseToDisplay; var text = TrimText(verse.Text, MaxPreviewCharacter); this.SearchResults.Add(new ItemViewModel { Id = string.Format("{0} ({1}:{2})", QuranUtils.GetSurahName(verse.Surah, false), verse.Surah, verse.Ayah), Details = text, PageNumber = QuranUtils.GetPageFromSurahAyah(verse.Surah, verse.Ayah), SelectedAyah = new QuranAyah(verse.Surah, verse.Ayah) }); } } catch (Exception e) { this.SearchResults.Add(new ItemViewModel { Id = "Error", Details = "Error performing translation", PageNumber = 1, SelectedAyah = new QuranAyah() }); } IsLoading = false; } }