Support multiple consulates
This commit is contained in:
parent
c5582e7662
commit
30438a68e8
@ -9,19 +9,24 @@
|
|||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<div class="container">
|
<div class="container">
|
||||||
|
<!-- version info -->
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-12">
|
<div class="col-12">
|
||||||
<h3 style="white-space: nowrap;">not-a-rescheduler <span id="version"></span></h3>
|
<h3 style="white-space: nowrap;">not-a-rescheduler <span id="version"></span></h3>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<!-- activate slider -->
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col">
|
<div class="col">
|
||||||
<div class="form-check form-switch" style="text-align: left;">
|
<div class="form-check form-switch" style="text-align: left;">
|
||||||
<input class="form-check-input" type="checkbox" role="switch" id="activate">
|
<input class="form-check-input" type="checkbox" role="switch" id="activate">
|
||||||
<label class="form-check-label" for="activate">Activate the script</label>
|
<label class="form-check-label" for="activate">Activate the script</label>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<!-- credentials -->
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col form-group">
|
<div class="col form-group">
|
||||||
<label for="username">Username</label>
|
<label for="username">Username</label>
|
||||||
@ -40,6 +45,8 @@
|
|||||||
<span id="saveStatus">Saved!</span>
|
<span id="saveStatus">Saved!</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<!-- reschedule parameters -->
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col">
|
<div class="col">
|
||||||
<label for="frequency">Check frequency<br>(every <span id="frequency_info">N</span> minutes)</label>
|
<label for="frequency">Check frequency<br>(every <span id="frequency_info">N</span> minutes)</label>
|
||||||
@ -64,14 +71,15 @@
|
|||||||
<input type="number" class="form-control" id="deltaNow" placeholder="days" min="1" max="365">
|
<input type="number" class="form-control" id="deltaNow" placeholder="days" min="1" max="365">
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<!-- consulates -->
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col">
|
<div class="col">
|
||||||
<div class="form-check form-switch" style="text-align: left;">
|
Consulates:
|
||||||
<input class="form-check-input" type="checkbox" role="switch" id="autobook">
|
|
||||||
<label class="form-check-label" for="autobook">Autobook</label>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<div id="consulatesConfig">
|
||||||
|
</div>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col">
|
<div class="col">
|
||||||
Current appointment: <span id="currApptConsulate">somewhere</span>, <span id="currApptDate">some time</span>
|
Current appointment: <span id="currApptConsulate">somewhere</span>, <span id="currApptDate">some time</span>
|
||||||
|
|||||||
@ -15,9 +15,9 @@
|
|||||||
document.getElementById("currApptDate").innerText = currentAppt["date"];
|
document.getElementById("currApptDate").innerText = currentAppt["date"];
|
||||||
document.getElementById("deltaAppt").value = items["__deltaAppt"] || 1;
|
document.getElementById("deltaAppt").value = items["__deltaAppt"] || 1;
|
||||||
document.getElementById("deltaNow").value = items["__deltaNow"] || 1;
|
document.getElementById("deltaNow").value = items["__deltaNow"] || 1;
|
||||||
document.getElementById("autobook").checked = items["__autobook"] || false;
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// update frequency value
|
||||||
chrome.storage.onChanged.addListener((changes, area) => {
|
chrome.storage.onChanged.addListener((changes, area) => {
|
||||||
if (changes.__frequency)
|
if (changes.__frequency)
|
||||||
document.getElementById("frequency_info").innerText = changes.__frequency.newValue;
|
document.getElementById("frequency_info").innerText = changes.__frequency.newValue;
|
||||||
@ -27,9 +27,6 @@
|
|||||||
document.getElementById("activate").addEventListener("change", async e => {
|
document.getElementById("activate").addEventListener("change", async e => {
|
||||||
await chrome.storage.local.set({ "__activate": e.target.checked });
|
await chrome.storage.local.set({ "__activate": e.target.checked });
|
||||||
});
|
});
|
||||||
document.getElementById("autobook").addEventListener("change", async e => {
|
|
||||||
await chrome.storage.local.set({ "__autobook": e.target.checked });
|
|
||||||
});
|
|
||||||
|
|
||||||
// credentials
|
// credentials
|
||||||
let usernameField = document.getElementById("username");
|
let usernameField = document.getElementById("username");
|
||||||
@ -82,6 +79,54 @@
|
|||||||
chrome.storage.local.set({ __deltaNow: this.value });
|
chrome.storage.local.set({ __deltaNow: this.value });
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// consulates
|
||||||
|
await chrome.storage.local.get(['__consulates']).then((result) => {
|
||||||
|
let consulates = result['__consulates'];
|
||||||
|
|
||||||
|
let html = '';
|
||||||
|
for (let c in consulates) {
|
||||||
|
console.log(c, consulates[c])
|
||||||
|
let cSelected = consulates[c].isSelected === true ? "checked" : "";
|
||||||
|
let cAutobook = consulates[c].autobook === true ? "checked" : "";
|
||||||
|
let cName = c.replace(/ /g, ' ')
|
||||||
|
let cId = consulates[c].id;
|
||||||
|
html += `
|
||||||
|
<div class="row">
|
||||||
|
<div class="col">
|
||||||
|
<div class="form-check form-checkbox" style="text-align: left;">
|
||||||
|
<input class="form-check-input" type="checkbox" role="switch" id="isSelected-${cId}" ${cSelected}>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="col">${cName}</div>
|
||||||
|
<div class="col"><span id="bestDate-${cId}">${consulates[c].bestDate || "-"}</span></div>
|
||||||
|
<div class="col"><span id="currentDate-${cId}">${consulates[c].currentDate || "-"}</span></div>
|
||||||
|
<div class="col">
|
||||||
|
<div class="form-check form-switch" style="text-align: left;">
|
||||||
|
<input class="form-check-input" type="checkbox" role="switch" id="autobook-${cId}" ${cAutobook}>
|
||||||
|
<label class="form-check-label" for="autobook-${cId}">Autobook</label>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
`;
|
||||||
|
}
|
||||||
|
if (html === '') {
|
||||||
|
html = "No consulates found.";
|
||||||
|
}
|
||||||
|
document.getElementById('consulatesConfig').innerHTML = html;
|
||||||
|
|
||||||
|
for (let c in consulates) {
|
||||||
|
let cId = consulates[c].id;
|
||||||
|
document.getElementById(`isSelected-${cId}`).addEventListener("change", async e => {
|
||||||
|
consulates[c].isSelected = e.target.checked;
|
||||||
|
await chrome.storage.local.set({ "__consulates": consulates });
|
||||||
|
});
|
||||||
|
document.getElementById(`autobook-${cId}`).addEventListener("change", async e => {
|
||||||
|
consulates[c].autobook = e.target.checked;
|
||||||
|
await chrome.storage.local.set({ "__consulates": consulates });
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
// reset button
|
// reset button
|
||||||
document.getElementById("resetButton").addEventListener("click", async () => {
|
document.getElementById("resetButton").addEventListener("click", async () => {
|
||||||
if (confirm("Are you sure you want to reset?")) {
|
if (confirm("Are you sure you want to reset?")) {
|
||||||
|
|||||||
@ -22,7 +22,6 @@ let config = {
|
|||||||
consulates: null,
|
consulates: null,
|
||||||
deltaAppt: null,
|
deltaAppt: null,
|
||||||
deltaNow: null,
|
deltaNow: null,
|
||||||
autobook: null,
|
|
||||||
};
|
};
|
||||||
let isRunning = false;
|
let isRunning = false;
|
||||||
let msg = "";
|
let msg = "";
|
||||||
@ -128,6 +127,7 @@ async function getConsulates() {
|
|||||||
"bestDate": null,
|
"bestDate": null,
|
||||||
"currentDate": null,
|
"currentDate": null,
|
||||||
"nextCheckAt": getFutureDate(0, config.frequency * MINUTE),
|
"nextCheckAt": getFutureDate(0, config.frequency * MINUTE),
|
||||||
|
"autobook": false,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
return consulatesDict;
|
return consulatesDict;
|
||||||
@ -187,7 +187,6 @@ async function runner() {
|
|||||||
config.consulates = result['__consulates'] || null;
|
config.consulates = result['__consulates'] || null;
|
||||||
config.deltaAppt = result['__deltaAppt'] || 1;
|
config.deltaAppt = result['__deltaAppt'] || 1;
|
||||||
config.deltaNow = result['__deltaNow'] || 1;
|
config.deltaNow = result['__deltaNow'] || 1;
|
||||||
config.autobook = result['__autobook'] || false;
|
|
||||||
|
|
||||||
if (prev_config.activate === null) {
|
if (prev_config.activate === null) {
|
||||||
console.log('Reading config: ' + JSON.stringify(config));
|
console.log('Reading config: ' + JSON.stringify(config));
|
||||||
@ -479,7 +478,7 @@ async function runner() {
|
|||||||
console.log(msg);
|
console.log(msg);
|
||||||
await sendNotification(msg);
|
await sendNotification(msg);
|
||||||
|
|
||||||
if (config.autobook) {
|
if (config.consulates[consulate].autobook) {
|
||||||
await delay(PAGE_WAIT_TIME);
|
await delay(PAGE_WAIT_TIME);
|
||||||
console.log('Auto booking');
|
console.log('Auto booking');
|
||||||
document.querySelector(".reveal-overlay:last-child [data-reveal] .button.alert").click();
|
document.querySelector(".reveal-overlay:last-child [data-reveal] .button.alert").click();
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user