public async Task<ArgumentHandleResult> ProcessReplay(string url, bool compressed) {
var path = await LoadRemoveFile(url, extension: compressed ? @".zip" : @".acreplay");
if (string.IsNullOrWhiteSpace(path)) return ArgumentHandleResult.FailedShow;
try {
if (!FileUtils.Exists(path)) return ArgumentHandleResult.FailedShow;
} catch (Exception) {
return ArgumentHandleResult.FailedShow;
}
try {
if (!compressed) {
return await ProcessInputFile(path);
}
var filename = FileUtils.GetTempFileName(Path.GetTempPath(), @".acreplay");
/*using (var archive = ZipFile.OpenRead(path)) {
foreach (var entry in archive.Entries.Where(x => !string.Equals(x.Name, "ReadMe.txt", StringComparison.OrdinalIgnoreCase))) {
await Task.Run(() => {
entry.ExtractToFile(filename);
});
break;
}
}*/
var archive = ZipArchive.Open(path);
var acreplay = archive.Entries.FirstOrDefault(
x => x.IsDirectory == false && !string.Equals(x.Key, @"ReadMe.txt", StringComparison.OrdinalIgnoreCase));
if (acreplay == null) {
return ArgumentHandleResult.FailedShow;
}
using (var stream = acreplay.OpenEntryStream())
using (var output = new FileStream(filename, FileMode.CreateNew)) {
await stream.CopyToAsync(output);
}
try {
return await ProcessInputFile(filename);
} finally {
try {
File.Delete(filename);
} catch (Exception) {
// ignored
}
}
} finally {
try {
File.Delete(path);
} catch (Exception) {
// ignored
}
}
}