/// <summary>
        /// get centuries with published poets
        /// </summary>
        /// <returns></returns>
        public async Task <RServiceResult <GanjoorCenturyViewModel[]> > GetCenturiesAsync()
        {
            var poets       = (await GetPoets(true, false)).Result;
            var dbCenturies = await _context.GanjoorCenturies.AsNoTracking().Include(c => c.Poets).OrderBy(c => c.HalfCenturyOrder).ToListAsync();

            List <GanjoorCenturyViewModel> res = new List <GanjoorCenturyViewModel>();

            var pinned = await _context.GanjoorPoets.AsNoTracking().Where(p => p.PinOrder != 0).OrderBy(p => p.PinOrder).ToListAsync();

            if (pinned.Count > 0)
            {
                GanjoorCenturyViewModel model = new GanjoorCenturyViewModel()
                {
                    Id               = 0,
                    Name             = "",
                    HalfCenturyOrder = 0,
                    ShowInTimeLine   = false,
                    StartYear        = 0,
                    EndYear          = 0,
                    Poets            = new List <GanjoorPoetViewModel>()
                };
                foreach (var poet in pinned)
                {
                    model.Poets.Add(poets.Where(p => p.Id == poet.Id).Single());
                }
                res.Add(model);
            }
            var fa = new CultureInfo("fa-IR");

            foreach (var dbCentury in dbCenturies)
            {
                GanjoorCenturyViewModel model = new GanjoorCenturyViewModel()
                {
                    Id               = dbCentury.Id,
                    Name             = dbCentury.Name,
                    HalfCenturyOrder = dbCentury.HalfCenturyOrder,
                    ShowInTimeLine   = dbCentury.ShowInTimeLine,
                    StartYear        = dbCentury.StartYear,
                    EndYear          = dbCentury.EndYear,
                    Poets            = new List <GanjoorPoetViewModel>()
                };

                foreach (var poet in dbCentury.Poets)
                {
                    model.Poets.Add(poets.Where(p => p.Id == poet.PoetId).Single());
                }

                model.Poets.Sort((a, b) => fa.CompareInfo.Compare(a.Nickname, b.Nickname));//sort each century poets alphabetically

                res.Add(model);
            }

            return(new RServiceResult <GanjoorCenturyViewModel[]>(res.ToArray()));
        }
Пример #2
0
        private async Task _PreparePoetGroups()
        {
            var response = await _httpClient.GetAsync($"{APIRoot.Url}/api/ganjoor/centuries");

            if (!response.IsSuccessStatusCode)
            {
                LastError = JsonConvert.DeserializeObject <string>(await response.Content.ReadAsStringAsync());
                return;
            }
            var poetGroups = JArray.Parse(await response.Content.ReadAsStringAsync()).ToObject <List <GanjoorCenturyViewModel> >();

            PoetGroupsWithBirthPlaces = new List <GanjoorCenturyViewModel>();
            PoetGroupsWithBirthPlaces.Add
            (
                new GanjoorCenturyViewModel()
            {
                Id             = 0,
                Name           = "همهٔ اعصار",
                ShowInTimeLine = true,
                Poets          = await _PreparePoets()
            }
            );
            GanjoorCenturyViewModel prePoetGroup = null;

            foreach (var poetGroup in poetGroups)
            {
                if (poetGroup.Id == 0)
                {
                    continue;
                }
                poetGroup.Poets = poetGroup.Poets.Where(p => !string.IsNullOrEmpty(p.BirthPlace)).ToList();
                if (poetGroup.Poets.Count > 0)
                {
                    foreach (var poet in poetGroup.Poets)
                    {
                        poet.ImageUrl = $"{APIRoot.InternetUrl}{poet.ImageUrl}";
                    }
                    if (!poetGroup.ShowInTimeLine && prePoetGroup != null)
                    {
                        prePoetGroup.Poets.AddRange(poetGroup.Poets);
                    }
                    else
                    {
                        PoetGroupsWithBirthPlaces.Add(poetGroup);
                        prePoetGroup = poetGroup;
                    }
                }
            }
        }