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; }
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); }
/// <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);