Example #1
0
        internal static async Task <IEnumerable <Vote> > GetAndParseVotesAsync(VoteDumpVersion version)
        {
            var url = version == VoteDumpVersion.One ? Constants.VotesDump : Constants.VotesDump2;

            Debug.WriteLine($"Requesting Votes Dump via {url}");
            // .Net Core removed WebClient and Http/WebRequests, so we need to use HttpClient.
            var request = new HttpRequestMessage(HttpMethod.Get, new Uri(url));

            // Manually add the headers every request rather then using the default headers,
            // incase the client was rebuilt with a new name / version mid-application session
            request.Headers.Add("User-Agent", $"{VndbUtils.ClientName} (v{VndbUtils.ClientVersion})");

            var response = await VndbUtils.HttpClient.SendAsync(request);

            response.EnsureSuccessStatusCode();             // Ensure we got data

            var gzipStream = await response.Content.ReadAsStreamAsync();

            var rawContents = await VndbUtils.UnGzip(gzipStream);

            response.Dispose();
            request.Dispose();

            var results = new List <Vote>();

            var votes          = rawContents.Split(new[] { '\n' }, StringSplitOptions.RemoveEmptyEntries);
            var expectedValues = version == VoteDumpVersion.One ? 3 : 4;

            // Resharper "Loop can be converted to LINQ-expression won't work due to inline "out var" declaration
            foreach (var vote in votes)
            {
                var values = vote.Split(new [] { ' ' }, expectedValues, StringSplitOptions.RemoveEmptyEntries);

                if (values.Length != expectedValues)
                {
                    continue;
                }

                SimpleDate date = null;

                if (!UInt32.TryParse(values[0], out var vnId) ||
                    !UInt32.TryParse(values[1], out var uid) ||
                    !Byte.TryParse(values[2], out var value))
                {
                    continue;
                }

                if (version == VoteDumpVersion.Two &&
                    (date = (SimpleDate)SimpleDateConverter.ParseString(values[3])) == null)
                {
                    continue;
                }

                results.Add(new Vote(version, vnId, uid, value, date));
            }

            return(results);
        }
Example #2
0
        internal static async Task <T> GetDumpAsync <T>(String url)
            where T : class
        {
            // .Net Core removed WebClient and Http/WebRequests, so we need to use HttpClient.
            var request = new HttpRequestMessage(HttpMethod.Get, new Uri(url));

            // Manually add the headers every request rather then using the default headers,
            // incase the client was rebuilt with a new name / version mid-application session
            request.Headers.Add("User-Agent", $"{VndbUtils.ClientName} (v{VndbUtils.ClientVersion})");

            var response = await VndbUtils.HttpClient.SendAsync(request);

            response.EnsureSuccessStatusCode();             // Ensure we got data

            var gzipStream = await response.Content.ReadAsStreamAsync();

            var rawContents = await VndbUtils.UnGzip(gzipStream);

            return(JsonConvert.DeserializeObject <T>(rawContents, new JsonSerializerSettings
            {
                ContractResolver = VndbContractResolver.Instance,
            }));
        }