Пример #1
0
        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
                });
            }
        }
Пример #2
0
 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());
 }
Пример #3
0
 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)
         });
     }
 }
Пример #4
0
        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());
        }
Пример #5
0
        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);
        }
Пример #6
0
        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
                });
            }
        }
Пример #7
0
 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));
     }
 }
Пример #8
0
        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;
        }