From 122bbab555725eaf098a4e4429ebd75265815c69 Mon Sep 17 00:00:00 2001 From: ztimson Date: Wed, 24 Jun 2026 15:59:35 -0400 Subject: [PATCH] Added daytime property --- server/src/openweather.mjs | 125 +++++++++++++++++++------------------ 1 file changed, 63 insertions(+), 62 deletions(-) diff --git a/server/src/openweather.mjs b/server/src/openweather.mjs index 38a66b0..68a5f17 100644 --- a/server/src/openweather.mjs +++ b/server/src/openweather.mjs @@ -1,76 +1,77 @@ -import { existsSync, mkdirSync, writeFileSync } from 'fs' -import { resolve, dirname } from 'path' -import { fileURLToPath } from 'url' +import {existsSync, mkdirSync, writeFileSync} from 'fs'; +import {resolve, dirname} from 'path'; +import {fileURLToPath} from 'url'; -const DIR = resolve(dirname(fileURLToPath(import.meta.url)), 'public', 'icons') +const DIR = resolve(dirname(fileURLToPath(import.meta.url)), 'public', 'icons'); export const WMO = { - 0: { label: 'Clear Sky', icon: '01d' }, - 1: { label: 'Mainly Clear', icon: '01d' }, - 2: { label: 'Partly Cloudy', icon: '02d' }, - 3: { label: 'Overcast', icon: '04d' }, - 45: { label: 'Fog', icon: '50d' }, - 48: { label: 'Icy Fog', icon: '50d' }, - 51: { label: 'Light Drizzle', icon: '09d' }, - 53: { label: 'Drizzle', icon: '09d' }, - 55: { label: 'Heavy Drizzle', icon: '09d' }, - 61: { label: 'Light Rain', icon: '10d' }, - 63: { label: 'Rain', icon: '10d' }, - 65: { label: 'Heavy Rain', icon: '10d' }, - 71: { label: 'Light Snow', icon: '13d' }, - 73: { label: 'Snow', icon: '13d' }, - 75: { label: 'Heavy Snow', icon: '13d' }, - 77: { label: 'Snow Grains', icon: '13d' }, - 80: { label: 'Light Showers', icon: '09d' }, - 81: { label: 'Showers', icon: '09d' }, - 82: { label: 'Heavy Showers', icon: '09d' }, - 85: { label: 'Snow Showers', icon: '13d' }, - 86: { label: 'Heavy Snow Showers', icon: '13d' }, - 95: { label: 'Thunderstorm', icon: '11d' }, - 96: { label: 'Thunderstorm w/ Hail', icon: '11d' }, - 99: { label: 'Thunderstorm w/ Hail', icon: '11d' }, -} + 0: {label: 'Clear Sky', icon: '01d'}, + 1: {label: 'Mainly Clear', icon: '01d'}, + 2: {label: 'Partly Cloudy', icon: '02d'}, + 3: {label: 'Overcast', icon: '04d'}, + 45: {label: 'Fog', icon: '50d'}, + 48: {label: 'Icy Fog', icon: '50d'}, + 51: {label: 'Light Drizzle', icon: '09d'}, + 53: {label: 'Drizzle', icon: '09d'}, + 55: {label: 'Heavy Drizzle', icon: '09d'}, + 61: {label: 'Light Rain', icon: '10d'}, + 63: {label: 'Rain', icon: '10d'}, + 65: {label: 'Heavy Rain', icon: '10d'}, + 71: {label: 'Light Snow', icon: '13d'}, + 73: {label: 'Snow', icon: '13d'}, + 75: {label: 'Heavy Snow', icon: '13d'}, + 77: {label: 'Snow Grains', icon: '13d'}, + 80: {label: 'Light Showers', icon: '09d'}, + 81: {label: 'Showers', icon: '09d'}, + 82: {label: 'Heavy Showers', icon: '09d'}, + 85: {label: 'Snow Showers', icon: '13d'}, + 86: {label: 'Heavy Snow Showers', icon: '13d'}, + 95: {label: 'Thunderstorm', icon: '11d'}, + 96: {label: 'Thunderstorm w/ Hail', icon: '11d'}, + 99: {label: 'Thunderstorm w/ Hail', icon: '11d'}, +}; export async function downloadIcons() { - if (!existsSync(DIR)) mkdirSync(DIR, { recursive: true }) - const icons = new Set(Object.values(WMO).map(w => [w.icon, w.icon.replace('d','n')]).flat()) - await Promise.all([...icons].map(async icon => { - const path = resolve(DIR, `${icon}.png`) - if (existsSync(path)) return - const res = await fetch(`https://openweathermap.org/img/wn/${icon}@2x.png`) - const buf = Buffer.from(await res.arrayBuffer()) - writeFileSync(path, buf) - console.log(` 📥 Downloaded icon: ${icon}.png`) - })) - console.log('✅ Weather icons ready') + if(!existsSync(DIR)) mkdirSync(DIR, {recursive: true}); + const icons = new Set(Object.values(WMO).map(w => [w.icon, w.icon.replace('d', 'n')]).flat()); + await Promise.all([...icons].map(async icon => { + const path = resolve(DIR, `${icon}.png`); + if(existsSync(path)) return; + const res = await fetch(`https://openweathermap.org/img/wn/${icon}@2x.png`); + const buf = Buffer.from(await res.arrayBuffer()); + writeFileSync(path, buf); + console.log(` 📥 Downloaded icon: ${icon}.png`); + })); + console.log('✅ Weather icons ready'); } export function getWeatherCondition(data) { - // Determine primary condition - if (data.lightning_rate > 0 && data.raining === "True") { - return { label: "Thunderstorm", code: 211, icon: "11d" }; - } + // Determine primary condition + if(data.lightning_rate > 0 && data.raining === 'True') { + return {label: 'Thunderstorm', code: 211, icon: '11d'}; + } - if (data.raining === "True") { - if (data.precipitation > 7.6) return { label: "Heavy Rain", code: 502, icon: "10d" }; - if (data.precipitation > 2.5) return { label: "Moderate Rain", code: 501, icon: "10d" }; - return { label: "Light Rain", code: 500, icon: "09d" }; - } + if(data.raining === 'True') { + if(data.precipitation > 7.6) return {label: 'Heavy Rain', code: 502, icon: '10d'}; + if(data.precipitation > 2.5) return {label: 'Moderate Rain', code: 501, icon: '10d'}; + return {label: 'Light Rain', code: 500, icon: '09d'}; + } - if (data.visibility < 10) { - return { label: "Mist", code: 701, icon: "50d" }; - } + if(data.visibility < 10) { + return {label: 'Mist', code: 701, icon: '50d'}; + } - // Cloud-based conditions - if(data.daytime == null) - data.daytime = data.time.getTime() >= new Date(data.sunrise).getTime() && data.time.getTime() <= new Date(data.sunset).getTime(); - const isDay = data.daytime; - const dayNight = isDay ? "d" : "n"; + console.log('daytime:',data.daytime); + // Cloud-based conditions + if(data.daytime == null) + data.daytime = data.time.getTime() >= new Date(data.sunrise).getTime() && data.time.getTime() <= new Date(data.sunset).getTime(); + console.log(data.time, data.sunrise, data.sunset, data.daytime); + const dayNight = data.daytime ? 'd' : 'n'; - if (data.clouds > 85) return { label: "Overcast Clouds", code: 804, icon: `04${dayNight}` }; - if (data.clouds > 50) return { label: "Broken Clouds", code: 803, icon: `04${dayNight}` }; - if (data.clouds > 25) return { label: "Scattered Clouds",code: 802, icon: `03${dayNight}` }; - if (data.clouds > 10) return { label: "Few Clouds", code: 801, icon: `02${dayNight}` }; + if(data.clouds > 85) return {label: 'Overcast Clouds', code: 804, icon: `04${dayNight}`}; + if(data.clouds > 50) return {label: 'Broken Clouds', code: 803, icon: `04${dayNight}`}; + if(data.clouds > 25) return {label: 'Scattered Clouds', code: 802, icon: `03${dayNight}`}; + if(data.clouds > 10) return {label: 'Few Clouds', code: 801, icon: `02${dayNight}`}; - return { label: "Clear Sky", code: 800, icon: `01${dayNight}` }; + return {label: 'Clear Sky', code: 800, icon: `01${dayNight}`}; }