Changeset View
Changeset View
Standalone View
Standalone View
applets/weather/package/contents/ui/main.qml
Show All 34 Lines | 25 | Item { | |||
---|---|---|---|---|---|
35 | property bool connectingToSource: false | 35 | property bool connectingToSource: false | ||
36 | readonly property bool needsConfiguration: !generalModel.location && !connectingToSource | 36 | readonly property bool needsConfiguration: !generalModel.location && !connectingToSource | ||
37 | 37 | | |||
38 | readonly property int invalidUnit: -1 //TODO: make KUnitConversion::InvalidUnit usable here | 38 | readonly property int invalidUnit: -1 //TODO: make KUnitConversion::InvalidUnit usable here | ||
39 | 39 | | |||
40 | // model providing final display strings for observation properties | 40 | // model providing final display strings for observation properties | ||
41 | readonly property var observationModel: { | 41 | readonly property var observationModel: { | ||
42 | var model = {}; | 42 | var model = {}; | ||
43 | var data = weatherDataSource.currentData; | 43 | var data = weatherDataSource.currentData || {}; | ||
44 | 44 | | |||
45 | var reportTemperatureUnit = (data && data["Temperature Unit"]) || invalidUnit; | 45 | function getNumber(key) { | ||
46 | var reportPressureUnit = (data && data["Pressure Unit"]) || invalidUnit; | 46 | var number = data[key]; | ||
47 | var reportVisibilityUnit = (data && data["Visibility Unit"]) || invalidUnit; | 47 | if (typeof number === "string") { | ||
48 | var reportWindSpeedUnit = (data && data["Wind Speed Unit"]) || invalidUnit; | 48 | var parsedNumber = parseFloat(number); | ||
49 | return isNaN(parsedNumber) ? null : parsedNumber; | ||||
50 | } | ||||
51 | return (typeof number !== "undefined") && (number !== "") ? number : null; | ||||
52 | } | ||||
53 | function getNumberOrString(key) { | ||||
54 | var number = data[key]; | ||||
55 | return (typeof number !== "undefined") && (number !== "") ? number : null; | ||||
56 | } | ||||
57 | | ||||
58 | var reportTemperatureUnit = data["Temperature Unit"] || invalidUnit; | ||||
59 | var reportPressureUnit = data["Pressure Unit"] || invalidUnit; | ||||
60 | var reportVisibilityUnit = data["Visibility Unit"] || invalidUnit; | ||||
61 | var reportWindSpeedUnit = data["Wind Speed Unit"] || invalidUnit; | ||||
49 | 62 | | |||
50 | model["conditions"] = (data && data["Current Conditions"]) || ""; | 63 | model["conditions"] = data["Current Conditions"] || ""; | ||
51 | 64 | | |||
52 | var conditionIconName = (data && data["Condition Icon"]) || null; | 65 | var conditionIconName = data["Condition Icon"] || null; | ||
53 | model["conditionIconName"] = conditionIconName ? Util.existingWeatherIconName(conditionIconName) : "weather-none-available"; | 66 | model["conditionIconName"] = conditionIconName ? Util.existingWeatherIconName(conditionIconName) : "weather-none-available"; | ||
54 | 67 | | |||
55 | var temperature = (data && data["Temperature"]) || null; | 68 | var temperature = getNumber("Temperature"); | ||
56 | model["temperature"] = temperature !== null ? Util.temperatureToDisplayString(displayTemperatureUnit, temperature, reportTemperatureUnit) : ""; | 69 | model["temperature"] = temperature !== null ? Util.temperatureToDisplayString(displayTemperatureUnit, temperature, reportTemperatureUnit) : ""; | ||
57 | 70 | | |||
58 | var windchill = (data && data["Windchill"]) || null; | 71 | var windchill = getNumber("Windchill"); | ||
59 | // Use temperature unit to convert windchill temperature | 72 | // Use temperature unit to convert windchill temperature | ||
60 | // we only show degrees symbol not actual temperature unit | 73 | // we only show degrees symbol not actual temperature unit | ||
61 | model["windchill"] = windchill !== null ? | 74 | model["windchill"] = windchill !== null ? | ||
62 | Util.temperatureToDisplayString(displayTemperatureUnit, windchill, reportTemperatureUnit, false, true) : | 75 | Util.temperatureToDisplayString(displayTemperatureUnit, windchill, reportTemperatureUnit, false, true) : | ||
63 | ""; | 76 | ""; | ||
64 | 77 | | |||
65 | var humidex = (data && data["Humidex"]) || null; | 78 | var humidex = getNumber("Humidex"); | ||
66 | // TODO: this seems wrong, does the humidex have temperature as units? | 79 | // TODO: this seems wrong, does the humidex have temperature as units? | ||
67 | // Use temperature unit to convert humidex temperature | 80 | // Use temperature unit to convert humidex temperature | ||
68 | // we only show degrees symbol not actual temperature unit | 81 | // we only show degrees symbol not actual temperature unit | ||
69 | model["humidex"] = humidex !== null ? | 82 | model["humidex"] = humidex !== null ? | ||
70 | Util.temperatureToDisplayString(displayTemperatureUnit, humidex, reportTemperatureUnit, false, true) : | 83 | Util.temperatureToDisplayString(displayTemperatureUnit, humidex, reportTemperatureUnit, false, true) : | ||
71 | ""; | 84 | ""; | ||
72 | 85 | | |||
73 | var dewpoint = (data && data["Dewpoint"]) || null; | 86 | var dewpoint = getNumber("Dewpoint"); | ||
74 | model["dewpoint"] = dewpoint !== null ? | 87 | model["dewpoint"] = dewpoint !== null ? | ||
75 | Util.temperatureToDisplayString(displayTemperatureUnit, dewpoint, reportTemperatureUnit) : ""; | 88 | Util.temperatureToDisplayString(displayTemperatureUnit, dewpoint, reportTemperatureUnit) : ""; | ||
76 | 89 | | |||
77 | var pressure = (data && data["Pressure"]) || null; | 90 | var pressure = getNumber("Pressure"); | ||
78 | model["pressure"] = pressure ? | 91 | model["pressure"] = pressure !== null ? | ||
79 | Util.valueToDisplayString(displayPressureUnit, pressure, reportPressureUnit, 2) : ""; | 92 | Util.valueToDisplayString(displayPressureUnit, pressure, reportPressureUnit, 2) : ""; | ||
80 | 93 | | |||
81 | var pressureTendency = (data && data["Pressure Tendency"]) || null; | 94 | var pressureTendency = (data && data["Pressure Tendency"]) || null; | ||
82 | model["pressureTendency"] = pressureTendency ? i18nc("pressure tendency", pressureTendency) : ""; | 95 | model["pressureTendency"] = pressureTendency ? i18nc("pressure tendency", pressureTendency) : ""; | ||
83 | 96 | | |||
84 | var visibility = (data && data["Visibility"]) || null; | 97 | var visibility = getNumberOrString("Visibility"); | ||
85 | model["visibility"] = visibility ? | 98 | model["visibility"] = visibility !== null ? | ||
86 | ((reportVisibilityUnit !== invalidUnit) ? | 99 | ((reportVisibilityUnit !== invalidUnit) ? | ||
87 | Util.valueToDisplayString(displayVisibilityUnit, visibility, reportVisibilityUnit, 1) : visibility) : | 100 | Util.valueToDisplayString(displayVisibilityUnit, visibility, reportVisibilityUnit, 1) : visibility) : | ||
88 | ""; | 101 | ""; | ||
89 | 102 | | |||
90 | var humidity = (data && data["Humidity"]) || null; | 103 | var humidity = getNumber("Humidity"); | ||
91 | model["humidity"] = humidity ? Util.percentToDisplayString(humidity) : ""; | 104 | model["humidity"] = humidity !== null ? Util.percentToDisplayString(humidity) : ""; | ||
92 | 105 | | |||
93 | // TODO: missing check for windDirection validness | 106 | // TODO: missing check for windDirection validness | ||
94 | var windDirection = (data && data["Wind Direction"]) || null; | 107 | var windDirection = data["Wind Direction"] || ""; | ||
95 | var windSpeed = (data && data["Wind Speed"]) || null; | 108 | var windSpeed = getNumberOrString("Wind Speed"); | ||
96 | var windSpeedText; | 109 | var windSpeedText; | ||
97 | if (windSpeed !== null && windSpeed !== "") { | 110 | if (windSpeed !== null && windSpeed !== "") { | ||
98 | var windSpeedNumeric = (typeof windSpeed !== 'number') ? parseFloat(windSpeed) : windSpeed; | 111 | var windSpeedNumeric = (typeof windSpeed !== 'number') ? parseFloat(windSpeed) : windSpeed; | ||
99 | if (!isNaN(windSpeedNumeric)) { | 112 | if (!isNaN(windSpeedNumeric)) { | ||
100 | if (windSpeedNumeric !== 0) { | 113 | if (windSpeedNumeric !== 0) { | ||
101 | windSpeedText = Util.valueToDisplayString(displaySpeedUnit, windSpeedNumeric, reportWindSpeedUnit, 1); | 114 | windSpeedText = Util.valueToDisplayString(displaySpeedUnit, windSpeedNumeric, reportWindSpeedUnit, 1); | ||
102 | } else { | 115 | } else { | ||
103 | windSpeedText = i18nc("Wind condition", "Calm"); | 116 | windSpeedText = i18nc("Wind condition", "Calm"); | ||
104 | } | 117 | } | ||
105 | } else { | 118 | } else { | ||
106 | // TODO: i18n? | 119 | // TODO: i18n? | ||
107 | windSpeedText = windSpeed; | 120 | windSpeedText = windSpeed; | ||
108 | } | 121 | } | ||
109 | } | 122 | } | ||
110 | model["windSpeed"] = windSpeedText || ""; | 123 | model["windSpeed"] = windSpeedText || ""; | ||
111 | model["windDirectionId"] = windDirection || ""; | 124 | model["windDirectionId"] = windDirection; | ||
112 | model["windDirection"] = windDirection ? i18nc("wind direction", windDirection) : ""; | 125 | model["windDirection"] = windDirection ? i18nc("wind direction", windDirection) : ""; | ||
113 | 126 | | |||
114 | var windGust = (data && data["Wind Gust"]) || null; | 127 | var windGust = getNumber("Wind Gust"); | ||
115 | model["windGust"] = windGust ? Util.valueToDisplayString(displaySpeedUnit, windGust, reportWindSpeedUnit, 1) : ""; | 128 | model["windGust"] = windGust !== null ? Util.valueToDisplayString(displaySpeedUnit, windGust, reportWindSpeedUnit, 1) : ""; | ||
116 | 129 | | |||
117 | return model; | 130 | return model; | ||
118 | } | 131 | } | ||
119 | 132 | | |||
120 | readonly property var generalModel: { | 133 | readonly property var generalModel: { | ||
121 | var model = {}; | 134 | var model = {}; | ||
122 | var data = weatherDataSource.currentData; | 135 | var data = weatherDataSource.currentData || {}; | ||
123 | 136 | | |||
124 | var todayForecastTokens = ((data && data["Short Forecast Day 0"]) || "").split("|"); | 137 | var todayForecastTokens = (data["Short Forecast Day 0"] || "").split("|"); | ||
125 | 138 | | |||
126 | model["location"] = (data && data["Place"]) || ""; | 139 | model["location"] = data["Place"] || ""; | ||
127 | model["courtesy"] = (data && data["Credit"]) || ""; | 140 | model["courtesy"] = data["Credit"] || ""; | ||
128 | model["creditUrl"] = (data && data["Credit Url"]) || ""; | 141 | model["creditUrl"] = data["Credit Url"] || ""; | ||
129 | 142 | | |||
130 | var forecastDayCount = parseInt((data && data["Total Weather Days"]) || ""); | 143 | var forecastDayCount = parseInt(data["Total Weather Days"] || ""); | ||
131 | var forecastTitle; | 144 | var forecastTitle; | ||
132 | if (!isNaN(forecastDayCount) && forecastDayCount > 0) { | 145 | if (!isNaN(forecastDayCount) && forecastDayCount > 0) { | ||
133 | forecastTitle = i18ncp("Forecast period timeframe", "1 Day", "%1 Days", forecastDayCount); | 146 | forecastTitle = i18ncp("Forecast period timeframe", "1 Day", "%1 Days", forecastDayCount); | ||
134 | } | 147 | } | ||
135 | model["forecastTitle"] = forecastTitle || ""; | 148 | model["forecastTitle"] = forecastTitle || ""; | ||
136 | 149 | | |||
137 | var conditionIconName = observationModel.conditionIconName; | 150 | var conditionIconName = observationModel.conditionIconName; | ||
138 | if (!conditionIconName || | 151 | if (!conditionIconName || | ||
▲ Show 20 Lines • Show All 295 Lines • Show Last 20 Lines |