diff --git a/.config/ags/widgets/bar/system.js b/.config/ags/widgets/bar/system.js index 1ca2fcc9a..a29f4b68b 100644 --- a/.config/ags/widgets/bar/system.js +++ b/.config/ags/widgets/bar/system.js @@ -12,6 +12,13 @@ import { WWO_CODE, WEATHER_SYMBOL, NIGHT_WEATHER_SYMBOL } from '../../data/weath const BATTERY_LOW = 20; const WEATHER_CACHE_FOLDER = `${GLib.get_user_cache_dir()}/ags/weather`; Utils.exec(`mkdir -p ${WEATHER_CACHE_FOLDER}`); +let WEATHER_CITY = ''; +// try to read envvar AGS_WEATHER_CITY +try { + WEATHER_CITY = GLib.getenv('AGS_WEATHER_CITY'); +} catch (e) { + print(e); +} const BatBatteryProgress = () => { const _updateProgress = (circprog) => { // Set circular progress value @@ -155,15 +162,24 @@ const BatteryModule = () => Stack({ ], setup: (self) => self.poll(900000, async (self) => { const WEATHER_CACHE_PATH = WEATHER_CACHE_FOLDER + '/wttr.in.txt'; - Utils.execAsync('curl ipinfo.io') + const updateWeatherForCity = (city) => execAsync(`curl https://wttr.in/${city}?format=j1`) .then(output => { - return JSON.parse(output)['city'].toLowerCase(); - }) - .then((city) => execAsync(`curl https://wttr.in/${city}?format=j1`) - .then(output => { - const weather = JSON.parse(output); - Utils.writeFile(JSON.stringify(weather), WEATHER_CACHE_PATH) - .catch(print); + const weather = JSON.parse(output); + Utils.writeFile(JSON.stringify(weather), WEATHER_CACHE_PATH) + .catch(print); + const weatherCode = weather.current_condition[0].weatherCode; + const weatherDesc = weather.current_condition[0].weatherDesc[0].value; + const temperature = weather.current_condition[0].temp_C; + const feelsLike = weather.current_condition[0].FeelsLikeC; + const weatherSymbol = WEATHER_SYMBOL[WWO_CODE[weatherCode]]; + self.children[0].label = weatherSymbol; + self.children[1].label = `${temperature}℃ • Feels like ${feelsLike}℃`; + self.tooltipText = weatherDesc; + }).catch((err) => { + try { // Read from cache + const weather = JSON.parse( + Utils.readFile(WEATHER_CACHE_PATH) + ); const weatherCode = weather.current_condition[0].weatherCode; const weatherDesc = weather.current_condition[0].weatherDesc[0].value; const temperature = weather.current_condition[0].temp_C; @@ -172,23 +188,20 @@ const BatteryModule = () => Stack({ self.children[0].label = weatherSymbol; self.children[1].label = `${temperature}℃ • Feels like ${feelsLike}℃`; self.tooltipText = weatherDesc; - }).catch((err) => { - try { // Read from cache - const weather = JSON.parse( - Utils.readFile(WEATHER_CACHE_PATH) - ); - const weatherCode = weather.current_condition[0].weatherCode; - const weatherDesc = weather.current_condition[0].weatherDesc[0].value; - const temperature = weather.current_condition[0].temp_C; - const feelsLike = weather.current_condition[0].FeelsLikeC; - const weatherSymbol = WEATHER_SYMBOL[WWO_CODE[weatherCode]]; - self.children[0].label = weatherSymbol; - self.children[1].label = `${temperature}℃ • Feels like ${feelsLike}℃`; - self.tooltipText = weatherDesc; - } catch (err) { - print(err); - } - })); + } catch (err) { + print(err); + } + }); + if (WEATHER_CITY != '' && WEATHER_CITY != null) { + updateWeatherForCity(WEATHER_CITY); + } + else { + Utils.execAsync('curl ipinfo.io') + .then(output => { + return JSON.parse(output)['city'].toLowerCase(); + }) + .then(updateWeatherForCity); + } }), }) }),