Created
August 31, 2024 18:21
-
-
Save fruitsaladchan/a227e71098ef5914795061c73ed33866 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
const BatteryModule = () => Stack({ | |
transition: 'slide_up_down', | |
transitionDuration: userOptions.animations.durationLarge, | |
children: { | |
'laptop': Box({ | |
className: 'spacing-h-4', | |
children: [ | |
BarGroup({ | |
child: Box({ | |
hexpand: true, | |
hpack: 'center', | |
className: 'spacing-h-4 txt-onSurfaceVariant', | |
children: [ | |
MaterialIcon('device_thermostat', 'small'), | |
Label({ | |
label: 'Weather', | |
}) | |
], | |
setup: (self) => self.poll(900000, async (self) => { | |
const WEATHER_CACHE_PATH = WEATHER_CACHE_FOLDER + '/wttr.in.txt'; | |
const updateWeatherForCity = (city) => execAsync(`curl https://wttr.in/${city.replace(/ /g, '%20')}?format=j1`) | |
.then(output => { | |
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_${userOptions.weather.preferredUnit}`]; | |
const feelsLike = weather.current_condition[0][`FeelsLike${userOptions.weather.preferredUnit}`]; | |
const weatherSymbol = WEATHER_SYMBOL[WWO_CODE[weatherCode]]; | |
self.children[0].label = weatherSymbol; | |
self.children[1].label = `${temperature}°${userOptions.weather.preferredUnit} • Feels like ${feelsLike}°${userOptions.weather.preferredUnit}`; | |
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_${userOptions.weather.preferredUnit}`]; | |
const feelsLike = weather.current_condition[0][`FeelsLike${userOptions.weather.preferredUnit}`]; | |
const weatherSymbol = WEATHER_SYMBOL[WWO_CODE[weatherCode]]; | |
self.children[0].label = weatherSymbol; | |
self.children[1].label = `${temperature}°${userOptions.weather.preferredUnit} • Feels like ${feelsLike}°${userOptions.weather.preferredUnit}`; | |
self.tooltipText = weatherDesc; | |
} catch (err) { | |
print(err); | |
} | |
}); | |
if (userOptions.weather.city != '' && userOptions.weather.city != null) { | |
updateWeatherForCity(userOptions.weather.city.replace(/ /g, '%20')); | |
} | |
else { | |
Utils.execAsync('curl ipinfo.io') | |
.then(output => { | |
return JSON.parse(output)['city'].toLowerCase(); | |
}) | |
.then(updateWeatherForCity) | |
.catch(print) | |
} | |
}), | |
}) | |
}), | |
BarGroup({ child: Utilities() }), | |
BarGroup({ child: BarBattery() }), | |
] | |
}), | |
'desktop': BarGroup({ | |
child: Box({ | |
hexpand: true, | |
hpack: 'center', | |
className: 'spacing-h-4 txt-onSurfaceVariant', | |
children: [ | |
MaterialIcon('device_thermostat', 'small'), | |
Label({ | |
label: 'Weather', | |
}) | |
], | |
setup: (self) => self.poll(900000, async (self) => { | |
const WEATHER_CACHE_PATH = WEATHER_CACHE_FOLDER + '/wttr.in.txt'; | |
const updateWeatherForCity = (city) => execAsync(`curl https://wttr.in/${city.replace(/ /g, '%20')}?format=j1`) | |
.then(output => { | |
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_${userOptions.weather.preferredUnit}`]; | |
const feelsLike = weather.current_condition[0][`FeelsLike${userOptions.weather.preferredUnit}`]; | |
const weatherSymbol = WEATHER_SYMBOL[WWO_CODE[weatherCode]]; | |
self.children[0].label = weatherSymbol; | |
self.children[1].label = `${temperature}°${userOptions.weather.preferredUnit} • Feels like ${feelsLike}°${userOptions.weather.preferredUnit}`; | |
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_${userOptions.weather.preferredUnit}`]; | |
const feelsLike = weather.current_condition[0][`FeelsLike${userOptions.weather.preferredUnit}`]; | |
const weatherSymbol = WEATHER_SYMBOL[WWO_CODE[weatherCode]]; | |
self.children[0].label = weatherSymbol; | |
self.children[1].label = `${temperature}°${userOptions.weather.preferredUnit} • Feels like ${feelsLike}°${userOptions.weather.preferredUnit}`; | |
self.tooltipText = weatherDesc; | |
} catch (err) { | |
print(err); | |
} | |
}); | |
if (userOptions.weather.city != '' && userOptions.weather.city != null) { | |
updateWeatherForCity(userOptions.weather.city.replace(/ /g, '%20')); | |
} | |
else { | |
Utils.execAsync('curl ipinfo.io') | |
.then(output => { | |
return JSON.parse(output)['city'].toLowerCase(); | |
}) | |
.then(updateWeatherForCity) | |
.catch(print) | |
} | |
}), | |
}) | |
}), | |
}, | |
setup: (stack) => Utils.timeout(10, () => { | |
if (!Battery.available) stack.shown = 'desktop'; | |
else stack.shown = 'laptop'; | |
}) | |
}) | |
:)
my weather was broken for some reason and using yours (and removing the laptop section because I'm on pc) made it work again! thank you
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
thanks for this bruh it works pretty well