Exemplo n.º 1
0
 /// <summary>
 /// Create a valid, empty shell of a document, suitable for adding more elements to.
 /// </summary>
 /// <param name="baseUri">baseUri of document</param>
 /// <returns>document with html, head, and body elements.</returns>
 public static Document CreateShell(string baseUri)
 {
     Validate.NotNull(baseUri);
     Document doc = new Supremes.Nodes.Document(baseUri);
     Element html = doc.AppendElement("html");
     html.AppendElement("head");
     html.AppendElement("body");
     return doc;
 }
Exemplo n.º 2
0
        /*
         * ============================================
         * Protected
         * ============================================
         */

        override protected bool Parse(Supremes.Nodes.Document doc)
        {
            if (string.IsNullOrEmpty(this.Url))
            {
                return(false);
            }

            string url = this.Url;

            if (url.EndsWith("/"))
            {
                url = url.Substring(0, url.Length - 1);
            }

            int    lastSlash = url.LastIndexOf('/');
            string imageId   = url.Substring(lastSlash + 1);

            Supremes.Nodes.Element tagList       = doc.Select("#quicktag1_" + imageId).First;
            Supremes.Nodes.Element seriesList    = doc.Select("#quicktag2_" + imageId).First;
            Supremes.Nodes.Element characterList = doc.Select("#quicktag4_" + imageId).First;
            Supremes.Nodes.Element artistList    = doc.Select("#quicktag3_" + imageId).First;

            // Get tags
            this.AddTags(tagList);
            this.AddTags(seriesList, "series");
            this.AddTags(characterList, "character");
            this.AddTags(artistList, "creator");

            // Get rating
            if (Properties.Settings.Default.AddRating)
            {
                Supremes.Nodes.Element rating = doc.Select("#rating" + imageId).First;

                if (rating != null && rating.Text != "N/A")
                {
                    this.AddTag(rating.Text, "rating");
                }
            }

            // Get informations
            Supremes.Nodes.Element imageBlock = doc.Select("#content .image_block").First;

            if (imageBlock == null)
            {
                return(true);
            }

            Supremes.Nodes.Element  imageLink = imageBlock.Select(".thumb > a.thumb_image[href]").First;
            Supremes.Nodes.Elements metas     = imageBlock.Select(".meta > dl").Select("> *");

            if (imageLink != null)
            {
                this.full = URL + imageLink.Attr("href");
            }

            for (byte i = 0; i < metas.Count; i += 2)
            {
                if (i + 1 >= metas.Count)
                {
                    break;
                }

                Supremes.Nodes.Element dt = metas[i];
                Supremes.Nodes.Element dd = metas[i + 1];

                if (dt.Text == "File size:")
                {
                    this.size = this.KbOrMbToBytes(dd.Text);
                }
                else if (dt.Text == "Dimensions:")
                {
                    string dimensions = dd.Text;

                    if (dimensions.Contains("("))
                    {
                        dimensions = dimensions.Substring(0, dimensions.IndexOf(" "));
                    }

                    this.parseResolution(dimensions);
                }
            }

            return(true);
        }
Exemplo n.º 3
0
        /*
         * ============================================
         * Protected
         * ============================================
         */

        override protected bool Parse(Supremes.Nodes.Document doc)
        {
            Supremes.Nodes.Element tagList = doc.Select("#tag-list").First;

            if (tagList == null)
            {
                return(false);
            }

            // Get tags
            this.AddTags(tagList, "copyright", "series");
            this.AddTags(tagList, "character", "character");
            this.AddTags(tagList, "artist", "creator");
            this.AddTags(tagList, "general");
            this.AddTags(tagList, "metadata", "meta");

            // Get rating
            if (Properties.Settings.Default.AddRating)
            {
                this.GetRating(doc, "#tag-list li");
            }

            // Get informations
            Supremes.Nodes.Elements lis = tagList.Select("li");

            foreach (Supremes.Nodes.Element li in lis)
            {
                string content = li.Html;

                if (content == null)
                {
                    continue;
                }

                content = content.Trim();

                if (content.Length < 1)
                {
                    continue;
                }

                if (content.StartsWith("Size:"))
                {
                    int end = content.IndexOf('<');

                    if (end > SIZE_SUBSTR_START)
                    {
                        content = content.Substring(SIZE_SUBSTR_START, end - SIZE_SUBSTR_START);
                        string[] parts = content.Trim().Split('x');

                        if (parts.Length == 2)
                        {
                            int.TryParse(parts[0], out this.width);
                            int.TryParse(parts[1], out this.height);
                        }
                    }
                }

                Supremes.Nodes.Element link = li.Select("> a").First;

                if (link != null && link.Text == "Original image")
                {
                    this.full = link.Attr("href");
                }
            }

            return(true);
        }
