mirror of https://github.com/oxen-io/session-ios
[WIP] started adding logic to ignore messages invalidated by config
Created a ConfigMessageReceiveJob just to clean up the logs a bit Updated the poller to make any MessageReceive jobs dependant on any ConfigMessageReceive jobs which are created Updated legacy groups to delete the group content when you are removed Fixed an issue where the JobRunner wouldn't stop pending jobs while clearing data Fixed another issue with the profile view in the message cellpull/751/head
parent
9794877692
commit
3b772b7f90
@ -0,0 +1,63 @@
|
||||
// Copyright © 2023 Rangeproof Pty Ltd. All rights reserved.
|
||||
|
||||
import Foundation
|
||||
import GRDB
|
||||
import SessionUtilitiesKit
|
||||
|
||||
public enum ConfigMessageReceiveJob: JobExecutor {
|
||||
public static var maxFailureCount: Int = 0
|
||||
public static var requiresThreadId: Bool = true
|
||||
public static let requiresInteractionId: Bool = false
|
||||
|
||||
public static func run(
|
||||
_ job: Job,
|
||||
queue: DispatchQueue,
|
||||
success: @escaping (Job, Bool) -> (),
|
||||
failure: @escaping (Job, Error?, Bool) -> (),
|
||||
deferred: @escaping (Job) -> ()
|
||||
) {
|
||||
guard
|
||||
let detailsData: Data = job.details,
|
||||
let details: Details = try? JSONDecoder().decode(Details.self, from: detailsData)
|
||||
else {
|
||||
failure(job, JobRunnerError.missingRequiredDetails, true)
|
||||
return
|
||||
}
|
||||
|
||||
// Ensure no standard messages are sent through this job
|
||||
guard !details.messages.contains(where: { $0.variant != .sharedConfigMessage }) else {
|
||||
SNLog("[ConfigMessageReceiveJob] Standard messages incorrectly sent to the 'configMessageReceive' job")
|
||||
failure(job, MessageReceiverError.invalidMessage, true)
|
||||
return
|
||||
}
|
||||
|
||||
var lastError: Error?
|
||||
let sharedConfigMessages: [SharedConfigMessage] = details.messages
|
||||
.compactMap { $0.message as? SharedConfigMessage }
|
||||
|
||||
Storage.shared.write { db in
|
||||
// Send any SharedConfigMessages to the SessionUtil to handle it
|
||||
do {
|
||||
try SessionUtil.handleConfigMessages(
|
||||
db,
|
||||
messages: sharedConfigMessages,
|
||||
publicKey: (job.threadId ?? "")
|
||||
)
|
||||
}
|
||||
catch { lastError = error }
|
||||
}
|
||||
|
||||
// Handle the result
|
||||
switch lastError {
|
||||
case let error as MessageReceiverError where !error.isRetryable: failure(job, error, true)
|
||||
case .some(let error): failure(job, error, false)
|
||||
case .none: success(job, false)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// MARK: - ConfigMessageReceiveJob.Details
|
||||
|
||||
extension ConfigMessageReceiveJob {
|
||||
typealias Details = MessageReceiveJob.Details
|
||||
}
|
Loading…
Reference in New Issue