Commit eb04a35b by Demid Merzlyakov

DewPoint is added.

parent 5261a054
......@@ -22,6 +22,7 @@ public struct CurrentWeather: Equatable, Hashable {
public var precipitationProbability: Percent?
public var temp: Temperature?
public var dewPoint: Temperature?
public var apparentTemp: Temperature?
public var humidity: Percent?
public var visibility: Visibility?
......@@ -58,6 +59,7 @@ extension CurrentWeather: UpdatableModelObjectInTime {
result.precipitationProbability = incrementalChanges.precipitationProbability ?? result.precipitationProbability
result.temp = incrementalChanges.temp ?? result.temp
result.dewPoint = incrementalChanges.dewPoint ?? result.dewPoint
result.apparentTemp = incrementalChanges.apparentTemp ?? result.apparentTemp
result.humidity = incrementalChanges.humidity ?? result.humidity
result.visibility = incrementalChanges.visibility ?? result.visibility
......
......@@ -16,6 +16,7 @@ public struct HourlyWeather: Equatable, Hashable {
public var isDay: Bool
public var temp: Temperature?
public var dewPoint: Temperature?
public var apparentTemp: Temperature?
public var windSpeed: WindSpeed?
......@@ -38,6 +39,7 @@ extension HourlyWeather: UpdatableModelObjectInTime {
// Since this class is meant to contain frequently updated info, the preference is given to incrementalChanges data.
result.temp = incrementalChanges.temp ?? result.temp
result.temp = incrementalChanges.dewPoint ?? result.dewPoint
result.apparentTemp = incrementalChanges.apparentTemp ?? result.apparentTemp
result.windSpeed = incrementalChanges.windSpeed ?? result.windSpeed
result.windDirection = incrementalChanges.windDirection ?? result.windDirection
......
......@@ -13,6 +13,7 @@ struct WdtHourlySummary: Codable {
public var dayNight: String?
public var tempF: String?
public var dewPointF: String?
public var apparentTempF: String?
public var windSpeedKph: String?
public var windDirection: String?
......@@ -26,6 +27,7 @@ struct WdtHourlySummary: Codable {
case dayNight = "day_night"
case tempF = "temp_F"
case dewPointF = "dewp_F"
case apparentTempF = "apparent_temp_F"
case windSpeedKph = "wnd_spd_kph"
case windDirection = "wnd_dir"
......@@ -81,6 +83,7 @@ struct WdtHourlySummary: Codable {
}
result.temp = Temperature(valueString: tempF, unit: .fahrenheit) ?? result.temp
result.dewPoint = Temperature(valueString: dewPointF, unit: .fahrenheit) ?? result.dewPoint
result.apparentTemp = Temperature(valueString: apparentTempF, unit: .fahrenheit) ?? result.apparentTemp
result.windSpeed = WindSpeed(valueString: self.windSpeedKph, unit: .kilometersPerHour) ?? result.windSpeed
......
......@@ -13,6 +13,7 @@ struct WdtSurfaceObservation: Codable {
public var dayNight: String? // can be nil for MICRO (partial) update
public var tempF: String? // Currently XMLCoder seems to struggle with decoding optional doubles with an empty value: <temp_F></temp_F> won't be decoded as nil, instead decoding will fail. So, using Strings for now.
public var dewPointF: String?
public var apparentTempF: String?
public var windSpeedKph: String?
public var windDirection: String?
......@@ -29,6 +30,7 @@ struct WdtSurfaceObservation: Codable {
case dayNight = "day_night"
case tempF = "temp_F"
case dewPointF = "dewp_F"
case apparentTempF = "apparent_temp_F"
case windSpeedKph = "wnd_spd_kph"
case windDirection = "wnd_dir"
......@@ -104,6 +106,7 @@ struct WdtSurfaceObservation: Codable {
result.windSpeed = WindSpeed(valueString: self.windSpeedKph, unit: .kilometersPerHour)
result.windDirection = WindDirection(rawValue: windDirection ?? "")
result.temp = Temperature(valueString: tempF, unit: .fahrenheit)
result.dewPoint = Temperature(valueString: dewPointF, unit: .fahrenheit) ?? result.dewPoint
result.apparentTemp = Temperature(valueString: apparentTempF, unit: .fahrenheit)
if let humidity = Percent(self.humidity ?? ""), humidity >= 0, humidity <= 100 {
result.humidity = humidity
......
......@@ -13,6 +13,7 @@
<attribute name="apparentTemp" optional="YES" attributeType="Binary"/>
<attribute name="approximateMoonrise" optional="YES" attributeType="Date" usesScalarValueType="NO"/>
<attribute name="date" attributeType="Date" usesScalarValueType="NO"/>
<attribute name="dewPoint" optional="YES" attributeType="Binary"/>
<attribute name="humidity" optional="YES" attributeType="Decimal" defaultValueString="0.0"/>
<attribute name="isDay" attributeType="Boolean" usesScalarValueType="YES"/>
<attribute name="lastTimeUpdated" attributeType="Date" usesScalarValueType="NO"/>
......@@ -65,6 +66,7 @@
<entity name="CoreHourlyWeather" representedClassName="CoreHourlyWeather" syncable="YES">
<attribute name="apparentTemp" optional="YES" attributeType="Binary"/>
<attribute name="date" attributeType="Date" usesScalarValueType="NO"/>
<attribute name="dewPoint" optional="YES" attributeType="Binary"/>
<attribute name="humidity" optional="YES" attributeType="Decimal" defaultValueString="0.0"/>
<attribute name="isDay" attributeType="Boolean" usesScalarValueType="YES"/>
<attribute name="lastTimeUpdated" attributeType="Date" usesScalarValueType="NO"/>
......@@ -124,13 +126,13 @@
<elements>
<element name="CoreAirQuality" positionX="438.48828125" positionY="-201.96875" width="128" height="88"/>
<element name="CoreAppData" positionX="114.79296875" positionY="-494.5078125" width="128" height="73"/>
<element name="CoreCurrentWeather" positionX="-105.953125" positionY="-203.82421875" width="128" height="418"/>
<element name="CoreCurrentWeather" positionX="-105.953125" positionY="-203.82421875" width="128" height="433"/>
<element name="CoreDailyWeather" positionX="270.5546875" positionY="-505.83203125" width="128" height="313"/>
<element name="CoreHealth" positionX="277.1640625" positionY="-156.77734375" width="128" height="103"/>
<element name="CoreHourlyWeather" positionX="279.15234375" positionY="-29.234375" width="128" height="238"/>
<element name="CoreHourlyWeather" positionX="279.15234375" positionY="-29.234375" width="128" height="253"/>
<element name="CoreLocation" positionX="113.6640625" positionY="-337.08984375" width="128" height="328"/>
<element name="CorePollutant" positionX="438.171875" positionY="-103.41015625" width="128" height="88"/>
<element name="CoreNotifications" positionX="-153.28125" positionY="-336.6484375" width="128" height="88"/>
<element name="CoreNWSAlert" positionX="-315.77734375" positionY="-337.84375" width="128" height="208"/>
<element name="CorePollutant" positionX="438.171875" positionY="-103.41015625" width="128" height="88"/>
</elements>
</model>
\ No newline at end of file
......@@ -12,6 +12,7 @@ open class CoreHourlyWeather: _CoreHourlyWeather, CoreDataAppModelConvertable {
result.isDay = self.isDay
result.temp = try CoreDataUtils.measurement(from: self.temp, in: self, attributeName: "temp")
result.dewPoint = try CoreDataUtils.measurement(from: self.dewPoint, in: self, attributeName: "dewPoint")
result.apparentTemp = try CoreDataUtils.measurement(from: self.apparentTemp, in: self, attributeName: "apparentTemp")
result.windSpeed = try CoreDataUtils.measurement(from: self.windSpeed, in: self, attributeName: "windSpeed")
......@@ -46,6 +47,7 @@ open class CoreHourlyWeather: _CoreHourlyWeather, CoreDataAppModelConvertable {
self.isDay = appModel.isDay
self.temp = try CoreDataUtils.measurementToData(appModel.temp, in: self, attributeName: "temp")
self.dewPoint = try CoreDataUtils.measurementToData(appModel.dewPoint, in: self, attributeName: "dewPoint")
self.apparentTemp = try CoreDataUtils.measurementToData(appModel.apparentTemp, in: self, attributeName: "apparentTemp")
self.windSpeed = try CoreDataUtils.measurementToData(appModel.windSpeed, in: self, attributeName: "windSpeed")
......
......@@ -8,6 +8,7 @@ public enum CoreCurrentWeatherAttributes: String {
case apparentTemp = "apparentTemp"
case approximateMoonrise = "approximateMoonrise"
case date = "date"
case dewPoint = "dewPoint"
case humidity = "humidity"
case isDay = "isDay"
case lastTimeUpdated = "lastTimeUpdated"
......@@ -75,6 +76,9 @@ open class _CoreCurrentWeather: NSManagedObject {
var date: Date!
@NSManaged open
var dewPoint: Data?
@NSManaged open
var humidity: NSDecimalNumber?
@NSManaged open
......
......@@ -7,6 +7,7 @@ import CoreData
public enum CoreHourlyWeatherAttributes: String {
case apparentTemp = "apparentTemp"
case date = "date"
case dewPoint = "dewPoint"
case humidity = "humidity"
case isDay = "isDay"
case lastTimeUpdated = "lastTimeUpdated"
......@@ -60,6 +61,9 @@ open class _CoreHourlyWeather: NSManagedObject {
var date: Date!
@NSManaged open
var dewPoint: Data?
@NSManaged open
var humidity: NSDecimalNumber?
@NSManaged open
......
......@@ -36,7 +36,7 @@ class TodayConditionButton: UIControl {
case .pressure:
valueLabel.text = location.today?.pressure?.settingsConverted.string
case .dewPoint:
valueLabel.text = "12°"
valueLabel.text = location.today?.dewPoint?.settingsConverted.shortString ?? "--"
case .visibility:
valueLabel.text = location.today?.visibility?.settingsConverted.string
case .wind:
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment