Skip to content

Commit 2f51e19

Browse files
committed
fix: msdl fixed (thanks May)
1 parent 2ff351c commit 2f51e19

File tree

3 files changed

+47
-146
lines changed

3 files changed

+47
-146
lines changed

docs/getting-started/installation.md

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,9 +46,10 @@ See the alternatives below.
4646
!!! question "Which version should I choose?"
4747
If you meet the official requirements, we **strongly** recommend choosing Windows 11. If not, use Windows 10.
4848

49+
??? grey-tip "Alternatives"
4950

5051
!!! tip
51-
Even though the downloader we use in our docs use Microsoft's servers (currently broken), you can also download the ISO directly from Microsoft or use the Windows Media Creation Tool.
52+
Even though the downloader we use in our docs use Microsoft's servers, you can also download the ISO directly from Microsoft or use the Windows Media Creation Tool.
5253

5354
<div id="official-microsoft-sources"></div>
5455
=== "Official Microsoft Sources"
@@ -78,7 +79,7 @@ See the alternatives below.
7879
1. After the ISO has completed downloading, click **Finish**
7980

8081
<!-- --8<-- [end:iso1] -->
81-
82+
{% include 'msdl.md' %}
8283

8384

8485
<!-- --8<-- [start:drivers] -->

docs/getting-started/reverting-atlas.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ installation.md:style
3838
installation.md:iso
3939
installation.md:iso1
4040
--8<--
41-
41+
{% include 'msdl.md' %}
4242
--8<--
4343
installation.md:drivers
4444
installation.md:reinstalling

docs/javascript/msdl.v1.js

Lines changed: 43 additions & 143 deletions
Original file line numberDiff line numberDiff line change
@@ -8,37 +8,27 @@
88
// - Simplification of certain functions like updateVars
99
// - Fixes/adaptations for use in Atlas documentation
1010

11-
const msApiUrl = "https://www.microsoft.com/software-download-connector/api/"
12-
const parms = "?profile=606624d44113&Locale=en-US&sessionID="
13-
const sessionUrl = "https://vlscppe.microsoft.com/fp/tags?org_id=y6jn8c31&session_id="
14-
const apiUrl = "https://api.gravesoft.dev/msdl/"
15-
16-
const sharedSessionGUID = "47cbc254-4a79-4be6-9866-9c625eb20911";
17-
const langAttempt = 3;
11+
const apiUrl = "https://api.gravesoft.dev/msdl/";
1812

1913
let sessionId;
2014
let msContent;
2115
let pleaseWait;
2216
let processingError;
2317
let download;
2418
let downloadLink;
25-
let getLangFailCount;
26-
let shouldUseSharedSession = true;
2719
let winProductID;
2820
let skuId;
2921

3022
function uuidv4() {
31-
return ([1e7] + -1e3 + -4e3 + -8e3 + -1e11).replace(/[018]/g, (c) => (c ^ (crypto.getRandomValues(new Uint8Array(1))[0] & (15 >> (c / 4)))).toString(16));
23+
return ([1e7] + -1e3 + -4e3 + -8e3 + -1e11).replace(/[018]/g, (c) =>
24+
(c ^ crypto.getRandomValues(new Uint8Array(1))[0] & (15 >> (c / 4))).toString(16)
25+
);
3226
}
3327

