// ==UserScript==
// @name Refresh Timer Control with Notification
// @namespace http://tampermonkey.net/
// @version 1.0
// @description Add a continuous timer control panel with sound notification for
appointments and auto-refresh
// @author You
// @match https://fr.tlscontact.com/appointment/ma/maOUD2fr/17247736
// @match https://fr.tlscontact.com/visa/ma*
// @match https://fr.tlscontact.com/visa/ma
// @grant none
// ==/UserScript==
(function() {
'use strict';
const style = `
#controlPanel {
position: fixed;
top: 10px;
right: 10px;
background: #fff;
border: 1px solid #000;
padding: 10px;
z-index: 9999;
font-size: 12px;
}
#controlPanel button {
display: block;
margin: 5px;
padding: 10px;
border: none;
color: white;
cursor: pointer;
}
#controlPanel #startButton {
background: green;
}
#controlPanel #stopButton {
background: red;
}
#controlPanel #setRateButton {
background: blue;
}
#controlPanel #timer {
display: block;
margin-top: 10px;
}
#controlPanel #rateInput {
margin-top: 10px;
width: 60px;
}
`;
const styleSheet = document.createElement("style");
styleSheet.type = "text/css";
styleSheet.innerText = style;
document.head.appendChild(styleSheet);
const controlPanel = document.createElement('div');
controlPanel.id = 'controlPanel';
controlPanel.innerHTML = `
<button id="startButton">Start Refresh</button>
<button id="stopButton">Stop Refresh</button>
<input id="rateInput" type="number" value="10" min="1" step="1" /> seconds
<button id="setRateButton">Set Refresh Rate</button>
<div id="timer">Auto-refresh stopped.</div>
`;
document.body.appendChild(controlPanel);
// Adding notification sound
const notificationSound = new Audio('C:\Users\jaouad\Downloads\Music'); // Bell
sound
let refreshTimeout;
let refreshRate = parseInt(localStorage.getItem('refreshRate')) || 10000;
let isRefreshing = localStorage.getItem('isRefreshing') === 'true';
let timeRemaining = parseInt(localStorage.getItem('timeRemaining')) ||
refreshRate;
function updateTimer() {
const seconds = Math.ceil(timeRemaining / 1000);
document.getElementById('timer').innerText = `Next refresh in ${seconds}
seconds.`;
}
function scheduleRefresh() {
refreshTimeout = setInterval(() => {
timeRemaining -= 1000;
updateTimer();
if (timeRemaining <= 0) {
localStorage.setItem('timeRemaining', refreshRate);
notificationSound.play().catch(error => {
console.error('Error playing sound:', error);
});
location.reload();
}
localStorage.setItem('timeRemaining', timeRemaining);
}, 1000);
}
function startRefreshing() {
if (!isRefreshing) {
isRefreshing = true;
localStorage.setItem('isRefreshing', 'true');
localStorage.setItem('timeRemaining', refreshRate);
scheduleRefresh();
}
}
function stopRefreshing() {
if (isRefreshing) {
isRefreshing = false;
clearInterval(refreshTimeout);
localStorage.setItem('isRefreshing', 'false');
document.getElementById('timer').innerText = 'Auto-refresh stopped.';
}
}
function setRefreshRate() {
const rate = parseInt(document.getElementById('rateInput').value, 10);
if (!isNaN(rate) && rate > 0) {
refreshRate = rate * 1000;
localStorage.setItem('refreshRate', refreshRate);
timeRemaining = refreshRate;
if (isRefreshing) {
clearInterval(refreshTimeout);
scheduleRefresh();
}
}
}
document.getElementById('startButton').addEventListener('click',
startRefreshing);
document.getElementById('stopButton').addEventListener('click',
stopRefreshing);
document.getElementById('setRateButton').addEventListener('click',
setRefreshRate);
if (isRefreshing) {
scheduleRefresh();
}
updateTimer();
})();