Example #1
0
        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);
        }
Example #2
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);
        }
Example #3
0
        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;
            }
        }