3428
function updateVars() {
29+
// With auto-selection, an option is always selected.
3530
let id = document.getElementById('product-languages').value;
36-
if (id == "") {
37-
document.getElementById('submit-sku').disabled = 1;
38-
return;
39-
}
40-
41-
document.getElementById('submit-sku').disabled = 0;
31+
document.getElementById('submit-sku').disabled = false;
4232
skuId = JSON.parse(id)['id'];
4333
console.log(`Updated skuId: ${skuId}`);
4434
return skuId;
@@ -58,17 +48,12 @@ function getFileNameFromLink(link) {
5848
}
5949

6050
function getLanguages(productId) {
61-
let url = `${msApiUrl}getskuinformationbyproductedition${parms}${sessionId.value}&ProductEditionId=${productId}`;
51+
let url = `${apiUrl}skuinfo?product_id=${productId}`;
6252
let xhr = new XMLHttpRequest();
6353
xhr.onload = onLanguageXhrChange;
6454
xhr.onerror = function() {
65-
getLangFailCount++;
66-
if (getLangFailCount > langAttempt) {
67-
showError("Failed to retrieve languages.");
68-
} else {
69-
getLanguages(productId);
70-
}
71-
};
55+
showError("Failed to retrieve languages.");
56+
};
7257
xhr.open("GET", url, true);
7358
xhr.send();
7459
}
@@ -84,11 +69,8 @@ function onLanguageXhrChange() {
8469
let langHtml = langJsonStrToHTML(this.responseText);
8570
msContent.innerHTML = langHtml;
8671

87-
let submitSku = document.getElementById('submit-sku');
88-
submitSku.setAttribute("onClick", "getDownload();");
89-
9072
let prodLang = document.getElementById('product-languages');
91-
prodLang.setAttribute("onChange", "updateVars();");
73+
prodLang.addEventListener("change", updateVars);
9274

9375
updateVars();
9476
}
@@ -110,7 +92,7 @@ function langJsonStrToHTML(jsonStr) {
11092

11193
let defaultOption = document.createElement('option');
11294
defaultOption.value = "";
113-
defaultOption.selected = "selected";
95+
defaultOption.selected = true;
11496
defaultOption.textContent = "Choose one";
11597
select.appendChild(defaultOption);
11698

@@ -125,130 +107,63 @@ function langJsonStrToHTML(jsonStr) {
125107

126108
let button = document.createElement('button');
127109
button.id = "submit-sku";
128-
button.textContent = "Submit";
110+
button.textContent = "Download";
129111
button.disabled = true;
130112
button.setAttribute("onClick", "getDownload();");
131-
132113
container.appendChild(button);
133114

134115
return container.innerHTML;
135116
}
136117

137-
function getDownload(sharedSession = false) {
118+
function getDownload() {
138119
msContent.style.display = "none";
139120
pleaseWait.style.display = "block";
140121
skuId = skuId ? skuId : updateVars();
141-
let sessionGUID = sharedSession ? sharedSessionGUID : sessionId.value;
142-
let url = `${msApiUrl}GetProductDownloadLinksBySku${parms}${sessionGUID}&SKU=${skuId}`;
122+
let url = `${apiUrl}proxy?product_id=${winProductID}&sku_id=${skuId}`;
143123
console.log(`Requesting download links from URL: ${url}`);
144124
let xhr = new XMLHttpRequest();
145-
xhr.onload = function() {
146-
onDownloadsXhrChange(sharedSession);
147-
};
125+
xhr.onload = onDownloadsXhrChange;
148126
xhr.open("GET", url, true);
149127
xhr.send();
150128
}
151129

152-
function onDownloadsXhrChange(sharedSession) {
130+
function onDownloadsXhrChange() {
153131
if (this.status != 200) {
154-
if (!sharedSession) {
155-
console.log("Request failed, retrying with shared session...");
156-
getDownload(true);
157-
} else {
158-
console.log("Request failed, using server proxy...");
159-
getFromServer();
160-
}
132+
showError("Failed to retrieve download links.");
161133
return;
162134
}
163-
164135
let response = JSON.parse(this.responseText);
165136
console.log('Download response:', response);
166137

167-
if (response.Errors || response.ValidationContainer.Errors) {
168-
if (!sharedSession) {
169-
console.log("Request failed, retrying with shared session...");
170-
getDownload(true);
171-
} else {
172-
console.log("Request failed, using server proxy...");
173-
getFromServer();
174-
}
175-
return;
176-
}
177-
178138
pleaseWait.style.display = "none";
179139
msContent.innerHTML = "";
180140
msContent.style.display = "block";
181141

182-
response.ProductDownloadOptions.forEach(option => {
183-
let optionContainer = document.createElement('div');
184-
let header = document.createElement('h1');
185-
header.textContent = `Windows 11 ${option.LocalizedLanguage}`;
186-
let downloadButton = document.createElement('a');
187-
downloadButton.href = option.Uri;
188-
downloadButton.textContent = getFileNameFromLink(option.Uri);
189-
downloadButton.target = "_blank";
190-
optionContainer.appendChild(downloadButton);
191-
msContent.appendChild(optionContainer);
192-
193-
// Trigger automatic download
194-
const link = document.createElement('a');
195-
link.href = option.Uri;
196-
link.download = getFileNameFromLink(option.Uri);
197-
document.body.appendChild(link);
198-
link.click();
199-
document.body.removeChild(link);
200-
});
201-
}
202-
203-
function getFromServer() {
204-
console.log("Using server proxy to get the download link.");
205-
let url = `${apiUrl}proxy?product_id=${winProductID}&sku_id=${skuId}`;
206-
let xhr = new XMLHttpRequest();
207-
xhr.onload = displayResponseFromServer;
208-
xhr.open("GET", url, true);
209-
xhr.send();
210-
}
211-
212-
function displayResponseFromServer() {
213-
if (this.status != 200) {
214-
showError("Failed to retrieve download links from server.");
215-
return;
216-
}
217-
218-
const response = JSON.parse(this.responseText);
219-
console.log('Server proxy response:', response);
220-
221-
// Check if ProductDownloadOptions array is present and has elements
222-
if (!response.ProductDownloadOptions || response.ProductDownloadOptions.length === 0) {
223-
showError("No download options available from server.");
224-
return;
225-
}
226-
227-
pleaseWait.style.display = "none";
228-
msContent.innerHTML = "";
229-
msContent.style.display = "block";
230-
231-
response.ProductDownloadOptions.forEach(option => {
232-
if (option.Uri && option.Uri.includes('_x64')) {
233-
let optionContainer = document.createElement('div');
234-
let header = document.createElement('h1');
235-
header.textContent = `Windows 11 ${option.LocalizedLanguage}`;
236-
let downloadButton = document.createElement('a');
237-
downloadButton.href = option.Uri;
238-
downloadButton.textContent = getFileNameFromLink(option.Uri);
239-
downloadButton.target = "_blank";
240-
optionContainer.appendChild(downloadButton);
241-
msContent.appendChild(optionContainer);
242-
243-
// Trigger automatic download
244-
const link = document.createElement('a');
245-
link.href = option.Uri;
246-
link.download = getFileNameFromLink(option.Uri);
247-
document.body.appendChild(link);
248-
link.click();
249-
document.body.removeChild(link);
250-
}
251-
});
142+
if (response.ProductDownloadOptions && response.ProductDownloadOptions.length > 0) {
143+
let header = document.createElement('h2');
144+
header.textContent = `${response.ProductDownloadOptions[0].ProductDisplayName} ${response.ProductDownloadOptions[0].LocalizedLanguage}`;
145+
msContent.appendChild(header);
146+
147+
response.ProductDownloadOptions.forEach(option => {
148+
let optionContainer = document.createElement('div');
149+
let downloadButton = document.createElement('a');
150+
downloadButton.href = option.Uri;
151+
downloadButton.textContent = getFileNameFromLink(option.Uri);
152+
downloadButton.target = "_blank";
153+
optionContainer.appendChild(downloadButton);
154+
msContent.appendChild(optionContainer);
155+
156+
// Trigger automatic download
157+
const link = document.createElement('a');
158+
link.href = option.Uri;
159+
link.download = getFileNameFromLink(option.Uri);
160+
document.body.appendChild(link);
161+
link.click();
162+
document.body.removeChild(link);
163+
});
164+
} else {
165+
msContent.innerHTML = "<p>No download options available.</p>";
166+
}
252167
}
253168

254169
function getWindows(id) {
@@ -260,23 +175,8 @@ function getWindows(id) {
260175
download = document.getElementById("msdl-download");
261176
downloadLink = document.getElementById("msdl-download-link");
262177

263-
// Misc variables
264-
getLangFailCount = 0;
265-
266-
// Start new session
178+
skuId = null;
267179
sessionId.value = uuidv4();
268-
const xhr = new XMLHttpRequest();
269-
xhr.open("GET", sessionUrl + sessionId.value, true);
270-
xhr.send();
271-
272-
let mxhr = new XMLHttpRequest();
273-
mxhr.onload = function () {
274-
if (this.status != 200) shouldUseSharedSession = false;
275-
};
276-
mxhr.open("GET", apiUrl + "use_shared_session", true);
277-
mxhr.send();
278-
279-
// Display the 'Please wait' text
280180
msContent.style.display = "none";
281181
processingError.style.display = "none";
282182
download.style.display = "none";

0 commit comments

Comments
 (0)