/Repository/Tools.cs |
@@ -74,7 +74,7 @@ |
/// <param name="release">the release to list files for</param> |
/// <param name="timeout">the timeout connecting to the Stitch repository</param> |
/// <returns>a list of Corrade files contained in the repository</returns> |
public static IEnumerable<KeyValuePair<string, string>> GetReleaseFileHashes(string server, Version release, int timeout) |
public static async Task<IEnumerable<KeyValuePair<string, string>>> GetReleaseFileHashes(string server, Version release, int timeout) |
{ |
using (var client = new Client(new NetworkCredential()) |
{ |
@@ -86,7 +86,8 @@ |
STITCH_CONSTANTS.PROGRESSIVE_PATH) |
}) |
{ |
return client |
Console.WriteLine($"{release.Major}.{release.Minor}"); |
return (await client |
.List( |
string.Join( |
Constants.DIRECTORY_SEPARATOR, |
@@ -93,22 +94,34 @@ |
$"{release.Major}.{release.Minor}", |
STITCH_CONSTANTS.UPDATE_DATA_PATH), |
Constants.DavDepth.ALL) |
.Result |
.AsParallel() |
.Where(item => !item.IsCollection) |
.ToDictionary(o => string.Join(Constants.DIRECTORY_SEPARATOR, |
o.Href.PathSplit(Constants.DIRECTORY_SEPARATOR.First()) |
.Select(part => WebExtensions.URLUnescapeDataString( |
part.Trim(Constants.DIRECTORY_SEPARATOR.First()) |
) |
) |
.Where(part => !string.IsNullOrEmpty(part)) |
.SequenceExceptAny(new[] { |
) |
.Select(async o => |
{ |
using (var memoryStream = new MemoryStream()) |
{ |
using (var stream = client.Download(o.Href).Result) |
{ |
await stream.CopyToAsync(memoryStream); |
} |
return new KeyValuePair<string, string>( |
string.Join(Constants.DIRECTORY_SEPARATOR, |
o.Href.PathSplit(Constants.DIRECTORY_SEPARATOR.First()) |
.Select(part => |
WebExtensions.URLUnescapeDataString( |
part.Trim(Constants.DIRECTORY_SEPARATOR.First()) |
) |
) |
.Where(part => !string.IsNullOrEmpty(part)) |
.SequenceExceptAny(new[] { |
STITCH_CONSTANTS.UPDATE_PATH, |
STITCH_CONSTANTS.PROGRESSIVE_PATH, |
$"{release.Major}.{release.Minor}", |
STITCH_CONSTANTS.UPDATE_DATA_PATH |
})), o => System.Security.Cryptography.SHA1.Create().ToHex(client.Download(o.Href).Result)); |
}) |
), System.Security.Cryptography.SHA1.Create().ToHex(memoryStream)); |
} |
} |
).Select(o => o.Result).OfType<KeyValuePair<string, string>>(); |
} |
} |
} |