From 3642d02753688d2bf05bfee0dd028b5e2f7d2b60 Mon Sep 17 00:00:00 2001 From: Tom Sullivan Date: Thu, 11 Nov 2021 13:43:14 +1100 Subject: [PATCH 1/3] Rename `Language.name` Rename `Language.name` to `Language.language` to match the JSON payload --- Windows11Upgrade/win11_downloadSelection.cs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/Windows11Upgrade/win11_downloadSelection.cs b/Windows11Upgrade/win11_downloadSelection.cs index 8cb7335..0fb555a 100644 --- a/Windows11Upgrade/win11_downloadSelection.cs +++ b/Windows11Upgrade/win11_downloadSelection.cs @@ -32,17 +32,17 @@ public win11_downloadSelection() { if (languageAttribute.Value.StartsWith("{")) { dynamic languageJson = JsonConvert.DeserializeObject(languageAttribute.Value); var current = new Language(); - current.name = languageJson["language"]; + current.language = languageJson["language"]; current.id = languageJson["id"]; languages.Add(current); } - foreach (var item in languages) listLanguages.Items.Add(item.name); + foreach (var item in languages) listLanguages.Items.Add(item.language); } private void languageList_SelectionChange(object sender, EventArgs e) { btnDownloadSystem.Enabled = true; - btnDownloadSystem.Text = "Download " + languages[listLanguages.SelectedIndex].name + " Windows 11 ISO"; + btnDownloadSystem.Text = "Download " + languages[listLanguages.SelectedIndex].language + " Windows 11 ISO"; } private void btnDownloadSystem_Click(object sender, EventArgs e) { @@ -53,7 +53,7 @@ private void btnDownloadSystem_Click(object sender, EventArgs e) { "/api/controls/contentinclude/html?pageId=a224afab-2097-4dfa-a2ba-463eb191a285&host=www.microsoft.com&segments=software-download,windows11&query=&action=GetProductDownloadLinksBySku"; urlDownload += "&sessionId=" + guid; urlDownload += "&skuId=" + languages[listLanguages.SelectedIndex].id; - urlDownload += "&language=" + languages[listLanguages.SelectedIndex].name; + urlDownload += "&language=" + languages[listLanguages.SelectedIndex].language; urlDownload += "&sdVersion=2"; var webClient = new WebClient(); @@ -83,7 +83,7 @@ private void exit(object sender, FormClosingEventArgs e) { } public class Language { - public string name { get; set; } + public string language { get; set; } public string id { get; set; } } } From 9397e2f52ea36c4de3f40befd3afe494443ceb96 Mon Sep 17 00:00:00 2001 From: Tom Sullivan Date: Thu, 11 Nov 2021 13:49:45 +1100 Subject: [PATCH 2/3] Use `JsonConvert.DeserializeObject` Make use of the generic version of `JsonConvert.DeserializeObject` to create the appropriate `Language` object directly --- Windows11Upgrade/win11_downloadSelection.cs | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/Windows11Upgrade/win11_downloadSelection.cs b/Windows11Upgrade/win11_downloadSelection.cs index 0fb555a..0fbf421 100644 --- a/Windows11Upgrade/win11_downloadSelection.cs +++ b/Windows11Upgrade/win11_downloadSelection.cs @@ -27,16 +27,15 @@ public win11_downloadSelection() { langagesFiltered = "" + langagesFiltered + ""; var languagesXml = new XmlDocument(); languagesXml.LoadXml(langagesFiltered); - foreach (XmlNode language in languagesXml.GetElementsByTagName("option")) - foreach (XmlAttribute languageAttribute in language.Attributes) - if (languageAttribute.Value.StartsWith("{")) { - dynamic languageJson = JsonConvert.DeserializeObject(languageAttribute.Value); - var current = new Language(); - current.language = languageJson["language"]; - current.id = languageJson["id"]; - languages.Add(current); + foreach (XmlNode language in languagesXml.GetElementsByTagName("option")) { + var attribute = language.Attributes.GetNamedItem("value"); + if (attribute == null || string.IsNullOrEmpty(attribute.Value)) { + continue; } + languages.Add(JsonConvert.DeserializeObject(attribute.Value)); + } + foreach (var item in languages) listLanguages.Items.Add(item.language); } From 888ebebca4f077747b42988a086c0eb0953d360e Mon Sep 17 00:00:00 2001 From: Tom Sullivan Date: Thu, 11 Nov 2021 13:56:04 +1100 Subject: [PATCH 3/3] Update download link parsing When parsing the download links, use the appropriate named XML attribute and ensure only one link is acted on --- Windows11Upgrade/win11_downloadSelection.cs | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/Windows11Upgrade/win11_downloadSelection.cs b/Windows11Upgrade/win11_downloadSelection.cs index 0fbf421..e0430d4 100644 --- a/Windows11Upgrade/win11_downloadSelection.cs +++ b/Windows11Upgrade/win11_downloadSelection.cs @@ -66,15 +66,19 @@ private void btnDownloadSystem_Click(object sender, EventArgs e) { downloadFiltered = downloadFiltered.Replace(" ", " "); var downloadXml = new XmlDocument(); downloadXml.LoadXml(downloadFiltered); - foreach (XmlNode downloadLink in downloadXml.GetElementsByTagName("input")) - foreach (XmlAttribute downloadAttribute in downloadLink.Attributes) - if (downloadAttribute.Value.StartsWith("{") && downloadAttribute.Value.Contains("Uri")) { - dynamic downloadJson = JsonConvert.DeserializeObject(downloadAttribute.Value); - globals.downloadURL = downloadJson["Uri"]; - Hide(); - var downloadSystem = new win11_downloadSystem(); - downloadSystem.Show(); + foreach (XmlNode downloadLink in downloadXml.GetElementsByTagName("input")) { + var attribute = downloadLink.Attributes.GetNamedItem("value"); + if (attribute == null || string.IsNullOrEmpty(attribute.Value)) { + continue; } + + dynamic downloadJson = JsonConvert.DeserializeObject(attribute.Value); + globals.downloadURL = downloadJson["Uri"]; + Hide(); + var downloadSystem = new win11_downloadSystem(); + downloadSystem.Show(); + break; + } } private void exit(object sender, FormClosingEventArgs e) {