Exemplo n.º 1
0
 internal Vote(VoteDumpVersion version, UInt32 visualNovelId, UInt32 userId, Byte value, SimpleDate addedOn)
 {
     this.Version       = version;
     this.VisualNovelId = visualNovelId;
     this.UserID        = userId;
     this.Value         = value;
     this.AddedOn       = addedOn;
 }
Exemplo n.º 2
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);
        }
Exemplo n.º 3
0
 /// <summary>
 ///		Downloads and PArses the Votes Dump from Vndb
 /// </summary>
 /// <param name="version">The version of the Votes Dump to grab</param>
 /// <returns>An <see cref="IEnumerable{T}"/> of <see cref="Vote"/></returns>
 /// <exception cref="HttpRequestException">Occurs when the votes.gz file returns a non-success status</exception>
 public static async Task <IEnumerable <Vote> > GetVotesDumpAsync(VoteDumpVersion version = VoteDumpVersion.Two)
 => await VndbUtils.GetAndParseVotesAsync(version).ConfigureAwait(false);