diff --git a/applets/weather/package/contents/ui/main.qml b/applets/weather/package/contents/ui/main.qml --- a/applets/weather/package/contents/ui/main.qml +++ b/applets/weather/package/contents/ui/main.qml @@ -42,57 +42,78 @@ var model = {}; var data = weatherDataSource.currentData; - var reportTemperatureUnit = (data && data["Temperature Unit"]) || invalidUnit; - var reportPressureUnit = (data && data["Pressure Unit"]) || invalidUnit; - var reportVisibilityUnit = (data && data["Visibility Unit"]) || invalidUnit; - var reportWindSpeedUnit = (data && data["Wind Speed Unit"]) || invalidUnit; + function getUnit(key) { + return (data && data[key]) || invalidUnit; + } + function getString(key) { + return (data && data[key]) || ""; + } + function getNumber(key) { + var number = data && data[key]; + if (number !== 0) { + number = number || null; + } + return number; + } + function getNumberOrString(key) { + var number = data && data[key]; + if (number !== 0) { + number = number || null; + } + return number; + } + + var reportTemperatureUnit = getUnit("Temperature Unit"); + var reportPressureUnit = getUnit("Pressure Unit"); + var reportVisibilityUnit = getUnit("Visibility Unit"); + var reportWindSpeedUnit = getUnit("Wind Speed Unit"); - model["conditions"] = (data && data["Current Conditions"]) || ""; + model["conditions"] = getString("Current Conditions"); - var conditionIconName = (data && data["Condition Icon"]) || null; + var conditionIconName = getString("Condition Icon"); model["conditionIconName"] = conditionIconName ? Util.existingWeatherIconName(conditionIconName) : "weather-none-available"; - var temperature = (data && data["Temperature"]) || null; + var temperature = getNumber("Temperature"); model["temperature"] = temperature !== null ? Util.temperatureToDisplayString(displayTemperatureUnit, temperature, reportTemperatureUnit) : ""; - var windchill = (data && data["Windchill"]) || null; + var windchill = getNumber("Windchill"); // Use temperature unit to convert windchill temperature // we only show degrees symbol not actual temperature unit model["windchill"] = windchill !== null ? Util.temperatureToDisplayString(displayTemperatureUnit, windchill, reportTemperatureUnit, false, true) : ""; - var humidex = (data && data["Humidex"]) || null; + var humidex = getNumber("Humidex"); // TODO: this seems wrong, does the humidex have temperature as units? // Use temperature unit to convert humidex temperature // we only show degrees symbol not actual temperature unit model["humidex"] = humidex !== null ? Util.temperatureToDisplayString(displayTemperatureUnit, humidex, reportTemperatureUnit, false, true) : ""; - var dewpoint = (data && data["Dewpoint"]) || null; + var dewpoint = getNumber("Dewpoint"); model["dewpoint"] = dewpoint !== null ? Util.temperatureToDisplayString(displayTemperatureUnit, dewpoint, reportTemperatureUnit) : ""; - var pressure = (data && data["Pressure"]) || null; + var pressure = getNumber("Pressure"); model["pressure"] = pressure ? Util.valueToDisplayString(displayPressureUnit, pressure, reportPressureUnit, 2) : ""; var pressureTendency = (data && data["Pressure Tendency"]) || null; model["pressureTendency"] = pressureTendency ? i18nc("pressure tendency", pressureTendency) : ""; - var visibility = (data && data["Visibility"]) || null; + var visibility = getNumberOrString("Visibility"); model["visibility"] = visibility ? ((reportVisibilityUnit !== invalidUnit) ? Util.valueToDisplayString(displayVisibilityUnit, visibility, reportVisibilityUnit, 1) : visibility) : ""; - var humidity = (data && data["Humidity"]) || null; + var humidity = getNumber("Humidity"); model["humidity"] = humidity ? Util.percentToDisplayString(humidity) : ""; // TODO: missing check for windDirection validness - var windDirection = (data && data["Wind Direction"]) || null; - var windSpeed = (data && data["Wind Speed"]) || null; + var windDirection = getString("Wind Direction"); + var windSpeed = getNumberOrString("Wind Speed"); var windSpeedText; if (windSpeed !== null && windSpeed !== "") { var windSpeedNumeric = (typeof windSpeed !== 'number') ? parseFloat(windSpeed) : windSpeed; @@ -108,10 +129,10 @@ } } model["windSpeed"] = windSpeedText || ""; - model["windDirectionId"] = windDirection || ""; + model["windDirectionId"] = windDirection; model["windDirection"] = windDirection ? i18nc("wind direction", windDirection) : ""; - var windGust = (data && data["Wind Gust"]) || null; + var windGust = getNumber("Wind Gust"); model["windGust"] = windGust ? Util.valueToDisplayString(displaySpeedUnit, windGust, reportWindSpeedUnit, 1) : ""; return model; @@ -121,13 +142,17 @@ var model = {}; var data = weatherDataSource.currentData; - var todayForecastTokens = ((data && data["Short Forecast Day 0"]) || "").split("|"); + function getString(key) { + return (data && data[key]) || ""; + } - model["location"] = (data && data["Place"]) || ""; - model["courtesy"] = (data && data["Credit"]) || ""; - model["creditUrl"] = (data && data["Credit Url"]) || ""; + var todayForecastTokens = getString("Short Forecast Day 0").split("|"); - var forecastDayCount = parseInt((data && data["Total Weather Days"]) || ""); + model["location"] = getString("Place"); + model["courtesy"] = getString("Credit"); + model["creditUrl"] = getString("Credit Url"); + + var forecastDayCount = parseInt(getString("Total Weather Days")); var forecastTitle; if (!isNaN(forecastDayCount) && forecastDayCount > 0) { forecastTitle = i18ncp("Forecast period timeframe", "1 Day", "%1 Days", forecastDayCount);