2022-04-21 08:42:35 +02:00
|
|
|
// Copyright © 2022 Rangeproof Pty Ltd. All rights reserved.
|
|
|
|
|
|
|
|
import Foundation
|
2022-11-27 22:32:32 +01:00
|
|
|
import Combine
|
2022-04-21 08:42:35 +02:00
|
|
|
import SessionSnodeKit
|
|
|
|
import SessionUtilitiesKit
|
|
|
|
|
|
|
|
public enum NotifyPushServerJob: JobExecutor {
|
2022-04-27 02:48:54 +02:00
|
|
|
public static var maxFailureCount: Int = 20
|
2022-04-21 08:42:35 +02:00
|
|
|
public static var requiresThreadId: Bool = false
|
2022-04-22 10:47:11 +02:00
|
|
|
public static let requiresInteractionId: Bool = false
|
2022-04-21 08:42:35 +02:00
|
|
|
|
|
|
|
public static func run(
|
|
|
|
_ job: Job,
|
2022-06-24 10:29:45 +02:00
|
|
|
queue: DispatchQueue,
|
2023-04-03 09:35:46 +02:00
|
|
|
success: @escaping (Job, Bool, Dependencies) -> (),
|
|
|
|
failure: @escaping (Job, Error?, Bool, Dependencies) -> (),
|
|
|
|
deferred: @escaping (Job, Dependencies) -> (),
|
2023-08-01 06:27:41 +02:00
|
|
|
using dependencies: Dependencies
|
2022-04-21 08:42:35 +02:00
|
|
|
) {
|
|
|
|
guard
|
|
|
|
let detailsData: Data = job.details,
|
|
|
|
let details: Details = try? JSONDecoder().decode(Details.self, from: detailsData)
|
|
|
|
else {
|
2023-05-23 06:02:12 +02:00
|
|
|
SNLog("[NotifyPushServerJob] Failing due to missing details")
|
2023-07-18 02:02:51 +02:00
|
|
|
return failure(job, JobRunnerError.missingRequiredDetails, true, dependencies)
|
2022-04-21 08:42:35 +02:00
|
|
|
}
|
|
|
|
|
2022-07-08 09:53:48 +02:00
|
|
|
PushNotificationAPI
|
|
|
|
.notify(
|
|
|
|
recipient: details.message.recipient,
|
|
|
|
with: details.message.data,
|
2022-11-27 22:32:32 +01:00
|
|
|
maxRetryCount: 4
|
|
|
|
)
|
|
|
|
.subscribe(on: queue)
|
|
|
|
.receive(on: queue)
|
|
|
|
.sinkUntilComplete(
|
|
|
|
receiveCompletion: { result in
|
|
|
|
switch result {
|
2023-07-18 02:02:51 +02:00
|
|
|
case .finished: success(job, false, dependencies)
|
|
|
|
case .failure(let error): failure(job, error, false, dependencies)
|
2022-11-27 22:32:32 +01:00
|
|
|
}
|
|
|
|
}
|
2022-07-08 09:53:48 +02:00
|
|
|
)
|
2022-04-21 08:42:35 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// MARK: - NotifyPushServerJob.Details
|
|
|
|
|
|
|
|
extension NotifyPushServerJob {
|
|
|
|
public struct Details: Codable {
|
|
|
|
public let message: SnodeMessage
|
|
|
|
}
|
|
|
|
}
|