/// <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())); }
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; } } } }