wasStitchNET – Diff between revs 2 and 3

Subversion Repositories:
Rev:
Only display areas with differencesIgnore whitespace
Rev 2 Rev 3
1 /////////////////////////////////////////////////////////////////////////// 1 ///////////////////////////////////////////////////////////////////////////
2 // Copyright (C) Wizardry and Steamworks 2017 - License: GNU GPLv3 // 2 // Copyright (C) Wizardry and Steamworks 2017 - License: GNU GPLv3 //
3 // Please see: http://www.gnu.org/licenses/gpl.html for legal details, // 3 // Please see: http://www.gnu.org/licenses/gpl.html for legal details, //
4 // rights of fair usage, the disclaimer and warranty conditions. // 4 // rights of fair usage, the disclaimer and warranty conditions. //
5 /////////////////////////////////////////////////////////////////////////// 5 ///////////////////////////////////////////////////////////////////////////
6   6  
7 using System; 7 using System;
8 using System.Collections.Generic; 8 using System.Collections.Generic;
9 using System.IO; 9 using System.IO;
10 using System.Linq; 10 using System.Linq;
11 using System.Net; 11 using System.Net;
12 using System.Security.Cryptography; 12 using System.Security.Cryptography;
13 using System.Threading.Tasks; 13 using System.Threading.Tasks;
14 using wasDAVClient; 14 using wasDAVClient;
15 using wasSharp; 15 using wasSharp;
16 using wasSharp.Linq; 16 using wasSharp.Linq;
17 using wasSharp.Web.Utilities; 17 using wasSharp.Web.Utilities;
18 using wasSharpNET.Cryptography; 18 using wasSharpNET.Cryptography;
19   19  
20 namespace wasStitchNET.Repository 20 namespace wasStitchNET.Repository
21 { 21 {
22 public class Tools 22 public class Tools
23 { 23 {
24 /// <summary> 24 /// <summary>
25 /// Lists the release files for a given release version. 25 /// Lists the release files for a given release version.
26 /// </summary> 26 /// </summary>
27 /// <param name="server">the Stitch server to use</param> 27 /// <param name="server">the Stitch server to use</param>
28 /// <param name="release">the release to list files for</param> 28 /// <param name="release">the release to list files for</param>
29 /// <param name="timeout">the timeout connecting to the Stitch repository</param> 29 /// <param name="timeout">the timeout connecting to the Stitch repository</param>
30 /// <returns>a list of Corrade files contained in the repository</returns> 30 /// <returns>a list of Corrade files contained in the repository</returns>
31 public static async Task<IEnumerable<string>> GetReleaseFiles(string server, Version release, int timeout) 31 public static async Task<IEnumerable<string>> GetReleaseFiles(string server, Version release, int timeout)
32 { 32 {
33 using (var client = new Client(new NetworkCredential()) 33 using (var client = new Client(new NetworkCredential())
34 { 34 {
35 Timeout = timeout, 35 Timeout = timeout,
36 UserAgent = STITCH_CONSTANTS.USER_AGENT.Product.Name, 36 UserAgent = STITCH_CONSTANTS.USER_AGENT.Product.Name,
37 UserAgentVersion = STITCH_CONSTANTS.USER_AGENT.Product.Version, 37 UserAgentVersion = STITCH_CONSTANTS.USER_AGENT.Product.Version,
38 Server = server, 38 Server = server,
39 BasePath = string.Join(@"/", STITCH_CONSTANTS.UPDATE_PATH, 39 BasePath = string.Join(@"/", STITCH_CONSTANTS.UPDATE_PATH,
40 STITCH_CONSTANTS.PROGRESSIVE_PATH) 40 STITCH_CONSTANTS.PROGRESSIVE_PATH)
41 }) 41 })
42 { 42 {
43 return (await client 43 return (await client
44 .List( 44 .List(
45 string.Join( 45 string.Join(
46 Constants.DIRECTORY_SEPARATOR, 46 Constants.DIRECTORY_SEPARATOR,
47 $"{release.Major}.{release.Minor}", 47 $"{release.Major}.{release.Minor}",
48 STITCH_CONSTANTS.UPDATE_DATA_PATH), 48 STITCH_CONSTANTS.UPDATE_DATA_PATH),
49 Constants.DavDepth.ALL) 49 Constants.DavDepth.ALL)
50 ) 50 )
51 .Select(o => string.Join(Constants.DIRECTORY_SEPARATOR, 51 .Select(o => string.Join(Constants.DIRECTORY_SEPARATOR,
52 o.Href.PathSplit(Constants.DIRECTORY_SEPARATOR.First()) 52 o.Href.PathSplit(Constants.DIRECTORY_SEPARATOR.First())
53 .Select(part => 53 .Select(part =>
54 WebExtensions.URLUnescapeDataString( 54 WebExtensions.URLUnescapeDataString(
55 part.Trim(Constants.DIRECTORY_SEPARATOR.First()) 55 part.Trim(Constants.DIRECTORY_SEPARATOR.First())
56 ) 56 )
57 ) 57 )
58 .Where(part => !string.IsNullOrEmpty(part)) 58 .Where(part => !string.IsNullOrEmpty(part))
59 .SequenceExceptAny(new[] { 59 .SequenceExceptAny(new[] {
60 STITCH_CONSTANTS.UPDATE_PATH, 60 STITCH_CONSTANTS.UPDATE_PATH,
61 STITCH_CONSTANTS.PROGRESSIVE_PATH, 61 STITCH_CONSTANTS.PROGRESSIVE_PATH,
62 $"{release.Major}.{release.Minor}", 62 $"{release.Major}.{release.Minor}",
63 STITCH_CONSTANTS.UPDATE_DATA_PATH 63 STITCH_CONSTANTS.UPDATE_DATA_PATH
64 }) 64 })
65 ) 65 )
66 ); 66 );
67 } 67 }
68 } 68 }
69   69  
70 /// <summary> 70 /// <summary>
71 /// Lists the release files for a given release version. 71 /// Lists the release files for a given release version.
72 /// </summary> 72 /// </summary>
73 /// <param name="server">the Stitch server to use</param> 73 /// <param name="server">the Stitch server to use</param>
74 /// <param name="release">the release to list files for</param> 74 /// <param name="release">the release to list files for</param>
75 /// <param name="timeout">the timeout connecting to the Stitch repository</param> 75 /// <param name="timeout">the timeout connecting to the Stitch repository</param>
76 /// <returns>a list of Corrade files contained in the repository</returns> 76 /// <returns>a list of Corrade files contained in the repository</returns>
77 public static async Task<IEnumerable<KeyValuePair<string, string>>> GetReleaseFileHashes(string server, Version release, int timeout) 77 public static IEnumerable<KeyValuePair<string, string>> GetReleaseFileHashes(string server, Version release, int timeout)
78 { 78 {
79 using (var client = new Client(new NetworkCredential()) 79 using (var client = new Client(new NetworkCredential())
80 { 80 {
81 Timeout = timeout, 81 Timeout = timeout,
82 UserAgent = STITCH_CONSTANTS.USER_AGENT.Product.Name, 82 UserAgent = STITCH_CONSTANTS.USER_AGENT.Product.Name,
83 UserAgentVersion = STITCH_CONSTANTS.USER_AGENT.Product.Version, 83 UserAgentVersion = STITCH_CONSTANTS.USER_AGENT.Product.Version,
84 Server = server, 84 Server = server,
85 BasePath = string.Join(@"/", STITCH_CONSTANTS.UPDATE_PATH, 85 BasePath = string.Join(@"/", STITCH_CONSTANTS.UPDATE_PATH,
86 STITCH_CONSTANTS.PROGRESSIVE_PATH) 86 STITCH_CONSTANTS.PROGRESSIVE_PATH)
87 }) 87 })
88 { 88 {
89 Console.WriteLine($"{release.Major}.{release.Minor}"); -  
90 return (await client 89 return client
91 .List( 90 .List(
92 string.Join( 91 string.Join(
93 Constants.DIRECTORY_SEPARATOR, 92 Constants.DIRECTORY_SEPARATOR,
94 $"{release.Major}.{release.Minor}", 93 $"{release.Major}.{release.Minor}",
95 STITCH_CONSTANTS.UPDATE_DATA_PATH), 94 STITCH_CONSTANTS.UPDATE_DATA_PATH),
96 Constants.DavDepth.ALL) 95 Constants.DavDepth.ALL)
97 ) -  
98 .Select(async o => -  
99 { -  
100 using (var memoryStream = new MemoryStream()) -  
101 { -  
102 using (var stream = client.Download(o.Href).Result) -  
103 { 96 .Result
104 await stream.CopyToAsync(memoryStream); -  
105 } 97 .AsParallel()
106 return new KeyValuePair<string, string>( 98 .Where(item => !item.IsCollection)
107 string.Join(Constants.DIRECTORY_SEPARATOR, 99 .ToDictionary(o => string.Join(Constants.DIRECTORY_SEPARATOR,
108 o.Href.PathSplit(Constants.DIRECTORY_SEPARATOR.First()) 100 o.Href.PathSplit(Constants.DIRECTORY_SEPARATOR.First())
109 .Select(part => -  
110 WebExtensions.URLUnescapeDataString( 101 .Select(part => WebExtensions.URLUnescapeDataString(
111 part.Trim(Constants.DIRECTORY_SEPARATOR.First()) 102 part.Trim(Constants.DIRECTORY_SEPARATOR.First())
112 ) 103 )
113 ) 104 )
114 .Where(part => !string.IsNullOrEmpty(part)) 105 .Where(part => !string.IsNullOrEmpty(part))
115 .SequenceExceptAny(new[] { 106 .SequenceExceptAny(new[] {
116 STITCH_CONSTANTS.UPDATE_PATH, 107 STITCH_CONSTANTS.UPDATE_PATH,
117 STITCH_CONSTANTS.PROGRESSIVE_PATH, 108 STITCH_CONSTANTS.PROGRESSIVE_PATH,
118 $"{release.Major}.{release.Minor}", 109 $"{release.Major}.{release.Minor}",
119 STITCH_CONSTANTS.UPDATE_DATA_PATH 110 STITCH_CONSTANTS.UPDATE_DATA_PATH
120 }) -  
121 ), System.Security.Cryptography.SHA1.Create().ToHex(memoryStream)); 111 })), o => System.Security.Cryptography.SHA1.Create().ToHex(client.Download(o.Href).Result));
122 } -  
123 } -  
124 ).Select(o => o.Result).OfType<KeyValuePair<string, string>>(); -  
125 } 112 }
126 } 113 }
127 } 114 }
128 } 115 }
129   116