private void DataTemplateFling(View view, int i, ShowCharacterPair showCharacterPair)
        {
            var img = view.FindViewById <ImageViewAsync>(Resource.Id.AnimeLightItemImage);

            if (img.IntoIfLoaded(showCharacterPair.AnimeLightEntry.ImgUrl))
            {
                view.FindViewById(Resource.Id.AnimeLightItemImgPlaceholder).Visibility = ViewStates.Gone;
            }
            else
            {
                img.Visibility = ViewStates.Invisible;
                view.FindViewById(Resource.Id.AnimeLightItemImgPlaceholder).Visibility = ViewStates.Visible;
            }


            img = view.FindViewById <ImageViewAsync>(Resource.Id.FavouriteItemImage);
            if (img.IntoIfLoaded(showCharacterPair.AnimeCharacter.ImgUrl))
            {
                view.FindViewById(Resource.Id.FavouriteItemImgPlaceholder).Visibility = ViewStates.Gone;
            }
            else
            {
                img.Visibility = ViewStates.Invisible;
                view.FindViewById(Resource.Id.FavouriteItemImgPlaceholder).Visibility = ViewStates.Visible;
            }
        }
        private void DataTemplateBasic(View view, int i, ShowCharacterPair showCharacterPair)
        {
            view.FindViewById <TextView>(Resource.Id.AnimeLightItemTitle).Text =
                showCharacterPair.AnimeLightEntry.Title;
            view.FindViewById(Resource.Layout.AnimeLightItem).Tag = showCharacterPair.AnimeLightEntry.Wrap();

            view.FindViewById <TextView>(Resource.Id.FavouriteItemName).Text =
                showCharacterPair.AnimeCharacter.Name;
            view.FindViewById <TextView>(Resource.Id.FavouriteItemRole).Text =
                showCharacterPair.AnimeCharacter.Notes;
            view.FindViewById(Resource.Layout.FavouriteItem).Tag = showCharacterPair.AnimeCharacter.Wrap();
        }
        private void DataTemplateFull(View view, int i, ShowCharacterPair showCharacterPair)
        {
            var image = view.FindViewById <ImageViewAsync>(Resource.Id.AnimeLightItemImage);

            if (image.Tag == null || (string)image.Tag != showCharacterPair.AnimeLightEntry.ImgUrl)
            {
                image.Into(showCharacterPair.AnimeLightEntry.ImgUrl);
            }
            view.FindViewById(Resource.Id.AnimeLightItemImgPlaceholder).Visibility = ViewStates.Gone;


            image = view.FindViewById <ImageViewAsync>(Resource.Id.FavouriteItemImage);
            if (image.Tag == null || (string)image.Tag != showCharacterPair.AnimeCharacter.ImgUrl)
            {
                image.Into(showCharacterPair.AnimeCharacter.ImgUrl, null, img => img.HandleScaling());
            }
            view.FindViewById(Resource.Id.FavouriteItemImgPlaceholder).Visibility = ViewStates.Gone;
        }
        public async Task <StaffDetailsData> GetStaffDetails(bool force)
        {
            var possibleData = force ? null : await DataCache.RetrieveData <StaffDetailsData>(_id.ToString(), "staff_details", 30);

            if (possibleData != null)
            {
                return(possibleData);
            }

            var output = new StaffDetailsData();
            var raw    = await GetRequestResponse();

            if (string.IsNullOrEmpty(raw))
            {
                return(output);
            }
            var doc = new HtmlDocument();

            doc.LoadHtml(raw);

            output.Id = _id;
            try
            {
                var columns =
                    doc.DocumentNode.Descendants("table").First().ChildNodes[0].ChildNodes.Where(
                        node => node.Name == "td").ToList();
                var leftColumn = columns[0];
                var image      = leftColumn.Descendants("img").FirstOrDefault();
                if (image != null && image.Attributes.Contains("alt"))
                {
                    output.ImgUrl = image.Attributes["src"].Value;
                }

                output.Name = WebUtility.HtmlDecode(doc.DocumentNode.Descendants("h1").First().InnerText.Trim());

                bool recording     = false;
                var  currentString = "";
                int  i             = 0;
                foreach (var child in leftColumn.ChildNodes)
                {
                    if (!recording)
                    {
                        if (child.Attributes.Contains("class") &&
                            child.Attributes["class"].Value.Trim() == "js-sns-icon-container icon-block")
                        {
                            recording = true;
                        }
                        else
                        {
                            continue;
                        }
                    }

                    if (child.Attributes.Contains("class") &&
                        child.Attributes["class"].Value == "spaceit_pad")
                    {
                        output.Details.Add(WebUtility.HtmlDecode(child.InnerText.Trim()));
                        currentString = "";
                        i             = 0;
                    }
                    else if (!string.IsNullOrWhiteSpace(child.InnerText))
                    {
                        currentString += WebUtility.HtmlDecode(child.InnerText.Trim()) + " ";
                        i++;
                        if (i == 2)
                        {
                            output.Details.Add(currentString);
                            currentString = "";
                            i             = 0;
                        }
                    }

                    if (child.Name == "div" && !child.Attributes.Contains("class"))
                    {
                        break;
                    }
                }

                foreach (var table in columns[1].Descendants("table").Take(2))
                {
                    try
                    {
                        foreach (var row in table.Descendants("tr"))
                        {
                            var tds = row.Descendants("td").ToList();
                            if (tds.Count == 4)
                            {
                                var current = new ShowCharacterPair();
                                var show    = new AnimeLightEntry();
                                var img     = tds[0].Descendants("img").First().Attributes["data-src"].Value;
                                if (!img.Contains("questionmark"))
                                {
                                    img         = Regex.Replace(img, @"\/r\/\d+x\d+", "");
                                    show.ImgUrl = img.Substring(0, img.IndexOf('?'));
                                }
                                var link = tds[1].Descendants("a").First();
                                show.IsAnime            = true;
                                show.Id                 = int.Parse(link.Attributes["href"].Value.Split('/')[4]);
                                show.Title              = WebUtility.HtmlDecode(link.InnerText.Trim());
                                current.AnimeLightEntry = show;

                                var character = new AnimeCharacter();
                                character.FromAnime = true;
                                character.ShowId    = show.Id.ToString();
                                link            = tds[2].Descendants("a").First();
                                character.Id    = link.Attributes["href"].Value.Split('/')[4];
                                character.Name  = WebUtility.HtmlDecode(link.InnerText.Trim());
                                character.Notes = WebUtility.HtmlDecode(tds[2].Descendants("div").Last().InnerText);

                                img = tds[3].Descendants("img").First().Attributes["data-src"].Value;
                                if (!img.Contains("questionmark"))
                                {
                                    img = Regex.Replace(img, @"\/r\/\d+x\d+", "");
                                    character.ImgUrl = img.Substring(0, img.IndexOf('?'));
                                }

                                current.AnimeCharacter = character;
                                output.ShowCharacterPairs.Add(current);
                            }
                            else
                            {
                                var show = new AnimeLightEntry();
                                var img  = tds[0].Descendants("img").First().Attributes["data-src"].Value;
                                if (!img.Contains("questionmark"))
                                {
                                    img         = Regex.Replace(img, @"\/r\/\d+x\d+", "");
                                    show.ImgUrl = img.Substring(0, img.IndexOf('?'));
                                }
                                var link = tds[1].Descendants("a").First();
                                show.IsAnime = !link.Attributes["href"].Value.Contains("/manga/");
                                show.Id      = int.Parse(link.Attributes["href"].Value.Split('/')[4]);
                                show.Title   = WebUtility.HtmlDecode(link.InnerText.Trim());
                                show.Notes   =
                                    WebUtility.HtmlDecode(
                                        tds[1].Descendants("div").Last().InnerText.Replace("add", "").Trim());

                                output.StaffPositions.Add(show);
                            }
                        }
                    }
                    catch
                    (Exception e)
                    {
                        //htaml
                    }
                }
            }
            catch (Exception)
            {
                //sorcery
            }

            DataCache.SaveData(output, _id.ToString(), "staff_details");

            return(output);
        }