Commit a32a7dfc by Demid Merzlyakov

Notifications list is properly updated.

parent 3e506463
...@@ -478,11 +478,13 @@ extension LocationManager: DeviceLocationMonitorDelegate { ...@@ -478,11 +478,13 @@ extension LocationManager: DeviceLocationMonitorDelegate {
// MARK: - NWSAlertsManagerDelegate // MARK: - NWSAlertsManagerDelegate
extension LocationManager: NWSAlertsManagerDelegate { extension LocationManager: NWSAlertsManagerDelegate {
public func alertsListDidChange(in alertsManager: NWSAlertsManager) {
// do nothing
}
public func extendedInfoAvailable(from alertsManager: NWSAlertsManager, for alert: NWSAlert) { public func extendedInfoAvailable(from alertsManager: NWSAlertsManager, for alert: NWSAlert) {
DispatchQueue.main.async {
if let alertIndex = self.selectedLocation?.notifications?.nwsAlerts.firstIndex(of: alert) { if let alertIndex = self.selectedLocation?.notifications?.nwsAlerts.firstIndex(of: alert) {
self.selectedLocation?.notifications?.nwsAlerts[alertIndex] = alert self.selectedLocation?.notifications?.nwsAlerts[alertIndex] = alert
} }
} }
}
} }
...@@ -16,6 +16,7 @@ public enum NWSError: Error { ...@@ -16,6 +16,7 @@ public enum NWSError: Error {
} }
public protocol NWSAlertsManagerDelegate: class { public protocol NWSAlertsManagerDelegate: class {
func alertsListDidChange(in alertsManager: NWSAlertsManager)
func extendedInfoAvailable(from alertsManager: NWSAlertsManager, for alert: NWSAlert) func extendedInfoAvailable(from alertsManager: NWSAlertsManager, for alert: NWSAlert)
} }
...@@ -202,6 +203,7 @@ public class NWSAlertsManager { ...@@ -202,6 +203,7 @@ public class NWSAlertsManager {
// A deadlock shouldn't happen unless main thread waits on internalQueue, which it doesn't. // A deadlock shouldn't happen unless main thread waits on internalQueue, which it doesn't.
DispatchQueue.main.sync { DispatchQueue.main.sync {
self.alerts = resultingAlerts self.alerts = resultingAlerts
self.delegate?.alertsListDidChange(in: self)
} }
fetchAllExtendedInfo(for: resultingAlerts) fetchAllExtendedInfo(for: resultingAlerts)
} }
......
...@@ -9,9 +9,25 @@ import Foundation ...@@ -9,9 +9,25 @@ import Foundation
class NotificationsViewModel: ViewModelProtocol { class NotificationsViewModel: ViewModelProtocol {
public weak var delegate:ViewModelDelegate? public weak var delegate:ViewModelDelegate?
private let alertsManager: NWSAlertsManager = LocationManager.shared.nwsAlertsManager private let alertsManager: NWSAlertsManager
public init(alertsManager: NWSAlertsManager = LocationManager.shared.nwsAlertsManager) {
self.alertsManager = alertsManager
alertsManager.delegate = self
}
public var alerts: [NWSAlert] { public var alerts: [NWSAlert] {
alertsManager.alerts alertsManager.alerts
} }
} }
extension NotificationsViewModel: NWSAlertsManagerDelegate {
func extendedInfoAvailable(from alertsManager: NWSAlertsManager, for alert: NWSAlert) {
self.delegate?.viewModelDidChange(model: self)
}
func alertsListDidChange(in alertsManager: NWSAlertsManager) {
self.delegate?.viewModelDidChange(model: self)
}
}
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