diff --git a/_locales/de/messages.json b/_locales/de/messages.json index e1d21d0..8f93d62 100644 --- a/_locales/de/messages.json +++ b/_locales/de/messages.json @@ -48,5 +48,14 @@ }, "closed": { "message": "geschlossen" + }, + "badgeOpen": { + "message": "open" + }, + "badgeClosed": { + "message": " " + }, + "badgeEvent": { + "message": " " } } diff --git a/_locales/en/messages.json b/_locales/en/messages.json index 16a258c..f1f29b4 100644 --- a/_locales/en/messages.json +++ b/_locales/en/messages.json @@ -48,5 +48,14 @@ }, "closed": { "message": "closed" + }, + "badgeOpen": { + "message": "open" + }, + "badgeClosed": { + "message": " " + }, + "badgeEvent": { + "message": " " } } diff --git a/src/background.js b/src/background.js index 1b55f1f..82de88e 100644 --- a/src/background.js +++ b/src/background.js @@ -30,28 +30,33 @@ function fetchSpaceApi() { async function fetchNewData() { try { - const calendarJson = await fetchCalendar(); - window.calendar = calendarJson; - } catch (error) { - console.error(error); - } + const result = await Promise.allSettled([fetchCalendar(), fetchSpaceApi()]); + const calendarJson = result[0].value; + const spaceApiJson = result[1].value; - try { - const spaceApiJson = await fetchSpaceApi(); + if (spaceApiJson) { + const now = new Date(); + const eventActive = calendarJson?.some((event) => ( + new Date(event.begin) <= now && now <= new Date(event.end) + )) ?? false; - await browser.browserAction.setBadgeBackgroundColor({color: Config.openColor}); - await browser.browserAction.setBadgeText({text: spaceApiJson.state.open ? 'open' : ''}); + const badgeText = browser.i18n.getMessage(spaceApiJson.state.open ? 'badgeOpen' : eventActive ? 'badgeEvent' : 'badgeClosed'); + const badgeBgColor = spaceApiJson.state.open ? Config.openColor : eventActive ? Config.eventColor : Config.closedColor; + await browser.browserAction.setBadgeText({text: badgeText}); + await browser.browserAction.setBadgeBackgroundColor({color: badgeBgColor}); - if (window.spaceApi && window.spaceApi.state.open !== spaceApiJson.state.open) { - const state = browser.i18n.getMessage(spaceApiJson.state.open ? 'open' : 'closed'); - await browser.notifications.create('status-change', { - type: 'basic', - title: browser.i18n.getMessage('stateNotificationTitle'), - message: browser.i18n.getMessage('stateNotificationMessage', state), - iconUrl: browser.runtime.getURL('src/icons/favicon.svg') - }); + if (window.spaceApi && window.spaceApi.state.open !== spaceApiJson.state.open) { + const state = browser.i18n.getMessage(spaceApiJson.state.open ? 'open' : 'closed'); + await browser.notifications.create('status-change', { + type: 'basic', + title: browser.i18n.getMessage('stateNotificationTitle'), + message: browser.i18n.getMessage('stateNotificationMessage', state), + iconUrl: browser.runtime.getURL('src/icons/favicon.svg') + }); + } } + window.calendar = calendarJson; window.spaceApi = spaceApiJson; } catch (error) { console.error(error); diff --git a/src/config.js b/src/config.js index 7eff372..3917e32 100644 --- a/src/config.js +++ b/src/config.js @@ -3,6 +3,8 @@ export default { spaceApiUrl: 'https://www.usrspace.at/spaceapi.json', calenderUrl: 'https://www.usrspace.at/calendar.php', openColor: '#33cc33', + closedColor: '#cc3333', + eventColor: '#9933cc', quickLinks: [ { url: 'https://www.usrspace.at/',