summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
author2 * r + 2 * t <61896496+soramanew@users.noreply.github.com>2025-01-27 22:08:44 +1100
committer2 * r + 2 * t <61896496+soramanew@users.noreply.github.com>2025-01-27 22:08:44 +1100
commite06e29eeab642908c2c976637e46f582602a8e1b (patch)
tree20daadff4599fd5e5e7345557a41cce901d15c95 /src
parentsideright: make popdown window (diff)
downloadcaelestia-shell-e06e29eeab642908c2c976637e46f582602a8e1b.tar.gz
caelestia-shell-e06e29eeab642908c2c976637e46f582602a8e1b.tar.bz2
caelestia-shell-e06e29eeab642908c2c976637e46f582602a8e1b.zip
sideright: imperial weather
Diffstat (limited to 'src')
-rw-r--r--src/modules/popdowns/sideright.tsx12
-rw-r--r--src/services/weather.ts84
2 files changed, 54 insertions, 42 deletions
diff --git a/src/modules/popdowns/sideright.tsx b/src/modules/popdowns/sideright.tsx
index 86c0547..7dc1688 100644
--- a/src/modules/popdowns/sideright.tsx
+++ b/src/modules/popdowns/sideright.tsx
@@ -75,7 +75,7 @@ const Weather = () => {
/>
<box vertical halign={Gtk.Align.CENTER} valign={Gtk.Align.CENTER} className="status">
<box halign={Gtk.Align.CENTER} className="temperature">
- <label label={bind(weather, "temperature").as(t => `${Math.round(t)}°C`)} />
+ <label label={bind(weather, "temperature")} />
<label
className={bind(weather, "tempColour").as(c => `temp-icon ${c}`)}
label={bind(weather, "tempIcon")}
@@ -84,8 +84,8 @@ const Weather = () => {
<label label={bind(weather, "condition").as(c => ellipsize(c, 16))} />
</box>
<box vertical halign={Gtk.Align.END} valign={Gtk.Align.CENTER} className="other-data">
- <label xalign={0} label={bind(weather, "wind").as(w => ` ${Math.round(w)} kph`)} />
- <label xalign={0} label={bind(weather, "rainChance").as(r => ` ${r}%`)} />
+ <label xalign={0} label={bind(weather, "wind").as(w => ` ${w}`)} />
+ <label xalign={0} label={bind(weather, "rainChance").as(r => ` ${r}`)} />
</box>
</centerbox>
<box className="separator" />
@@ -101,12 +101,12 @@ const Weather = () => {
<label
className="icon"
label={bind(weather, "raw").as(r =>
- weather.getIcon(weather.forecast[getHoursFromUpdate(r, i + 1)]?.condition.text ?? "")
+ weather.getIcon(weather.forecast[getHoursFromUpdate(r, i + 1)].condition.text)
)}
/>
<label
- label={bind(weather, "raw").as(
- r => `${Math.round(weather.forecast[getHoursFromUpdate(r, i + 1)]?.temp_c) ?? "-"}°C`
+ label={bind(weather, "raw").as(r =>
+ weather.getTemp(weather.forecast[getHoursFromUpdate(r, i + 1)])
)}
/>
</box>
diff --git a/src/services/weather.ts b/src/services/weather.ts
index bf595fa..0de8ca5 100644
--- a/src/services/weather.ts
+++ b/src/services/weather.ts
@@ -102,37 +102,41 @@ export interface WeatherData {
location: WeatherLocation;
}
+const DEFAULT_STATE: _WeatherState = {
+ temp_c: 0,
+ temp_f: 0,
+ is_day: 0,
+ condition: { text: "", icon: "", code: 0 },
+ wind_mph: 0,
+ wind_kph: 0,
+ wind_degree: 0,
+ wind_dir: "N",
+ pressure_mb: 0,
+ pressure_in: 0,
+ precip_mm: 0,
+ precip_in: 0,
+ humidity: 0,
+ cloud: 0,
+ feelslike_c: 0,
+ feelslike_f: 0,
+ windchill_c: 0,
+ windchill_f: 0,
+ heatindex_c: 0,
+ heatindex_f: 0,
+ dewpoint_c: 0,
+ dewpoint_f: 0,
+ vis_km: 0,
+ vis_miles: 0,
+ uv: 0,
+ gust_mph: 0,
+ gust_kph: 0,
+};
+
const DEFAULT: WeatherData = {
current: {
last_updated_epoch: 0,
last_updated: "",
- temp_c: 0,
- temp_f: 0,
- is_day: 0,
- condition: { text: "", icon: "", code: 0 },
- wind_mph: 0,
- wind_kph: 0,
- wind_degree: 0,
- wind_dir: "N",
- pressure_mb: 0,
- pressure_in: 0,
- precip_mm: 0,
- precip_in: 0,
- humidity: 0,
- cloud: 0,
- feelslike_c: 0,
- feelslike_f: 0,
- windchill_c: 0,
- windchill_f: 0,
- heatindex_c: 0,
- heatindex_f: 0,
- dewpoint_c: 0,
- dewpoint_f: 0,
- vis_km: 0,
- vis_miles: 0,
- uv: 0,
- gust_mph: 0,
- gust_kph: 0,
+ ...DEFAULT_STATE,
},
forecast: {
forecastday: [
@@ -171,7 +175,11 @@ const DEFAULT: WeatherData = {
is_moon_up: 0,
is_sun_up: 0,
},
- hour: [],
+ hour: Array.from({ length: 24 }, () => ({
+ time_epoch: 0,
+ time: "",
+ ...DEFAULT_STATE,
+ })),
},
],
},
@@ -243,8 +251,6 @@ const STATUS_ICONS: Record<string, string> = {
moderate_or_heavy_snow_with_thunder: "󰼶",
};
-const TEMP_ICONS: Record<string, string> = {};
-
@register({ GTypeName: "Weather" })
export default class Weather extends GObject.Object {
static instance: Weather;
@@ -284,19 +290,21 @@ export default class Weather extends GObject.Object {
return this.#data.current.condition.text;
}
- @property(Number)
+ @property(String)
get temperature() {
- return this.#data.current.temp_c;
+ return this.getTemp(this.#data.current);
}
- @property(Number)
+ @property(String)
get wind() {
- return this.#data.current.wind_kph;
+ return `${Math.round(this.#data.current[`wind_${config.imperial ? "m" : "k"}ph`])} ${
+ config.imperial ? "m" : "k"
+ }ph`;
}
- @property(Number)
+ @property(String)
get rainChance() {
- return this.#data.forecast.forecastday[0].day.daily_chance_of_rain;
+ return this.#data.forecast.forecastday[0].day.daily_chance_of_rain + "%";
}
@property(String)
@@ -320,6 +328,10 @@ export default class Weather extends GObject.Object {
return STATUS_ICONS[query] ?? STATUS_ICONS.warning;
}
+ getTemp(data: _WeatherState) {
+ return `${Math.round(data[`temp_${config.imperial ? "f" : "c"}`])}°${config.imperial ? "F" : "C"}`;
+ }
+
getTempIcon(temp: number) {
if (temp >= 40) return "";
if (temp >= 30) return "";