Example #1
0
        private async Task LoadTSN(string tsn)
        {
            var hierarchy = await RequestManager.RequestFullHierarchy(tsn);

            var currentTaxonHierarchy = hierarchy.HierarchyList.Where(x => x.TSN.Equals(tsn)).FirstOrDefault();

            var currentTaxon = await RequestManager.RequestFullRecord(tsn);

            var image = await RequestManager.RequestWikispeciesImage(currentTaxonHierarchy.TaxonName);

            var imageSource = image.Query.Pages.FirstOrDefault().Value.Thumbnail?.Source;

            var children  = new List <HierarchyItem>();
            var ascending = new List <HierarchyItem>();

            children  = hierarchy.HierarchyList.Where(hierarchyItem => Rank.NumRankOf(currentTaxonHierarchy.RankName) < Rank.NumRankOf(hierarchyItem.RankName)).ToList();
            ascending = hierarchy.HierarchyList.Where(hierarchyItem => Rank.NumRankOf(currentTaxonHierarchy.RankName) >= Rank.NumRankOf(hierarchyItem.RankName)).ToList();

            await DispatcherUtil.Dispatch(() =>
            {
                TheList.SetBinding(ListView.ItemsSourceProperty, new Binding {
                    Source = children
                });
                if (!children.Any())
                {
                    DescendingGrid.Visibility = Visibility.Collapsed;
                }

                TaxonName.Text  = currentTaxonHierarchy.TaxonName;
                CommonName.Text = currentTaxon.GetCommonName();
                RankName.Text   = currentTaxonHierarchy.RankName;

                if (string.IsNullOrWhiteSpace(currentTaxon.Author.Authorship))
                {
                    AuthorshipLabel.Visibility = Visibility.Collapsed;
                    AuthorshipEntry.Visibility = Visibility.Collapsed;
                }
                else
                {
                    AuthorshipLabel.Visibility = Visibility.Visible;
                    AuthorshipEntry.Visibility = Visibility.Visible;
                    AuthorName.Text            = currentTaxon.Author.Authorship;
                }

                if (imageSource != null)
                {
                    TaxonImage.Source = new BitmapImage(new Uri(imageSource, UriKind.Absolute));
                }

                var synonyms = currentTaxon.SynonymList.Synonyms
                               .Where(x => x != null)
                               .Select(x => new SynonymItem(x));

                var synonymsCollection = new ObservableCollection <SynonymItem>(synonyms);

                if (synonymsCollection.Count == 0)
                {
                    SynonymsList.Visibility   = Visibility.Collapsed;
                    SynonymsButton.Visibility = Visibility.Collapsed;
                }
                else
                {
                    SynonymsList.Visibility   = Visibility.Visible;
                    SynonymsButton.Visibility = Visibility.Visible;
                    SynonymsList.SetBinding(ListBox.ItemsSourceProperty, new Binding {
                        Source = synonymsCollection
                    });
                }

                var pathItems = ascending.OrderBy(x => Rank.Ranks.ToList().IndexOf(x.RankName)).ToList();
                TaxonPath.SetBinding(ListView.ItemsSourceProperty, new Binding {
                    Source = pathItems
                });

                var expertsList = currentTaxon.ExpertList.Experts.Where(x => x != null).ToList();
                Experts.SetBinding(ListView.ItemsSourceProperty, new Binding {
                    Source = expertsList
                });
                if (expertsList.Any())
                {
                    ExpertsLabel.Visibility = Visibility.Visible;
                }

                var otherSourcesList = currentTaxon.OtherSourcesList.OtherSources.Where(x => x != null && !string.IsNullOrEmpty(x.SourceComment) && !string.IsNullOrEmpty(x.Source)).ToList();
                OtherSources.SetBinding(ListView.ItemsSourceProperty, new Binding {
                    Source = otherSourcesList
                });
                if (otherSourcesList.Any())
                {
                    OtherSourcesLabel.Visibility = Visibility.Visible;
                    OtherSources.Visibility      = Visibility.Visible;
                }
            });
        }