This commit is contained in:
Maks Snegov 2024-04-22 02:56:06 -07:00
parent b8ab66cd78
commit 3f61d82ec5
5 changed files with 63 additions and 26 deletions

7
popup/bootstrap.bundle.min.js vendored Normal file

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -11,7 +11,7 @@
<div class="container"> <div class="container">
<div class="row"> <div class="row">
<div class="col-12"> <div class="col-12">
<h3 style="white-space: nowrap;">not-a-rescheduler<br><span id="version"></span></h3> <h3 style="white-space: nowrap;">not-a-rescheduler <span id="version"></span></h3>
</div> </div>
</div> </div>
<div class="row"> <div class="row">
@ -23,28 +23,45 @@
</div> </div>
</div> </div>
<div class="row"> <div class="row">
<div class="col"> <div class="col form-group">
<div class="form-group mb-2"> <label for="username">Username</label>
<label for="username">Username</label> <input type="text" class="form-control" id="username" placeholder="Username">
<input type="text" class="form-control" id="username" placeholder="Username"> </div>
</div> </div>
<div class="form-group mb-2"> <div class="row">
<label for="password">Password</label> <div class="col form-group">
<input type="password" class="form-control" id="password" placeholder="Password"> <label for="password">Password</label>
<button type="button" id="showPassword" class="btn btn-link btn-sm">Show password</button> <input type="password" class="form-control" id="password" placeholder="Password"><button type="button" id="showPassword" class="btn btn-link btn-sm">Show</button>
</div>
<div class="mb-2">
<button type="button mb-2" class="btn btn-primary" id="saveButton">Save credentials</button>
<span id="saveStatus">Saved!</span>
</div>
</div> </div>
</div> </div>
<div class="row"> <div class="row">
<div class="col"> <div class="col">
<div class="mb-2"> <button type="button" class="btn btn-primary" id="saveButton">Save credentials</button>
<input type="range" id="frequency" name="frequency" min="1" max="10" step="1"> <span id="saveStatus">Saved!</span>
<label for="frequency">Frequency of checks<br>(every <span id="frequency_info">1</span> minutes)</label> </div>
</div> </div>
<div class="row">
<div class="col">
<label for="frequency" class="form-label">Frequency (minutes)</label>
</div>
<div class="col">
<input type="number" class="form-control" id="frequency" placeholder="minutes">
</div>
</div>
<div class="row">
<div class="col">
<label for="deltaAppt">Appointment delta (days)</label>
</div>
<div class="col">
<input type="number" class="form-control" id="deltaAppt" placeholder="days">
</div>
</div>
<div class="row">
<div class="col">
<label for="deltaNow">Preparation time (days)</label>
</div>
<div class="col">
<input type="number" class="form-control" id="deltaNow" placeholder="days">
</div> </div>
</div> </div>
<div class="row"> <div class="row">
@ -53,6 +70,7 @@
</div> </div>
</div> </div>
</div> </div>
<script src="bootstrap.bundle.min.js"></script>
<script src="popup.js"></script> <script src="popup.js"></script>
</body> </body>
</html> </html>

View File

@ -8,13 +8,14 @@
document.getElementById("username").value = items["__username"] || ""; document.getElementById("username").value = items["__username"] || "";
document.getElementById("password").value = items["__password"] || ""; document.getElementById("password").value = items["__password"] || "";
document.getElementById("frequency").value = items["__frequency"] || 1; document.getElementById("frequency").value = items["__frequency"] || 1;
document.getElementById("frequency_info").innerText = items["__frequency"] || 1;
document.getElementById("status").innerText = items["__status"] || "unknown"; document.getElementById("status").innerText = items["__status"] || "unknown";
document.getElementById("deltaAppt").value = items["__deltaAppt"] || 1;
document.getElementById("deltaNow").value = items["__deltaNow"] || 1;
}); });
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;
}); });
// activate checkbox // activate checkbox
@ -62,9 +63,15 @@
passwordField.type = "password"; passwordField.type = "password";
}); });
// frequency range slider // range sliders
document.getElementById("frequency").addEventListener("change", function() { document.getElementById("frequency").addEventListener("input", function() {
chrome.storage.local.set({ __frequency: this.value }); chrome.storage.local.set({ __frequency: this.value });
}); });
document.getElementById("deltaAppt").addEventListener("input", function() {
chrome.storage.local.set({ __deltaAppt: this.value });
});
document.getElementById("deltaNow").addEventListener("change", function() {
chrome.storage.local.set({ __deltaNow: this.value });
});
})(); })();

View File

@ -18,6 +18,8 @@ let config = {
apptDate: null, apptDate: null,
signinAttempts: null, signinAttempts: null,
consulates: null, consulates: null,
deltaAppt: null,
deltaNow: null,
}; };
let isRunning = false; let isRunning = false;
@ -164,6 +166,8 @@ async function runner() {
config.apptId = result['__apptId'] || null; config.apptId = result['__apptId'] || null;
config.apptDate = result['__apptDate'] || null; config.apptDate = result['__apptDate'] || null;
config.consulates = result['__consulates'] || null; config.consulates = result['__consulates'] || null;
config.deltaAppt = result['__deltaAppt'] || 1;
config.deltaNow = result['__deltaNow'] || 1;
if (prev_config.activate === null) { if (prev_config.activate === null) {
console.log('Reading config: ' + JSON.stringify(config)); console.log('Reading config: ' + JSON.stringify(config));
@ -229,7 +233,7 @@ async function runner() {
if (config.countdown > 0) { if (config.countdown > 0) {
config.countdown -= 1; config.countdown -= 1;
if (config.countdown % 10 === 0 || config.countdown <= 5) { if (config.countdown % 30 === 0 || config.countdown <= 5) {
console.log(`Countdown: ${config.countdown}s`); console.log(`Countdown: ${config.countdown}s`);
} }
await chrome.storage.local.set({ "__countdown": config.countdown }); await chrome.storage.local.set({ "__countdown": config.countdown });
@ -369,7 +373,7 @@ async function runner() {
// if empty list, either we're banned or non operational hours or dead consulate // if empty list, either we're banned or non operational hours or dead consulate
if (availDates.length == 0) { if (availDates.length == 0) {
console.log('No available dates in ' + consulate); console.log(`No available dates in ${consulate}, probably banned`);
await chrome.storage.local.set({ "__status": "no dates in " + consulate }); await chrome.storage.local.set({ "__status": "no dates in " + consulate });
config.countdown = SOFT_BAN_COUNTDOWN; config.countdown = SOFT_BAN_COUNTDOWN;
await chrome.storage.local.set({ "__countdown": config.countdown }); await chrome.storage.local.set({ "__countdown": config.countdown });
@ -382,7 +386,7 @@ async function runner() {
await chrome.storage.local.set({ "__consulates": config.consulates }); await chrome.storage.local.set({ "__consulates": config.consulates });
// filter dates with our requests // filter dates with our requests
let filteredDates = await filterDates(availDates, config.apptDate, 30, 3); let filteredDates = await filterDates(availDates, config.apptDate, config.deltaAppt, config.deltaNow);
if (!filteredDates.length) { if (!filteredDates.length) {
console.log('Nothing interesting found in ' + consulate); console.log('Nothing interesting found in ' + consulate);
await chrome.storage.local.set({ "__status": `Nothing in ${consulate}, best date ${availDates[0]}`}); await chrome.storage.local.set({ "__status": `Nothing in ${consulate}, best date ${availDates[0]}`});