Exemplo n.º 1
0
        private void DataTemplateFull(View view, int i, AnimeLightEntry animeLightEntry)
        {
            view.FindViewById(Resource.Id.AnimeLightItemImgPlaceholder).Visibility = ViewStates.Gone;
            var image = view.FindViewById <ImageViewAsync>(Resource.Id.AnimeLightItemImage);

            if (image.Tag == null || (string)image.Tag != animeLightEntry.ImgUrl)
            {
                image.Into(animeLightEntry.ImgUrl, null, img => img.HandleScaling());
                image.Tag = animeLightEntry.ImgUrl;
            }
        }
Exemplo n.º 2
0
        private void DataTemplateFling(View view, int i, AnimeLightEntry animeLightEntry)
        {
            var img = view.FindViewById <ImageViewAsync>(Resource.Id.AnimeLightItemImage);

            if (img.IntoIfLoaded(animeLightEntry.ImgUrl))
            {
                view.FindViewById(Resource.Id.AnimeLightItemImgPlaceholder).Visibility = ViewStates.Gone;
            }
            else
            {
                img.Visibility = ViewStates.Invisible;
                view.FindViewById(Resource.Id.AnimeLightItemImgPlaceholder).Visibility = ViewStates.Visible;
            }
        }
        private View GetTemplateDelegate(int i, AnimeLightEntry animeLightEntry, View arg3)
        {
            var view = arg3;

            if (view == null)
            {
                view        = Activity.LayoutInflater.Inflate(Resource.Layout.AnimeLightItem, null);
                view.Click += LightItemOnClick;
            }
            view.Tag = animeLightEntry.Wrap();

            view.FindViewById <TextView>(Resource.Id.AnimeLightItemTitle).Text = animeLightEntry.Title;
            view.FindViewById <ImageViewAsync>(Resource.Id.AnimeLightItemImage).Into(animeLightEntry.ImgUrl, null, img => img.HandleScaling());

            return(view);
        }
Exemplo n.º 4
0
 private void DataTemplateBasic(View view, int i, AnimeLightEntry animeLightEntry)
 {
     view.FindViewById <TextView>(Resource.Id.AnimeLightItemTitle).Text = animeLightEntry.Title;
     view.FindViewById <TextView>(Resource.Id.AnimeLightItemNotes).Text = animeLightEntry.Notes;
 }
Exemplo n.º 5
0
        public async Task <CharacterDetailsData> GetCharacterDetails(bool force = false)
        {
            var possibleData = force ? null : await DataCache.RetrieveData <CharacterDetailsData>(_id.ToString(), "character_details", 30);

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

            var output = new CharacterDetailsData();
            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[1].ChildNodes.Where(node => node.Name == "td").ToList();
                var leftColumn = columns[0];
                var tables     = leftColumn.Descendants("table");
                foreach (var table in tables)
                {
                    foreach (var descendant in table.Descendants("tr"))
                    {
                        var links = descendant.Descendants("a").ToList();
                        if (links[0].Attributes["href"].Value.StartsWith("/anime"))
                        {
                            var curr = new AnimeLightEntry {
                                IsAnime = true
                            };
                            curr.Id = int.Parse(links[0].Attributes["href"].Value.Split('/')[2]);
                            var img = links[0].Descendants("img").First().Attributes["src"].Value;
                            if (!img.Contains("questionmark"))
                            {
                                img         = Regex.Replace(img, @"\/r\/\d+x\d+", "");
                                curr.ImgUrl = img.Substring(0, img.IndexOf('?'));
                            }
                            curr.Title = WebUtility.HtmlDecode(links[1].InnerText.Trim());
                            output.Animeography.Add(curr);
                        }
                        else
                        {
                            var curr = new AnimeLightEntry {
                                IsAnime = false
                            };
                            curr.Id = int.Parse(links[0].Attributes["href"].Value.Split('/')[2]);
                            var img = links[0].Descendants("img").First().Attributes["src"].Value;
                            if (!img.Contains("questionmark"))
                            {
                                img         = Regex.Replace(img, @"\/r\/\d+x\d+", "");
                                curr.ImgUrl = img.Substring(0, img.IndexOf('?'));
                            }
                            curr.Title = WebUtility.HtmlDecode(links[1].InnerText.Trim());
                            output.Mangaography.Add(curr);
                        }
                    }
                }
                var image = leftColumn.Descendants("img").First();
                if (image.Attributes.Contains("alt"))
                {
                    output.ImgUrl = image.Attributes["src"].Value;
                }

                output.Name     = WebUtility.HtmlDecode(doc.DocumentNode.Descendants("h1").First().InnerText).Trim().Replace("  ", " "); //because mal tends to leave two spaces there and there's pretty hardcore guy on github who can spot such things... props ;d
                output.Content  = output.SpoilerContent = "";
                output.Content += WebUtility.HtmlDecode(leftColumn.LastChild.InnerText.Trim()) + "\n\n";
                foreach (var node in columns[1].ChildNodes)
                {
                    if (node.Name == "#text")
                    {
                        output.Content += WebUtility.HtmlDecode(node.InnerText.Trim());
                    }
                    else if (node.Name == "br" && !output.Content.EndsWith("\n\n"))
                    {
                        output.Content += "\n";
                    }
                    else if (node.Name == "div" && node.Attributes.Contains("class") && node.Attributes["class"].Value == "spoiler")
                    {
                        output.SpoilerContent += WebUtility.HtmlDecode(node.InnerText.Trim()) + "\n\n";
                    }
                    else if (node.Name == "table")
                    {
                        foreach (var descendant in node.Descendants("tr"))
                        {
                            var current = new AnimeStaffPerson();
                            var img     = descendant.Descendants("img").First();
                            var imgUrl  = img.Attributes["src"].Value;
                            if (!imgUrl.Contains("questionmark"))
                            {
                                var pos = imgUrl.LastIndexOf("v");
                                if (pos != -1)
                                {
                                    imgUrl = imgUrl.Remove(pos, 1);
                                }
                            }
                            current.ImgUrl = imgUrl;
                            var info = descendant.Descendants("td").Last();
                            current.Id    = info.ChildNodes[0].Attributes["href"].Value.Split('/')[2];
                            current.Name  = WebUtility.HtmlDecode(info.ChildNodes[0].InnerText.Trim());
                            current.Notes = info.ChildNodes[2].InnerText;
                            output.VoiceActors.Add(current);
                        }
                    }
                }
                output.Content        = output.Content.Trim();
                output.SpoilerContent = output.SpoilerContent.Trim();
            }
            catch (Exception)
            {
                //html
            }

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

            return(output);
        }
Exemplo n.º 6
0
        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);
        }