private void LoadJuz2List() { Uri[] images = new Uri[] { new Uri("ms-appx:///Assets/Images/hizb_full.png"), new Uri("ms-appx:///Assets/Images/hizb_quarter.png"), new Uri("ms-appx:///Assets/Images/hizb_half.png"), new Uri("ms-appx:///Assets/Images/hizb_threequarters.png") }; string[] quarters = QuranUtils.GetSurahQuarters(); int juz = 0; for (int i = 0; i < (8 * Constants.JUZ2_COUNT); i++) { if (i % 8 == 0) { juz++; } int[] pos = QuranUtils.QUARTERS[i]; int page = QuranUtils.GetPageFromAyah(pos[0], pos[1]); string verseString = Resources.quran_ayah + " " + pos[1]; Juz.Add(new ItemViewModel { Id = juz.ToString(CultureInfo.InvariantCulture), Group = string.Format("{0} {1}", Resources.quran_juz2, juz), Title = quarters[i], Details = QuranUtils.GetSurahName(pos[0], true) + ", " + verseString, PageNumber = page, Image = new BitmapImage(images[i % 4]), ItemType = ItemViewModelType.Surah }); } }
public override Task Initialize() { for (int i = 1; i < Constants.SURAS_COUNT; i++) { Surahs.Add(new AudioSurahViewModel(Reciter, i) { SurahName = QuranUtils.GetSurahName(i, true) }); } return(Refresh()); }
private void LoadSuraList() { for (int surah = 1; surah <= Constants.SURAS_COUNT; surah++) { string title = QuranUtils.GetSurahName(surah, true); Surahs.Add(new ItemViewModel { Id = surah.ToString(CultureInfo.InvariantCulture), Title = title, Details = QuranUtils.GetSuraListMetaString(surah), PageNumber = QuranUtils.SURA_PAGE_START[surah - 1], ItemType = ItemViewModelType.Surah, Group = QuranUtils.GetJuzTitle() + " " + QuranUtils.GetJuzFromAyah(surah, 1) }); } }
public override Task Initialize() { for (int i = 1; i < Constants.SURAS_COUNT; i++) { AudioSurahViewModel surah; surah = AudioDownloadCacheUtils.GetSurahViewModel(Reciter, i); if (surah == null) { surah = new AudioSurahViewModel(Reciter, i) { SurahName = QuranUtils.GetSurahName(i, true) }; } Surahs.Add(surah); } return(Refresh()); }
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); }
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 }); } }
public JumpContentDialog() { this.InitializeComponent(); for (int i = Constants.SURA_FIRST; i <= Constants.SURA_LAST; i++) { cbSurahs.Items.Add(i.ToString(CultureInfo.InvariantCulture) + " - " + QuranUtils.GetSurahName(i, false)); } }
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; }