Commit eb04a35b by Demid Merzlyakov

DewPoint is added.

parent 5261a054
...@@ -22,6 +22,7 @@ public struct CurrentWeather: Equatable, Hashable { ...@@ -22,6 +22,7 @@ public struct CurrentWeather: Equatable, Hashable {
public var precipitationProbability: Percent? public var precipitationProbability: Percent?
public var temp: Temperature? public var temp: Temperature?
public var dewPoint: Temperature?
public var apparentTemp: Temperature? public var apparentTemp: Temperature?
public var humidity: Percent? public var humidity: Percent?
public var visibility: Visibility? public var visibility: Visibility?
...@@ -58,6 +59,7 @@ extension CurrentWeather: UpdatableModelObjectInTime { ...@@ -58,6 +59,7 @@ extension CurrentWeather: UpdatableModelObjectInTime {
result.precipitationProbability = incrementalChanges.precipitationProbability ?? result.precipitationProbability result.precipitationProbability = incrementalChanges.precipitationProbability ?? result.precipitationProbability
result.temp = incrementalChanges.temp ?? result.temp result.temp = incrementalChanges.temp ?? result.temp
result.dewPoint = incrementalChanges.dewPoint ?? result.dewPoint
result.apparentTemp = incrementalChanges.apparentTemp ?? result.apparentTemp result.apparentTemp = incrementalChanges.apparentTemp ?? result.apparentTemp
result.humidity = incrementalChanges.humidity ?? result.humidity result.humidity = incrementalChanges.humidity ?? result.humidity
result.visibility = incrementalChanges.visibility ?? result.visibility result.visibility = incrementalChanges.visibility ?? result.visibility
......
...@@ -16,6 +16,7 @@ public struct HourlyWeather: Equatable, Hashable { ...@@ -16,6 +16,7 @@ public struct HourlyWeather: Equatable, Hashable {
public var isDay: Bool public var isDay: Bool
public var temp: Temperature? public var temp: Temperature?
public var dewPoint: Temperature?
public var apparentTemp: Temperature? public var apparentTemp: Temperature?
public var windSpeed: WindSpeed? public var windSpeed: WindSpeed?
...@@ -38,6 +39,7 @@ extension HourlyWeather: UpdatableModelObjectInTime { ...@@ -38,6 +39,7 @@ extension HourlyWeather: UpdatableModelObjectInTime {
// Since this class is meant to contain frequently updated info, the preference is given to incrementalChanges data. // 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.temp ?? result.temp
result.temp = incrementalChanges.dewPoint ?? result.dewPoint
result.apparentTemp = incrementalChanges.apparentTemp ?? result.apparentTemp result.apparentTemp = incrementalChanges.apparentTemp ?? result.apparentTemp
result.windSpeed = incrementalChanges.windSpeed ?? result.windSpeed result.windSpeed = incrementalChanges.windSpeed ?? result.windSpeed
result.windDirection = incrementalChanges.windDirection ?? result.windDirection result.windDirection = incrementalChanges.windDirection ?? result.windDirection
......
...@@ -13,6 +13,7 @@ struct WdtHourlySummary: Codable { ...@@ -13,6 +13,7 @@ struct WdtHourlySummary: Codable {
public var dayNight: String? public var dayNight: String?
public var tempF: String? public var tempF: String?
public var dewPointF: String?
public var apparentTempF: String? public var apparentTempF: String?
public var windSpeedKph: String? public var windSpeedKph: String?
public var windDirection: String? public var windDirection: String?
...@@ -26,6 +27,7 @@ struct WdtHourlySummary: Codable { ...@@ -26,6 +27,7 @@ struct WdtHourlySummary: Codable {
case dayNight = "day_night" case dayNight = "day_night"
case tempF = "temp_F" case tempF = "temp_F"
case dewPointF = "dewp_F"
case apparentTempF = "apparent_temp_F" case apparentTempF = "apparent_temp_F"
case windSpeedKph = "wnd_spd_kph" case windSpeedKph = "wnd_spd_kph"
case windDirection = "wnd_dir" case windDirection = "wnd_dir"
...@@ -81,6 +83,7 @@ struct WdtHourlySummary: Codable { ...@@ -81,6 +83,7 @@ struct WdtHourlySummary: Codable {
} }
result.temp = Temperature(valueString: tempF, unit: .fahrenheit) ?? result.temp 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.apparentTemp = Temperature(valueString: apparentTempF, unit: .fahrenheit) ?? result.apparentTemp
result.windSpeed = WindSpeed(valueString: self.windSpeedKph, unit: .kilometersPerHour) ?? result.windSpeed result.windSpeed = WindSpeed(valueString: self.windSpeedKph, unit: .kilometersPerHour) ?? result.windSpeed
......
...@@ -13,6 +13,7 @@ struct WdtSurfaceObservation: Codable { ...@@ -13,6 +13,7 @@ struct WdtSurfaceObservation: Codable {
public var dayNight: String? // can be nil for MICRO (partial) update 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 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 apparentTempF: String?
public var windSpeedKph: String? public var windSpeedKph: String?
public var windDirection: String? public var windDirection: String?
...@@ -29,6 +30,7 @@ struct WdtSurfaceObservation: Codable { ...@@ -29,6 +30,7 @@ struct WdtSurfaceObservation: Codable {
case dayNight = "day_night" case dayNight = "day_night"
case tempF = "temp_F" case tempF = "temp_F"
case dewPointF = "dewp_F"
case apparentTempF = "apparent_temp_F" case apparentTempF = "apparent_temp_F"
case windSpeedKph = "wnd_spd_kph" case windSpeedKph = "wnd_spd_kph"
case windDirection = "wnd_dir" case windDirection = "wnd_dir"
...@@ -104,6 +106,7 @@ struct WdtSurfaceObservation: Codable { ...@@ -104,6 +106,7 @@ struct WdtSurfaceObservation: Codable {
result.windSpeed = WindSpeed(valueString: self.windSpeedKph, unit: .kilometersPerHour) result.windSpeed = WindSpeed(valueString: self.windSpeedKph, unit: .kilometersPerHour)
result.windDirection = WindDirection(rawValue: windDirection ?? "") result.windDirection = WindDirection(rawValue: windDirection ?? "")
result.temp = Temperature(valueString: tempF, unit: .fahrenheit) result.temp = Temperature(valueString: tempF, unit: .fahrenheit)
result.dewPoint = Temperature(valueString: dewPointF, unit: .fahrenheit) ?? result.dewPoint
result.apparentTemp = Temperature(valueString: apparentTempF, unit: .fahrenheit) result.apparentTemp = Temperature(valueString: apparentTempF, unit: .fahrenheit)
if let humidity = Percent(self.humidity ?? ""), humidity >= 0, humidity <= 100 { if let humidity = Percent(self.humidity ?? ""), humidity >= 0, humidity <= 100 {
result.humidity = humidity result.humidity = humidity
......
...@@ -13,6 +13,7 @@ ...@@ -13,6 +13,7 @@
<attribute name="apparentTemp" optional="YES" attributeType="Binary"/> <attribute name="apparentTemp" optional="YES" attributeType="Binary"/>
<attribute name="approximateMoonrise" optional="YES" attributeType="Date" usesScalarValueType="NO"/> <attribute name="approximateMoonrise" optional="YES" attributeType="Date" usesScalarValueType="NO"/>
<attribute name="date" 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="humidity" optional="YES" attributeType="Decimal" defaultValueString="0.0"/>
<attribute name="isDay" attributeType="Boolean" usesScalarValueType="YES"/> <attribute name="isDay" attributeType="Boolean" usesScalarValueType="YES"/>
<attribute name="lastTimeUpdated" attributeType="Date" usesScalarValueType="NO"/> <attribute name="lastTimeUpdated" attributeType="Date" usesScalarValueType="NO"/>
...@@ -65,6 +66,7 @@ ...@@ -65,6 +66,7 @@
<entity name="CoreHourlyWeather" representedClassName="CoreHourlyWeather" syncable="YES"> <entity name="CoreHourlyWeather" representedClassName="CoreHourlyWeather" syncable="YES">
<attribute name="apparentTemp" optional="YES" attributeType="Binary"/> <attribute name="apparentTemp" optional="YES" attributeType="Binary"/>
<attribute name="date" 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="humidity" optional="YES" attributeType="Decimal" defaultValueString="0.0"/>
<attribute name="isDay" attributeType="Boolean" usesScalarValueType="YES"/> <attribute name="isDay" attributeType="Boolean" usesScalarValueType="YES"/>
<attribute name="lastTimeUpdated" attributeType="Date" usesScalarValueType="NO"/> <attribute name="lastTimeUpdated" attributeType="Date" usesScalarValueType="NO"/>
...@@ -124,13 +126,13 @@ ...@@ -124,13 +126,13 @@
<elements> <elements>
<element name="CoreAirQuality" positionX="438.48828125" positionY="-201.96875" width="128" height="88"/> <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="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="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="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="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="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="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> </elements>
</model> </model>
\ No newline at end of file
...@@ -12,6 +12,7 @@ open class CoreHourlyWeather: _CoreHourlyWeather, CoreDataAppModelConvertable { ...@@ -12,6 +12,7 @@ open class CoreHourlyWeather: _CoreHourlyWeather, CoreDataAppModelConvertable {
result.isDay = self.isDay result.isDay = self.isDay
result.temp = try CoreDataUtils.measurement(from: self.temp, in: self, attributeName: "temp") 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.apparentTemp = try CoreDataUtils.measurement(from: self.apparentTemp, in: self, attributeName: "apparentTemp")
result.windSpeed = try CoreDataUtils.measurement(from: self.windSpeed, in: self, attributeName: "windSpeed") result.windSpeed = try CoreDataUtils.measurement(from: self.windSpeed, in: self, attributeName: "windSpeed")
...@@ -46,6 +47,7 @@ open class CoreHourlyWeather: _CoreHourlyWeather, CoreDataAppModelConvertable { ...@@ -46,6 +47,7 @@ open class CoreHourlyWeather: _CoreHourlyWeather, CoreDataAppModelConvertable {
self.isDay = appModel.isDay self.isDay = appModel.isDay
self.temp = try CoreDataUtils.measurementToData(appModel.temp, in: self, attributeName: "temp") 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.apparentTemp = try CoreDataUtils.measurementToData(appModel.apparentTemp, in: self, attributeName: "apparentTemp")
self.windSpeed = try CoreDataUtils.measurementToData(appModel.windSpeed, in: self, attributeName: "windSpeed") self.windSpeed = try CoreDataUtils.measurementToData(appModel.windSpeed, in: self, attributeName: "windSpeed")
......
...@@ -8,6 +8,7 @@ public enum CoreCurrentWeatherAttributes: String { ...@@ -8,6 +8,7 @@ public enum CoreCurrentWeatherAttributes: String {
case apparentTemp = "apparentTemp" case apparentTemp = "apparentTemp"
case approximateMoonrise = "approximateMoonrise" case approximateMoonrise = "approximateMoonrise"
case date = "date" case date = "date"
case dewPoint = "dewPoint"
case humidity = "humidity" case humidity = "humidity"
case isDay = "isDay" case isDay = "isDay"
case lastTimeUpdated = "lastTimeUpdated" case lastTimeUpdated = "lastTimeUpdated"
...@@ -75,6 +76,9 @@ open class _CoreCurrentWeather: NSManagedObject { ...@@ -75,6 +76,9 @@ open class _CoreCurrentWeather: NSManagedObject {
var date: Date! var date: Date!
@NSManaged open @NSManaged open
var dewPoint: Data?
@NSManaged open
var humidity: NSDecimalNumber? var humidity: NSDecimalNumber?
@NSManaged open @NSManaged open
......
...@@ -7,6 +7,7 @@ import CoreData ...@@ -7,6 +7,7 @@ import CoreData
public enum CoreHourlyWeatherAttributes: String { public enum CoreHourlyWeatherAttributes: String {
case apparentTemp = "apparentTemp" case apparentTemp = "apparentTemp"
case date = "date" case date = "date"
case dewPoint = "dewPoint"
case humidity = "humidity" case humidity = "humidity"
case isDay = "isDay" case isDay = "isDay"
case lastTimeUpdated = "lastTimeUpdated" case lastTimeUpdated = "lastTimeUpdated"
...@@ -60,6 +61,9 @@ open class _CoreHourlyWeather: NSManagedObject { ...@@ -60,6 +61,9 @@ open class _CoreHourlyWeather: NSManagedObject {
var date: Date! var date: Date!
@NSManaged open @NSManaged open
var dewPoint: Data?
@NSManaged open
var humidity: NSDecimalNumber? var humidity: NSDecimalNumber?
@NSManaged open @NSManaged open
......
...@@ -36,7 +36,7 @@ class TodayConditionButton: UIControl { ...@@ -36,7 +36,7 @@ class TodayConditionButton: UIControl {
case .pressure: case .pressure:
valueLabel.text = location.today?.pressure?.settingsConverted.string valueLabel.text = location.today?.pressure?.settingsConverted.string
case .dewPoint: case .dewPoint:
valueLabel.text = "12°" valueLabel.text = location.today?.dewPoint?.settingsConverted.shortString ?? "--"
case .visibility: case .visibility:
valueLabel.text = location.today?.visibility?.settingsConverted.string valueLabel.text = location.today?.visibility?.settingsConverted.string
case .wind: 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