qs: streamline weather condition detection in WeatherCard and LocationService

This commit is contained in:
2026-03-07 04:03:07 +01:00
parent 33671a768b
commit fda874e628
2 changed files with 16 additions and 9 deletions
@@ -17,15 +17,13 @@ UBox {
readonly property bool weatherReady: LocationService.data.weather !== null readonly property bool weatherReady: LocationService.data.weather !== null
// Test mode: set to "clear_day", "clear_night", "rain", "snow", "cloud" or "fog" // Test mode: set to "clear_day", "clear_night", "rain", "snow", "cloud" or "fog"
property string testEffects: "" property string testEffects: ""
// Weather condition detection // Weather condition detection (delegates to LocationService, with testEffects override)
readonly property int currentWeatherCode: weatherReady ? LocationService.data.weather.current_weather.weathercode : 0 readonly property bool isRaining: testEffects === "rain" || (testEffects === "" && LocationService.isRaining)
readonly property bool isDayTime: weatherReady ? LocationService.data.weather.current_weather.is_day : true readonly property bool isSnowing: testEffects === "snow" || (testEffects === "" && LocationService.isSnowing)
readonly property bool isRaining: testEffects === "rain" || (testEffects === "" && ((currentWeatherCode >= 51 && currentWeatherCode <= 67) || (currentWeatherCode >= 80 && currentWeatherCode <= 82))) readonly property bool isCloudy: testEffects === "cloud" || (testEffects === "" && LocationService.isCloudy)
readonly property bool isSnowing: testEffects === "snow" || (testEffects === "" && ((currentWeatherCode >= 71 && currentWeatherCode <= 77) || (currentWeatherCode >= 85 && currentWeatherCode <= 86))) readonly property bool isFoggy: testEffects === "fog" || (testEffects === "" && LocationService.isFoggy)
readonly property bool isCloudy: testEffects === "cloud" || (testEffects === "" && (currentWeatherCode === 3)) readonly property bool isClearDay: testEffects === "clear_day" || (testEffects === "" && LocationService.isClearDay)
readonly property bool isFoggy: testEffects === "fog" || (testEffects === "" && (currentWeatherCode >= 40 && currentWeatherCode <= 49)) readonly property bool isClearNight: testEffects === "clear_night" || (testEffects === "" && LocationService.isClearNight)
readonly property bool isClearDay: testEffects === "clear_day" || (testEffects === "" && (currentWeatherCode === 0 && isDayTime))
readonly property bool isClearNight: testEffects === "clear_night" || (testEffects === "" && (currentWeatherCode === 0 && !isDayTime))
implicitHeight: Math.max(100, content.implicitHeight + Style.marginXL * 2) implicitHeight: Math.max(100, content.implicitHeight + Style.marginXL * 2)
@@ -27,6 +27,15 @@ Singleton {
const lon = parseFloat(root.stableLongitude).toFixed(4); const lon = parseFloat(root.stableLongitude).toFixed(4);
return `${lat}, ${lon}`; return `${lat}, ${lon}`;
} }
// Weather condition detection
readonly property int currentWeatherCode: data.weather ? data.weather.current_weather.weathercode : -1
readonly property bool isDayTime: data.weather ? data.weather.current_weather.is_day : true
readonly property bool isRaining: currentWeatherCode >= 0 && ((currentWeatherCode >= 51 && currentWeatherCode <= 67) || (currentWeatherCode >= 80 && currentWeatherCode <= 82) || (currentWeatherCode >= 95 && currentWeatherCode <= 99))
readonly property bool isSnowing: currentWeatherCode >= 0 && ((currentWeatherCode >= 71 && currentWeatherCode <= 77) || (currentWeatherCode >= 85 && currentWeatherCode <= 86))
readonly property bool isCloudy: currentWeatherCode >= 0 && (currentWeatherCode === 2 || currentWeatherCode === 3)
readonly property bool isFoggy: currentWeatherCode >= 0 && (currentWeatherCode >= 40 && currentWeatherCode <= 49)
readonly property bool isClearDay: currentWeatherCode >= 0 && (currentWeatherCode === 0 || currentWeatherCode === 1) && isDayTime
readonly property bool isClearNight: currentWeatherCode >= 0 && (currentWeatherCode === 0 || currentWeatherCode === 1) && !isDayTime
function init() { function init() {
Logger.i("Location", "Service started"); Logger.i("Location", "Service started");