Created
November 1, 2017 11:40
-
-
Save soxjke/7856e3180752fb1ac680e0d3bf2c6593 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class WeatherService { | |
private struct Constants { | |
static let apiKey = "z74X7aKpZlip02a5Wlrq9R70JkDnOZsq" | |
} | |
static let shared: WeatherService = WeatherService() | |
fileprivate lazy var sessionManager: SessionManager = self.setupSessionManager() | |
fileprivate let appStore: AppStore = AppStore.shared | |
private init() { | |
setupObserving() | |
} | |
private func setupObserving() { | |
let locationProducer = self.appStore.producer | |
.map { $0.location.locationRequestState } | |
.filter { $0.isSuccess } | |
.skipRepeats() | |
.observe(on: QueueScheduler.main) | |
locationProducer.startWithValues { [weak self] _ in self?.appStore.consume(event: .geopositionRequest )} | |
let geopositionProducer = self.appStore.producer | |
.map { $0.weather.geopositionRequestState } | |
.skipRepeats() // To use skipRepeats we have to implement equatable for GeopositionRequestState | |
.observe(on: QueueScheduler.main) | |
geopositionProducer | |
.filter { $0 == .updating } | |
.startWithValues { [weak self] _ in self?.performGeopositionRequest() } | |
geopositionProducer | |
.filter { $0.isSuccess } | |
.startWithValues { [weak self] _ in self?.appStore.consume(event: .weatherRequest )} | |
let weatherProducer = self.appStore.producer | |
.map { $0.weather.weatherRequestState } | |
.filter { $0 == .updating } | |
.skipRepeats() // To use skipRepeats we have to implement equatable for WeatherRequestState | |
.observe(on: QueueScheduler.main) | |
weatherProducer.startWithValues { [weak self] _ in self?.performWeatherRequest() } | |
} | |
private func setupSessionManager() -> SessionManager { | |
return SessionManager.default // let's use very default for simplicity | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment