diff --git a/CHANGELOG.md b/CHANGELOG.md index 9f701e3..4da51f4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ # Changelog +## 1.12.3 (2026-12-07) + +- correction du bug de récupération du token + ## 1.12.2 (2026-12-07) - correction du bug sur les villages non trouvés diff --git a/manifest.json b/manifest.json index 1a05394..8b85c30 100644 --- a/manifest.json +++ b/manifest.json @@ -1,7 +1,7 @@ { "manifest_version": 3, "name": "KAplus", - "version": "1.12.2", + "version": "1.12.3", "developer": { "name": "Samuel Campos", diff --git a/metadata.json b/metadata.json index 6f43f9e..b397ac3 100644 --- a/metadata.json +++ b/metadata.json @@ -5,8 +5,8 @@ "firefox" ], "release_notes": { - "fr": "- correction du bug sur les villages non trouvés", - "en-US": "- fix bug non found villages" + "fr": "- correction du bug de récupération du token", + "en-US": "- fix bug retrieving token" } } } \ No newline at end of file diff --git a/src/kaplus.js b/src/kaplus.js index 3c40633..ad881eb 100644 --- a/src/kaplus.js +++ b/src/kaplus.js @@ -122,68 +122,66 @@ function selectVillage(selectRef, inputXRef, inputYRef) { } } -function storeOrderToken(ownVillages, targetVillage) { +function storeOrderToken(ownVillages, targetVillage, recursiveIndex) { let orderToken = sessionStorage.getItem("orderToken"); if (orderToken !== null) { return; } - let breakLoop = false; - for (let villageId in ownVillages) { - if (breakLoop === true) { - return; - } - let xhrOrder = new XMLHttpRequest(); - xhrOrder.addEventListener("readystatechange", function () { - if (xhrOrder.readyState === xhrOrder.DONE) { - let parser = new DOMParser(); - let doc = parser.parseFromString(xhrOrder.responseText, "text/html"); - let quantityDivs = doc.getElementsByClassName("quantity"); - let unit = null; - for (let i = 0; i < quantityDivs.length; i ++) { - let quantityInput = quantityDivs[i].getElementsByTagName("input")[0]; - let quantityClick = quantityDivs[i].getElementsByClassName("click")[0]; - if (quantityClick.textContent !== "(0)") { - unit = quantityInput.getAttribute("name"); - break; - } + let villageId = Object.keys(ownVillages)[recursiveIndex]; + let xhrOrder = new XMLHttpRequest(); + xhrOrder.addEventListener("readystatechange", function () { + if (xhrOrder.readyState === xhrOrder.DONE) { + let parser = new DOMParser(); + let doc = parser.parseFromString(xhrOrder.responseText, "text/html"); + let quantityDivs = doc.getElementsByClassName("quantity"); + let unit = null; + for (let i = 0; i < quantityDivs.length; i ++) { + let quantityInput = quantityDivs[i].getElementsByTagName("input")[0]; + let quantityClick = quantityDivs[i].getElementsByClassName("click")[0]; + if (quantityClick.textContent !== "(0)") { + unit = quantityInput.getAttribute("name"); + break; } - if (unit === null) { - return; - } - - let xhrSend = new XMLHttpRequest(); - let formData = new FormData(); - formData.set(unit, "1"); - formData.set("send_x", targetVillage.x); - formData.set("send_y", targetVillage.y); - formData.set("support", "Envoyer du renfort"); - let formParams = new URLSearchParams(formData); - xhrSend.addEventListener("readystatechange", function () { - if (xhrSend.readyState === xhrSend.DONE) { - let parser = new DOMParser(); - let doc = parser.parseFromString(xhrSend.responseText, "text/html"); - let form = doc.getElementsByTagName("form")[0]; - let action = form.getAttribute("action"); - let orderToken = action.replace(/^.*p=([a-z0-9]+).*$/, "$1"); - sessionStorage.setItem("orderToken", orderToken); - breakLoop = true; - } - }); - xhrSend.open("POST", "/?village=" + villageId + "&s=build_barracks&m=command&sub=send"); - xhrSend.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); - xhrSend.send(formParams.toString()); } - }); - xhrOrder.open("GET", "/?village=" + villageId + "&s=build_barracks"); - xhrOrder.send(); - } + if (unit === null) { + if (recursiveIndex < ownVillages.length - 1) { + storeOrderToken(ownVillages, targetVillage, recursiveIndex + 1); + } + return; + } + + let xhrSend = new XMLHttpRequest(); + let formData = new FormData(); + formData.set(unit, "1"); + formData.set("send_x", targetVillage.x); + formData.set("send_y", targetVillage.y); + formData.set("support", "Envoyer du renfort"); + let formParams = new URLSearchParams(formData); + xhrSend.addEventListener("readystatechange", function () { + if (xhrSend.readyState === xhrSend.DONE) { + let parser = new DOMParser(); + let doc = parser.parseFromString(xhrSend.responseText, "text/html"); + let form = doc.getElementsByTagName("form")[0]; + let action = form.getAttribute("action"); + let orderToken = action.replace(/^.*p=([a-z0-9]+).*$/, "$1"); + sessionStorage.setItem("orderToken", orderToken); + breakLoop = true; + } + }); + xhrSend.open("POST", "/?village=" + villageId + "&s=build_barracks&m=command&sub=send"); + xhrSend.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); + xhrSend.send(formParams.toString()); + } + }); + xhrOrder.open("GET", "/?village=" + villageId + "&s=build_barracks"); + xhrOrder.send(); } function storeTargetVillage(ownVillages) { let targetVillage = sessionStorage.getItem("targetVillage"); if (targetVillage !== null) { - storeOrderToken(ownVillages, JSON.parse(targetVillage)); + storeOrderToken(ownVillages, JSON.parse(targetVillage), 0); return; } @@ -193,7 +191,7 @@ function storeTargetVillage(ownVillages) { if (xhr.readyState === xhr.DONE) { let parser = new DOMParser(); let doc = parser.parseFromString(xhr.responseText, "text/html"); - let cells = doc.getElementsByClassName("occupied range"); + let cells = doc.getElementsByClassName("occupied"); for (let i = 0; i < cells.length; i ++) { let links = cells[i].getElementsByTagName("a"); if (links.length === 0) { @@ -206,7 +204,7 @@ function storeTargetVillage(ownVillages) { let villageXY = links[0].getAttribute("onmouseover").replace(/^.*(\d{3}\|\d{3}).*$/, "$1").split("|"); targetVillage = {x: parseInt(villageXY[0]), y: parseInt(villageXY[1])}; sessionStorage.setItem("targetVillage", JSON.stringify(targetVillage)); - storeOrderToken(ownVillages, targetVillage); + storeOrderToken(ownVillages, targetVillage, 0); break; } }