|
@@ -4,10 +4,6 @@ import Foundation
|
|
|
final class PaywallConfigService {
|
|
final class PaywallConfigService {
|
|
|
static let shared = PaywallConfigService()
|
|
static let shared = PaywallConfigService()
|
|
|
|
|
|
|
|
- private static let remoteConfigURL = URL(
|
|
|
|
|
- string: "https://git.mqldevelopment.com/ahtasham.shahzad/smart_printer/-/raw/main/smart_printer/paywall.json"
|
|
|
|
|
- )!
|
|
|
|
|
-
|
|
|
|
|
private(set) var config: PaywallConfig
|
|
private(set) var config: PaywallConfig
|
|
|
private var hasStarted = false
|
|
private var hasStarted = false
|
|
|
|
|
|
|
@@ -18,32 +14,6 @@ final class PaywallConfigService {
|
|
|
func start() {
|
|
func start() {
|
|
|
guard !hasStarted else { return }
|
|
guard !hasStarted else { return }
|
|
|
hasStarted = true
|
|
hasStarted = true
|
|
|
- Task { await refreshFromRemote() }
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- func refreshFromRemote() async {
|
|
|
|
|
- var request = URLRequest(url: Self.remoteConfigURL)
|
|
|
|
|
- request.cachePolicy = .reloadIgnoringLocalCacheData
|
|
|
|
|
- request.timeoutInterval = 15
|
|
|
|
|
-
|
|
|
|
|
- do {
|
|
|
|
|
- let (data, response) = try await URLSession.shared.data(for: request)
|
|
|
|
|
- guard let http = response as? HTTPURLResponse, (200 ... 299).contains(http.statusCode) else {
|
|
|
|
|
- return
|
|
|
|
|
- }
|
|
|
|
|
- let remoteConfig = try JSONDecoder().decode(PaywallConfig.self, from: data)
|
|
|
|
|
- apply(remoteConfig)
|
|
|
|
|
- } catch {
|
|
|
|
|
- NSLog("Failed to refresh paywall config: \(error.localizedDescription)")
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- private func apply(_ remoteConfig: PaywallConfig) {
|
|
|
|
|
- let bundledConfig = PaywallConfig.loadBundled()
|
|
|
|
|
- let mergedConfig = bundledConfig.mergingMarketing(from: remoteConfig)
|
|
|
|
|
- guard mergedConfig != config else { return }
|
|
|
|
|
- config = mergedConfig
|
|
|
|
|
- NotificationCenter.default.post(name: .paywallConfigDidUpdate, object: nil)
|
|
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|