public async Task CopyAyahToClipboard(QuranAyah ayah) { if (ayah == null) { return; } if (ayah.Translation != null) { QuranApp.NativeProvider.CopyToClipboard(ayah.Translation); } else if (ayah.Text != null) { QuranApp.NativeProvider.CopyToClipboard(ayah.Text); } else { try { using (var dbArabic = new QuranDatabaseHandler <ArabicAyah>(FileUtils.ArabicDatabase)) { var ayahSurah = await new TaskFactory().StartNew(() => dbArabic.GetVerse(ayah.Surah, ayah.Ayah)); QuranApp.NativeProvider.CopyToClipboard(ayahSurah.Text); } } catch (Exception e) { telemetry.TrackException(e, new Dictionary <string, string> { { "Scenario", "OpenArabicDatabase" } }); } } }
public async Task <string> GetAyahString(QuranAyah ayah) { if (ayah == null) { return(null); } else if (ayah.Text != null) { return(ayah.Text); } else { try { return(await Task.Run <string>(() => { using (var dbArabic = new QuranDatabaseHandler <ArabicAyah>(FileUtils.ArabicDatabase)) { var ayahSurah = dbArabic.GetVerse(ayah.Surah, ayah.Ayah); string ayahText = ayahSurah.Text; return ayahText; } })); } catch (Exception e) { telemetry.TrackException(e, new Dictionary <string, string> { { "Scenario", "OpenArabicDatabase" } }); } } return(null); }
public override async Task Initialize() { IsLoading = true; ClearPages(); Orientation = DisplayInformation.GetForCurrentView().CurrentOrientation; if (SettingsUtils.Get <bool>(Constants.PREF_NIGHT_MODE)) { Theme = ElementTheme.Dark; } else { Theme = ElementTheme.Light; } KeepInfoOverlay = SettingsUtils.Get <bool>(Constants.PREF_KEEP_INFO_OVERLAY); //Update translations var translation = SettingsUtils.Get <string>(Constants.PREF_ACTIVE_TRANSLATION); if (!string.IsNullOrEmpty(translation)) { TranslationFile = translation.Split('|')[0]; if (await HasTranslationFile()) { ShowTranslation = SettingsUtils.Get <bool>(Constants.PREF_SHOW_TRANSLATION); ShowArabicInTranslation = SettingsUtils.Get <bool>(Constants.PREF_SHOW_ARABIC_IN_TRANSLATION); } if (await HasTranslationFile()) { using (var db = new QuranDatabaseHandler <QuranAyah>(this.TranslationFile)) { _bismillahTranslation = (await new TaskFactory().StartNew(() => db.GetVerse(1, 1))).Text; } } } await CreatePages(); await LoadCurrentPage(); await base.Initialize(); IsLoading = false; }
private async Task<bool> loadPage(int pageIndex, bool force) { var pageModel = Pages[pageIndex]; // Set image pageModel.ImageSource = FileUtils.GetImageFromWeb(FileUtils.GetPageFileName(pageModel.PageNumber)); try { // Set translation if (string.IsNullOrEmpty(this.TranslationFile) || !FileUtils.FileExists(PathHelper.Combine(FileUtils.GetQuranDatabaseDirectory(false), this.TranslationFile))) return false; if (!force && pageModel.Translations.Count > 0) return false; List<QuranAyah> verses = null; using (var db = new QuranDatabaseHandler<QuranAyah>(this.TranslationFile)) { verses = await new TaskFactory().StartNew(() => db.GetVerses(pageModel.PageNumber)); } List<ArabicAyah> versesArabic = null; if (this.ShowArabicInTranslation && FileUtils.HaveArabicSearchFile()) { try { using (var dbArabic = new QuranDatabaseHandler<ArabicAyah>(FileUtils.QURAN_ARABIC_DATABASE)) { versesArabic = await new TaskFactory().StartNew(() => dbArabic.GetVerses(pageModel.PageNumber)); } } catch { //Not able to get Arabic text - skipping } } int tempSurah = -1; pageModel.Translations.Clear(); for (int i = 0; i < verses.Count; i++) { var verse = verses[i]; if (verse.Surah != tempSurah) { pageModel.Translations.Add(new VerseViewModel { StyleName = "TranslationViewHeader", Text = QuranUtils.GetSurahName(verse.Surah, true) }); tempSurah = verse.Surah; } pageModel.Translations.Add(new VerseViewModel(string.Format("{0}:{1}", verse.Surah, verse.Ayah), "BoldText")); if (versesArabic != null) { pageModel.Translations.Add(new VerseViewModel(versesArabic[i].Text, "ArabicText", verse.Surah, verse.Ayah)); } var versesSplit = QuranApp.NativeProvider.SplitLongText(verse.Text, SettingsUtils.Get<int>(Constants.PREF_TRANSLATION_TEXT_SIZE), "Normal"); foreach (var vs in versesSplit) { pageModel.Translations.Add(new VerseViewModel(vs, null, verse.Surah, verse.Ayah)); } } // Adding padding pageModel.Translations.Add(new VerseViewModel(" ")); } catch (Exception e) { // Try delete bad translation file if error is "no such table: verses" try { if (e.Message.StartsWith("no such table:", StringComparison.OrdinalIgnoreCase)) { FileUtils.DeleteFile(PathHelper.Combine(FileUtils.GetQuranDatabaseDirectory(false, false), this.TranslationFile)); } } catch { // Do nothing } pageModel.Translations.Add(new VerseViewModel { Text = "Error loading translation..." }); } return true; }
public async Task<string> GetAyahString(QuranAyah ayah) { if (ayah == null) { return null; } else if (ayah.Text != null) { return ayah.Text; } else { await DownloadArabicSearchFile(); if (FileUtils.HaveArabicSearchFile()) { try { using (var dbArabic = new QuranDatabaseHandler<ArabicAyah>(FileUtils.QURAN_ARABIC_DATABASE)) { var ayahSurah = await new TaskFactory().StartNew(() => dbArabic.GetVerse(ayah.Surah, ayah.Ayah)); string ayahText = ayahSurah.Text; return ayahText; } } catch (Exception) { Debug.WriteLine("Ayah Text isn't found"); } } } return null; }
public async void CopyAyahToClipboard(QuranAyah ayah) { if (ayah == null) return; if (ayah.Translation != null) { QuranApp.NativeProvider.CopyToClipboard(ayah.Translation); } else if (ayah.Text != null) { QuranApp.NativeProvider.CopyToClipboard(ayah.Text); } else { await DownloadArabicSearchFile(); if (FileUtils.HaveArabicSearchFile()) { try { using (var dbArabic = new QuranDatabaseHandler<ArabicAyah>(FileUtils.QURAN_ARABIC_DATABASE)) { var ayahSurah = await new TaskFactory().StartNew(() => dbArabic.GetVerse(ayah.Surah, ayah.Ayah)); QuranApp.NativeProvider.CopyToClipboard(ayahSurah.Text); } } catch { //Not able to get Arabic text - skipping } } } }
private static async Task<ItemViewModel> CreateBookmarkModel(Bookmarks bookmark) { var group = Resources.bookmarks; if (bookmark.Tags != null && bookmark.Tags.Count > 0) group = bookmark.Tags[0].Name; if (bookmark.Ayah != null && bookmark.Surah != null) { string title = QuranUtils.GetSurahNameFromPage(bookmark.Page, true); string details = ""; if (await FileUtils.HaveArabicSearchFile()) { try { using (var dbArabic = new QuranDatabaseHandler<ArabicAyah>(FileUtils.QURAN_ARABIC_DATABASE)) { var ayahSurah = await new TaskFactory().StartNew( () => dbArabic.GetVerse(bookmark.Surah.Value, bookmark.Ayah.Value)); title = ayahSurah.Text; } } catch (Exception ex) { telemetry.TrackException(ex, new Dictionary<string, string> { { "Scenario", "OpenArabicDatabase" } }); } details = string.Format(CultureInfo.InvariantCulture, "{0} {1} {2}, {3} {4}", QuranUtils.GetSurahName(bookmark.Surah.Value, true), Resources.verse, bookmark.Ayah.Value, QuranUtils.GetJuzTitle(), QuranUtils.GetJuzFromPage(bookmark.Page)); } else { details = string.Format(CultureInfo.InvariantCulture, "{0} {1}, {2} {3}, {4} {5}", Resources.quran_page, bookmark.Page, Resources.verse, bookmark.Ayah.Value, QuranUtils.GetJuzTitle(), QuranUtils.GetJuzFromPage(bookmark.Page)); } if (title.Length > maxBookmarkTitle) { for (int i = maxBookmarkTitle; i > 1; i--) { if (title[i] == ' ') { title = title.Substring(0, i - 1); break; } } } return new ItemViewModel { Id = bookmark.Id.ToString(CultureInfo.InvariantCulture), Title = title, Details = details, PageNumber = bookmark.Page, SelectedAyah = new QuranAyah(bookmark.Surah.Value, bookmark.Ayah.Value), Image = new BitmapImage(new Uri("ms-appx:///Assets/Images/favorite.png")), ItemType = ItemViewModelType.Bookmark, Group = group }; } else { return new ItemViewModel { Id = bookmark.Id.ToString(CultureInfo.InvariantCulture), Title = QuranUtils.GetSurahNameFromPage(bookmark.Page, true), Details = string.Format(CultureInfo.InvariantCulture, "{0} {1}, {2} {3}", Resources.quran_page, bookmark.Page, QuranUtils.GetJuzTitle(), QuranUtils.GetJuzFromPage(bookmark.Page)), PageNumber = bookmark.Page, Image = new BitmapImage(new Uri("ms-appx:///Assets/Images/favorite.png")), ItemType = ItemViewModelType.Bookmark, Group = group }; } }
private async Task LoadPage(PageViewModel pageModel) { if (pageModel == null) { return; } // Set image if (pageModel.ImageSource == null) { pageModel.ImageSource = FileUtils.GetImageOnlineUri(FileUtils.GetPageFileName(pageModel.PageNumber)); } // Set translation if (pageModel.Translations.Count == 0) { try { if (!await HasTranslationFile()) { return; } List<QuranAyah> verses = null; using (var db = new QuranDatabaseHandler<QuranAyah>(this.TranslationFile)) { verses = await new TaskFactory().StartNew(() => db.GetVerses(pageModel.PageNumber)); } FlowDirection flowDirection = FlowDirection.LeftToRight; Regex translationFilePattern = new Regex(@"quran\.([\w-]+)\..*"); var fileMatch = translationFilePattern.Match(this.TranslationFile); if (fileMatch.Success) { try { var cultureInfo = new CultureInfo(fileMatch.Groups[1].Value); if (cultureInfo.TextInfo.IsRightToLeft) { flowDirection = FlowDirection.RightToLeft; } } catch (Exception e) { telemetry.TrackException(e, new Dictionary<string, string> { { "Scenario", "ParseTranslationFileForFlowDirection" } }); } } List <ArabicAyah> versesArabic = null; if (this.ShowArabicInTranslation && await FileUtils.HaveArabicSearchFile()) { try { using (var dbArabic = new QuranDatabaseHandler<ArabicAyah>(FileUtils.QURAN_ARABIC_DATABASE)) { versesArabic = await new TaskFactory().StartNew(() => dbArabic.GetVerses(pageModel.PageNumber)); } } catch (Exception e) { telemetry.TrackException(e, new Dictionary<string, string> { { "Scenario", "OpenArabicDatabase" } }); } } int tempSurah = -1; for (int i = 0; i < verses.Count; i++) { var verse = verses[i]; if (verse.Surah != tempSurah) { pageModel.Translations.Add(new VerseViewModel(this) { IsHeader = true, Text = QuranUtils.GetSurahName(verse.Surah, true) }); tempSurah = verse.Surah; } var verseViewModel = new VerseViewModel(this) { Surah = verse.Surah, Ayah = verse.Ayah, Text = verse.Text, FlowDirection = flowDirection }; if (versesArabic != null) { verseViewModel.ArabicText = versesArabic[i].Text; } pageModel.Translations.Add(verseViewModel); } } catch (Exception e) { // Try delete bad translation file if error is "no such table: verses" try { if (e.Message.StartsWith("no such table:", StringComparison.OrdinalIgnoreCase)) { await FileUtils.SafeFileDelete(Path.Combine(FileUtils.GetQuranDatabaseDirectory(), this.TranslationFile)); } } catch { // Do nothing } pageModel.Translations.Add(new VerseViewModel(this) { Text = "Error loading translation..." }); telemetry.TrackException(e, new Dictionary<string, string> { { "Scenario", "LoadingTranslation" } }); } } return; }
public async Task<string> GetAyahString(QuranAyah ayah) { if (ayah == null) { return null; } else if (ayah.Text != null) { return ayah.Text; } else { await DownloadArabicSearchFile(); if (await FileUtils.HaveArabicSearchFile()) { try { using (var dbArabic = new QuranDatabaseHandler<ArabicAyah>(FileUtils.QURAN_ARABIC_DATABASE)) { var ayahSurah = dbArabic.GetVerse(ayah.Surah, ayah.Ayah); string ayahText = ayahSurah.Text; return ayahText; } } catch (Exception e) { telemetry.TrackException(e, new Dictionary<string, string> { { "Scenario", "OpenArabicDatabase" } }); } } } return null; }
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); }
private static async Task <ItemViewModel> CreateBookmarkModel(Bookmarks bookmark) { var group = Resources.bookmarks; if (bookmark.Tags != null && bookmark.Tags.Count > 0) { group = bookmark.Tags[0].Name; } if (bookmark.Ayah != null && bookmark.Surah != null) { string title = QuranUtils.GetSurahNameFromPage(bookmark.Page, true); string details = ""; try { using (var dbArabic = new QuranDatabaseHandler <ArabicAyah>(FileUtils.ArabicDatabase)) { var ayahSurah = await new TaskFactory().StartNew(() => dbArabic.GetVerse(bookmark.Surah.Value, bookmark.Ayah.Value)); title = ayahSurah.Text; } } catch (Exception ex) { telemetry.TrackException(ex, new Dictionary <string, string> { { "Scenario", "OpenArabicDatabase" } }); } details = string.Format(CultureInfo.InvariantCulture, "{0} {1} {2}, {3} {4}", QuranUtils.GetSurahName(bookmark.Surah.Value, true), Resources.verse, bookmark.Ayah.Value, QuranUtils.GetJuzTitle(), QuranUtils.GetJuzFromPage(bookmark.Page)); if (title.Length > maxBookmarkTitle) { for (int i = maxBookmarkTitle; i > 1; i--) { if (title[i] == ' ') { title = title.Substring(0, i - 1); break; } } } return(new ItemViewModel { Id = bookmark.Id.ToString(CultureInfo.InvariantCulture), Title = title, Details = details, PageNumber = bookmark.Page, SelectedAyah = new QuranAyah(bookmark.Surah.Value, bookmark.Ayah.Value), Image = new BitmapImage(new Uri("ms-appx:///Assets/Images/favorite.png")), ItemType = ItemViewModelType.Bookmark, Group = group }); } else { return(new ItemViewModel { Id = bookmark.Id.ToString(CultureInfo.InvariantCulture), Title = QuranUtils.GetSurahNameFromPage(bookmark.Page, true), Details = string.Format(CultureInfo.InvariantCulture, "{0} {1}, {2} {3}", Resources.quran_page, bookmark.Page, QuranUtils.GetJuzTitle(), QuranUtils.GetJuzFromPage(bookmark.Page)), PageNumber = bookmark.Page, Image = new BitmapImage(new Uri("ms-appx:///Assets/Images/favorite.png")), ItemType = ItemViewModelType.Bookmark, Group = group }); } }
private static async Task<ItemViewModel> createBookmarkModel(Bookmarks bookmark) { var group = AppResources.bookmarks; if (bookmark.Tags != null && bookmark.Tags.Count > 0) group = bookmark.Tags[0].Name; if (bookmark.Ayah != null && bookmark.Surah != null) { string title = QuranUtils.GetSurahNameFromPage(bookmark.Page, true); string details = ""; if (FileUtils.HaveArabicSearchFile()) { try { using (var dbArabic = new QuranDatabaseHandler<ArabicAyah>(FileUtils.QURAN_ARABIC_DATABASE)) { var ayahSurah = await new TaskFactory().StartNew( () => dbArabic.GetVerse(bookmark.Surah.Value, bookmark.Ayah.Value)); title = ayahSurah.Text; } } catch { //Not able to get Arabic text - skipping } details = string.Format(CultureInfo.InvariantCulture, "{0} {1} {2}, {3} {4}", QuranUtils.GetSurahName(bookmark.Surah.Value, true), AppResources.verse, bookmark.Ayah.Value, QuranUtils.GetJuzTitle(), QuranUtils.GetJuzFromPage(bookmark.Page)); } else { details = string.Format(CultureInfo.InvariantCulture, "{0} {1}, {2} {3}, {4} {5}", AppResources.quran_page, bookmark.Page, AppResources.verse, bookmark.Ayah.Value, QuranUtils.GetJuzTitle(), QuranUtils.GetJuzFromPage(bookmark.Page)); } if (title.Length > maxBookmarkTitle) { for (int i = maxBookmarkTitle; i > 1; i--) { if (title[i] == ' ') { title = title.Substring(0, i - 1); break; } } } return new ItemViewModel { Id = bookmark.Id.ToString(CultureInfo.InvariantCulture), Title = title, Details = details, PageNumber = bookmark.Page, SelectedAyah = new QuranAyah(bookmark.Surah.Value, bookmark.Ayah.Value), Image = new Uri("/Assets/Images/favorite.png", UriKind.Relative), ItemType = ItemViewModelType.Bookmark, Group = group }; } else { return new ItemViewModel { Id = bookmark.Id.ToString(CultureInfo.InvariantCulture), Title = QuranUtils.GetSurahNameFromPage(bookmark.Page, true), Details = string.Format(CultureInfo.InvariantCulture, "{0} {1}, {2} {3}", AppResources.quran_page, bookmark.Page, QuranUtils.GetJuzTitle(), QuranUtils.GetJuzFromPage(bookmark.Page)), PageNumber = bookmark.Page, Image = new Uri("/Assets/Images/favorite.png", UriKind.Relative), ItemType = ItemViewModelType.Bookmark, Group = group }; } }
private async Task LoadPage(PageViewModel pageModel) { if (pageModel == null) { return; } // Set image if (pageModel.ImageSource == null) { pageModel.ImageSource = FileUtils.GetImageOnlineUri(FileUtils.GetPageFileName(pageModel.PageNumber)); } // Set translation if (pageModel.Translations.Count == 0) { try { if (!await HasTranslationFile()) { return; } List <QuranAyah> versesTranslation = null; using (var db = new QuranDatabaseHandler <QuranAyah>(this.TranslationFile)) { versesTranslation = await new TaskFactory().StartNew(() => db.GetVerses(pageModel.PageNumber)); } FlowDirection flowDirection = FlowDirection.LeftToRight; Regex translationFilePattern = new Regex(@"quran\.([\w-]+)\..*"); var fileMatch = translationFilePattern.Match(this.TranslationFile); if (fileMatch.Success) { try { var cultureName = fileMatch.Groups[1].Value; if (cultureName.Length > 2) { cultureName = cultureName.Substring(0, 2); } var cultureInfo = new CultureInfo(cultureName); if (cultureInfo.TextInfo.IsRightToLeft) { flowDirection = FlowDirection.RightToLeft; } } catch (Exception e) { telemetry.TrackException(e, new Dictionary <string, string> { { "Scenario", "ParseTranslationFileForFlowDirection" } }); } } List <ArabicAyah> versesArabic = null; if (SettingsUtils.Get <bool>(Constants.PREF_SHOW_ARABIC_IN_TRANSLATION)) { try { using (var dbArabic = new QuranDatabaseHandler <ArabicAyah>(FileUtils.ArabicDatabase)) { versesArabic = await new TaskFactory().StartNew(() => dbArabic.GetVerses(pageModel.PageNumber)); } } catch (Exception e) { telemetry.TrackException(e, new Dictionary <string, string> { { "Scenario", "OpenArabicDatabase" } }); } } int tempSurah = -1; for (int i = 0; i < versesTranslation.Count; i++) { var verse = versesTranslation[i]; if (verse.Surah != tempSurah) { pageModel.Translations.Add(new VerseViewModel(this) { IsHeader = true, Text = QuranUtils.GetSurahName(verse.Surah, true) }); tempSurah = verse.Surah; } string translation = verse.Text; if (QuranUtils.HasBismillah(verse.Surah) && verse.Surah != 1 && verse.Ayah == 1) { translation = _bismillahTranslation + " " + translation; } var verseViewModel = new VerseViewModel(this) { Surah = verse.Surah, Ayah = verse.Ayah, Text = translation, FlowDirection = flowDirection }; if (versesArabic != null) { verseViewModel.ArabicText = versesArabic[i].Text; } pageModel.Translations.Add(verseViewModel); } } catch (Exception e) { // Try delete bad translation file if error is "no such table: verses" try { if (e.Message.StartsWith("no such table:", StringComparison.OrdinalIgnoreCase)) { await FileUtils.SafeFileDelete(Path.Combine(FileUtils.GetQuranDatabaseDirectory(), this.TranslationFile)); } } catch { // Do nothing } pageModel.Translations.Add(new VerseViewModel(this) { Text = "Error loading translation..." }); telemetry.TrackException(e, new Dictionary <string, string> { { "Scenario", "LoadingTranslation" } }); } } return; }
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 CopyAyahToClipboard(QuranAyah ayah) { if (ayah == null) return; if (ayah.Translation != null) { QuranApp.NativeProvider.CopyToClipboard(ayah.Translation); } else if (ayah.Text != null) { QuranApp.NativeProvider.CopyToClipboard(ayah.Text); } else { await DownloadArabicSearchFile(); if (await FileUtils.HaveArabicSearchFile()) { try { using (var dbArabic = new QuranDatabaseHandler<ArabicAyah>(FileUtils.QURAN_ARABIC_DATABASE)) { var ayahSurah = await new TaskFactory().StartNew(() => dbArabic.GetVerse(ayah.Surah, ayah.Ayah)); QuranApp.NativeProvider.CopyToClipboard(ayahSurah.Text); } } catch (Exception e) { telemetry.TrackException(e, new Dictionary<string, string> { { "Scenario", "OpenArabicDatabase" } }); } } } }
public static async Task<IEnumerable<TranslationItem>> DownloadTranslations(bool useCache, string tag) { bool shouldUseCache = false; if (useCache) { var when = SettingsUtils.Get<DateTime>(Constants.PREF_LAST_UPDATED_TRANSLATIONS); var now = DateTime.Now; if (when.AddMilliseconds(Constants.MIN_TRANSLATION_REFRESH_TIME) > now) { shouldUseCache = true; } } string text = null; if (shouldUseCache) { text = loadCachedResponse(); } bool refreshed = false; if (string.IsNullOrEmpty(text)) { HttpWebRequest request = (HttpWebRequest)WebRequest.Create(WEB_SERVICE_URL); request.Method = HttpMethod.Get; var response = await request.GetResponseAsync(); using (var sr = new StreamReader(response.GetResponseStream())) { text = sr.ReadToEnd(); } if (string.IsNullOrEmpty(text)) { text = loadCachedResponse(); } if (string.IsNullOrEmpty(text)) { return null; } if (useCache) { cacheResponse(text); } refreshed = true; } TranslationsDatabaseHandler adapter = new TranslationsDatabaseHandler(); var cachedItems = adapter.GetTranslations(); List<TranslationItem> items = new List<TranslationItem>(); List<TranslationItem> updates = new List<TranslationItem>(); try { var token = JObject.Parse(text); foreach(var t in token["data"]) { TranslationItem item = new TranslationItem(); item.Id = t["id"].ToObject<int>(); item.Name = (string)t["displayName"]; item.Translator = (string)t["translator_foreign"]; if (string.IsNullOrEmpty(item.Translator)) item.Translator = (string)t["translator"]; item.LatestVersion = t["current_version"].ToObject<int>(); item.Filename = (string)t["fileName"]; item.Url = (string)t["fileUrl"]; if (item.Url.EndsWith("ext=zip", StringComparison.OrdinalIgnoreCase)) item.Compressed = true; int firstParen = item.Name.IndexOf("("); if (firstParen != -1) { item.Name = item.Name.Substring(0, firstParen - 1); } string databaseDir = FileUtils.GetQuranDatabaseDirectory(false); item.Exists = FileUtils.FileExists(FileUtils.Combine(databaseDir, item.Filename)); bool needsUpdate = false; TranslationItem localItem = cachedItems.Where(ti => ti.Id == item.Id).FirstOrDefault(); if (item.Exists) { if (localItem != null) { item.LocalVersion = localItem.LocalVersion; } else if (item.LatestVersion > -1) { needsUpdate = true; try { using (var mHandler = new QuranDatabaseHandler<QuranAyah>(item.Filename)) { item.LocalVersion = mHandler.GetTextVersion(); } } catch { Debug.WriteLine("exception opening database: " + item.Filename); } } else { needsUpdate = true; } } else if (localItem != null) { needsUpdate = true; } if (needsUpdate) { updates.Add(item); } items.Add(item); } if (refreshed) { SettingsUtils.Set<DateTime>(Constants.PREF_LAST_UPDATED_TRANSLATIONS, DateTime.Now); } if (updates.Count() > 0) { adapter.WriteTranslationUpdates(updates); } } catch (Exception je) { Debug.WriteLine("error parsing json: " + je.Message); } return items; }
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; } }