Exemplo n.º 1
0
            public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
            {
                if (reader.TokenType != JsonToken.StartObject)
                {
                    return(null);
                }

                var gid   = 0L;
                var token = default(EToken);

                reader.Read();
                do
                {
                    switch (reader.Value.ToString())
                    {
                    case "gid":
                        gid = (long)reader.ReadAsDouble().GetValueOrDefault();
                        break;

                    case "token":
                        token = EToken.Parse(reader.ReadAsString());
                        break;

                    default:
                        break;
                    }
                    reader.Read();
                } while (reader.TokenType != JsonToken.EndObject);

                return(new GalleryInfo(gid, token));
            }
Exemplo n.º 2
0
        internal Gallery(
            long gid,
            string error        = null,
            string token        = "0",
            string title        = null,
            string title_jpn    = null,
            string category     = null,
            string thumb        = null,
            string uploader     = null,
            string posted       = null,
            string filecount    = null,
            long filesize       = 0,
            bool expunged       = true,
            string rating       = null,
            string torrentcount = null,
            string[] tags       = null)
            : this(gid, EToken.Parse(token.CoalesceNullOrWhiteSpace("0")), int.Parse(filecount, NumberStyles.Integer, CultureInfo.InvariantCulture))
        {
            if (error != null)
            {
                throw new Exception(error);
            }
            Available = !expunged;
            Title     = HtmlEntity.DeEntitize(title);
            TitleJpn  = HtmlEntity.DeEntitize(title_jpn);
            if (!_CategoriesForRestApi.TryGetValue(category, out var ca))
            {
                ca = Category.Unspecified;
            }

            Category            = ca;
            Uploader            = HtmlEntity.DeEntitize(uploader);
            Posted              = DateTimeOffset.FromUnixTimeSeconds(long.Parse(posted, NumberStyles.Integer, CultureInfo.InvariantCulture));
            FileSize            = filesize;
            Expunged            = expunged;
            Rating.AverageScore = double.Parse(rating, NumberStyles.Number, CultureInfo.InvariantCulture);
            TorrentCount        = int.Parse(torrentcount, NumberStyles.Integer, CultureInfo.InvariantCulture);
            Tags     = new TagCollection(this, tags.Select(tag => Tag.Parse(tag)));
            ThumbUri = ThumbClient.FormatThumbUri(thumb);
        }
Exemplo n.º 3
0
        public static async Task <IList <Gallery> > Parse(HtmlDocument doc, CancellationToken token)
        {
            var dataRoot = doc.DocumentNode.Descendants().SingleOrDefault(node => node.HasClass("itg"));

            if (dataRoot is null)
            {
                return(Array.Empty <Gallery>());
            }
            var gInfoList    = new List <GalleryInfo>(dataRoot.ChildNodes.Count);
            var dataNodeList = new List <HtmlNode>(dataRoot.ChildNodes.Count);

            foreach (var node in dataRoot.ChildNodes)
            {
                foreach (var link in node.Descendants("a"))
                {
                    var match = _GLinkMatcher.Match(link.GetAttribute("href", ""));
                    if (!match.Success)
                    {
                        continue;
                    }
                    dataNodeList.Add(node);
                    gInfoList.Add(new GalleryInfo(long.Parse(match.Groups[1].Value), EToken.Parse(match.Groups[2].Value)));
                    break;
                }
            }
            var getG = Gallery.FetchGalleriesAsync(gInfoList);

            token.Register(getG.Cancel);
            var galleries = await getG;

            token.ThrowIfCancellationRequested();
            for (var i = 0; i < galleries.Count; i++)
            {
                _HandleAdditionalInfo(dataNodeList[i], galleries[i]);
            }
            return(galleries);
        }