Exemplo n.º 4
0
        /*
         * ============================================
         * Protected
         * ============================================
         */

        override protected bool Parse(Supremes.Nodes.Document doc)
        {
            Supremes.Nodes.Elements tagRows = doc.Select("ul#tags li");

            if (tagRows == null)
            {
                return(false);
            }

            // Get tags
            foreach (Supremes.Nodes.Element tagRow in tagRows)
            {
                Supremes.Nodes.Elements link = tagRow.Select("a");

                if (link == null)
                {
                    continue;
                }

                if (tagRow.Text.Length < 1)
                {
                    continue;
                }

                string value = link.Text.Replace(tagRow.Text, "").Trim();

                if (value.Length < 1)
                {
                    continue;
                }

                string nameSpace = tagRow.Text.Replace(value, "").Trim();

                switch (nameSpace)
                {
                case "Artiste":
                    nameSpace = "creator";
                    break;

                case "Studio":
                    nameSpace = "series";
                    break;

                case "Game":
                    nameSpace = "series";
                    break;

                case "Character":
                    nameSpace = "character";
                    break;

                case "Source":
                    nameSpace = "series";
                    break;

                default:
                    nameSpace = null;
                    break;
                }

                this.AddTag(value.ToLower(), nameSpace);
            }

            // Get informations
            Supremes.Nodes.Element  imageLink    = doc.Select("#large > a.preview").First;
            Supremes.Nodes.Element  imageElement = doc.Select("#large > img").First;
            Supremes.Nodes.Elements paragraphs   = doc.Select("#large > p");

            if (imageLink != null)
            {
                this.full = imageLink.Attr("href");
            }
            else if (imageElement != null)
            {
                this.full = imageElement.Attr("src");
            }

            Regex resolutionnRegex = new Regex(@"\d+x\d+", RegexOptions.Compiled | RegexOptions.IgnoreCase);

            foreach (Supremes.Nodes.Element paragraph in paragraphs)
            {
                MatchCollection resolutionMatches = resolutionnRegex.Matches(paragraph.OwnText);

                if (resolutionMatches.Count == 1)
                {
                    GroupCollection groups = resolutionMatches[0].Groups;
                    this.parseResolution(groups[0].Value);
                }

                Supremes.Nodes.Element span = paragraph.Select("> span").First;

                if (span != null && !string.IsNullOrWhiteSpace(span.OwnText))
                {
                    this.size = this.KbOrMbToBytes(span.OwnText);
                }
            }

            return(true);
        }
Exemplo n.º 5
0
        /*
         * ============================================
         * Protected
         * ============================================
         */

        override protected bool Parse(Supremes.Nodes.Document doc)
        {
            Supremes.Nodes.Element tagSidebar = doc.Select("#tag-sidebar").First;

            // Get tags
            if (tagSidebar != null)
            {
                this.AddTags(tagSidebar, "copyright", "series");
                this.AddTags(tagSidebar, "character", "character");
                this.AddTags(tagSidebar, "artist", "creator");
                this.AddTags(tagSidebar, "medium", "meta");
                this.AddTags(tagSidebar, "general");
            }

            // Get details
            Supremes.Nodes.Element stats = doc.Select("#stats > ul").First;

            if (stats != null)
            {
                Supremes.Nodes.Elements listItems = stats.Select("li");

                foreach (Supremes.Nodes.Element li in listItems)
                {
                    string content = li.Html;

                    if (content == null)
                    {
                        continue;
                    }

                    content = content.Trim();

                    if (content.StartsWith("Original:"))
                    {
                        Supremes.Nodes.Element full = li.Select("a").First;

                        int space = full.Text.IndexOf(' ');

                        if (full != null)
                        {
                            string size       = full.Text.Substring(space + 1);
                            string dimensions = full.Text.Substring(0, space);

                            size = size.Substring(1, size.Length - 2);
                            string[] parts = dimensions.Split('x');

                            this.full = full.Attr("href");
                            this.size = this.KbOrMbToBytes(size);

                            if (parts.Length == 2)
                            {
                                int.TryParse(parts[0], out this.width);
                                int.TryParse(parts[1], out this.height);
                            }
                        }
                    }
                    else if (content.StartsWith("Rating:"))
                    {
                        this.rating = content.Substring("Rating: ".Length);
                    }
                }
            }

            return(true);
        }