function log_ts(message) { console.log(new Date().toISOString() + " " + message); } async function checkDates() { log_ts('checkDates start'); config.countdown = config.frequency * minute; await chrome.storage.local.set({ "__countdown": config.countdown }); log_ts('checkDates done'); } async function runner() { // log_ts('runner start'); let prev_config = Object.assign({}, config); let result = await new Promise(resolve => chrome.storage.local.get(null, resolve)); config.activate = result['__activate'] || false; config.username = result['__username'] || ""; config.password = result['__password'] || ""; config.frequency = result['__frequency'] || 1; config.countdown = result['__countdown'] || 0; if (prev_config.activate === null) { log_ts('Reading config: ' + JSON.stringify(config)); return; } let configChanged = false; for (let key in config) { if (config.hasOwnProperty(key) && config[key] !== prev_config[key]) { log_ts(`Config change: ${key}, ${prev_config[key]} => ${config[key]}`); configChanged = true; // reduce countdown if frequency is reduced if (key === 'frequency') { let max_countdown = config[key] * minute; if (config.countdown > max_countdown) { config.countdown = max_countdown; await chrome.storage.local.set({ "__countdown": config.countdown }); } } } } if (configChanged) { // print whole config log_ts(JSON.stringify(config)); } if (config.activate && !prev_config.activate) { log_ts('Activating extension'); config.countdown = 5; } if (!config.activate) { // reset countdown when deactivating the extension if (prev_config.activate) { log_ts('Deactivating extension'); config.countdown = 0; await chrome.storage.local.set({ "__countdown": config.countdown }); } return; } if (config.username === "" || config.password === "") { log_ts('Username or password is empty'); return; } if (config.frequency <= 0) { log_ts('Frequency is 0'); return; } if (config.countdown > 0) { config.countdown -= 1; log_ts(`Countdown: ${config.countdown}`); await chrome.storage.local.set({ "__countdown": config.countdown }); return; } checkDates(); // log_ts('runner done'); } let config = { activate: null, username: null, password: null, frequency: null, countdown: null, }; let minute = 60; setInterval(runner, 1000);