2021-07-17 18:38:00 +00:00
|
|
|
// based on https://stackoverflow.com/a/47009962
|
2022-04-16 18:25:42 +00:00
|
|
|
// it has been brought to my attention (many) times that this is horribly broken if the time
|
|
|
|
// on the "Change every" setting is longer than 1 minute. I wasn't going to wait days to see
|
|
|
|
// if the function worked, so i just assumed it did. i apologise. this function will be
|
|
|
|
// replaced entirely in the future probably
|
2021-08-21 10:11:00 +00:00
|
|
|
export default function interval(callback, interval, name) {
|
2021-07-17 18:38:00 +00:00
|
|
|
const key = name + 'interval';
|
2021-09-17 18:40:22 +00:00
|
|
|
const ms = localStorage.getItem(key);
|
2021-07-17 18:38:00 +00:00
|
|
|
const now = Date.now();
|
|
|
|
|
|
|
|
const executeCallback = () => {
|
|
|
|
localStorage.setItem(key, Date.now());
|
|
|
|
callback();
|
2021-08-21 10:11:00 +00:00
|
|
|
};
|
2021-07-17 18:38:00 +00:00
|
|
|
|
2021-09-17 18:40:22 +00:00
|
|
|
if (ms) {
|
|
|
|
const delta = now - parseInt(ms);
|
2021-07-17 18:38:00 +00:00
|
|
|
if (delta > interval) {
|
|
|
|
setInterval(executeCallback, interval);
|
|
|
|
} else {
|
|
|
|
setTimeout(() => {
|
|
|
|
setInterval(executeCallback, interval);
|
|
|
|
executeCallback();
|
|
|
|
}, interval - delta);
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
setInterval(executeCallback, interval);
|
|
|
|
}
|
2021-09-17 18:40:22 +00:00
|
|
|
|
2021-07-17 18:38:00 +00:00
|
|
|
localStorage.setItem(key, now);
|
|
|
|
}
|