public async Task <GZipStream> GetNationStatesDumpStream(NationStatesDumpType type) { var eventId = LogEventIdProvider.GetRandomLogEventId(); try { string url = "https://www.nationstates.net/pages/"; if (type == NationStatesDumpType.Nations) { url += "nations.xml.gz"; _logger.LogInformation(eventId, LogMessageBuilder.Build(eventId, "Retrieval of latest Nation dump requested")); } else if (type == NationStatesDumpType.Regions) { url += "regions.xml.gz"; _logger.LogInformation(eventId, LogMessageBuilder.Build(eventId, "Retrieval of latest Region dump requested")); } else { throw new NotImplementedException($"Retrieval for DumpType {type} not implemented yet."); } var stream = await ExecuteRequestWithStreamResult(url, eventId); var compressed = new GZipStream(stream, CompressionMode.Decompress); return(compressed); } finally { LogEventIdProvider.ReleaseEventId(eventId); } }
private async Task WriteDumpToLocalFileSystemAsync(NationStatesDumpType dumpType, Stream stream) { if (!(dumpType == NationStatesDumpType.Nations || dumpType == NationStatesDumpType.Regions)) { throw new ArgumentException("Unknown DumpType"); } string fileName = dumpType == NationStatesDumpType.Nations ? nationFileName : regionFileName; using (var fs = new FileStream(fileName, FileMode.Create, FileAccess.Write)) { using (var newCompressed = new GZipStream(fs, CompressionMode.Compress)) { await stream.CopyToAsync(newCompressed); } } }