Skip to content
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
40 changes: 22 additions & 18 deletions rnmodules/kb-common/src/ItemProviderHelper.swift
Original file line number Diff line number Diff line change
Expand Up @@ -65,15 +65,14 @@ public class ItemProviderHelper: NSObject {
// more to process
objc_sync_enter(self)
unprocessed -= 1
if unprocessed > 0 {
objc_sync_exit(self)
return
let shouldComplete = unprocessed == 0 && !done
if shouldComplete {
done = true
}
objc_sync_exit(self)

// done
if !done {
done = true
if shouldComplete {
writeManifest()
completionHandler()
} else {
Expand Down Expand Up @@ -203,7 +202,8 @@ public class ItemProviderHelper: NSObject {

private func handleAndCompleteMediaFile(_ url: URL, isVideo: Bool) {
if isVideo {
MediaUtils.processVideo(fromOriginal: url) { error, scaled in
MediaUtils.processVideo(fromOriginal: url) { [weak self] error, scaled in
guard let self = self else { return }
if let error = error {
self.completeItemAndAppendManifestAndLogError(text: "handleAndCompleteMediaFile", error: error)
return
Expand All @@ -213,7 +213,8 @@ public class ItemProviderHelper: NSObject {
scaledFileURL: scaled!)
}
} else {
MediaUtils.processImage(fromOriginal: url) { error, scaled in
MediaUtils.processImage(fromOriginal: url) { [weak self] error, scaled in
guard let self = self else { return }
if let error = error {
self.completeItemAndAppendManifestAndLogError(text: "handleAndCompleteMediaFile", error: error)
return
Expand Down Expand Up @@ -376,15 +377,16 @@ public class ItemProviderHelper: NSObject {

@objc public func startProcessing() {
// Handlers for different types
let fileHandler: @Sendable (URL?, Error?) -> Void = { url, error in
self.sendFile(url)
let fileHandler: @Sendable (URL?, Error?) -> Void = { [weak self] url, error in
self?.sendFile(url)
}

let movieHandler: @Sendable (URL?, Error?) -> Void = { url, error in
self.sendMovie(error == nil ? url : nil)
let movieHandler: @Sendable (URL?, Error?) -> Void = { [weak self] url, error in
self?.sendMovie(error == nil ? url : nil)
}

let imageHandler: @Sendable (NSSecureCoding?, Error?) -> Void = { item, error in
let imageHandler: @Sendable (NSSecureCoding?, Error?) -> Void = { [weak self] item, error in
guard let self = self else { return }
var imgData: Data? // Changed to var so we can modify it
if error == nil {
if let url = item as? URL {
Expand All @@ -400,7 +402,8 @@ public class ItemProviderHelper: NSObject {
self.sendImage(imgData)
}

let contactHandler: @Sendable (Data?, Error?) -> Void = { data, error in
let contactHandler: @Sendable (Data?, Error?) -> Void = { [weak self] data, error in
guard let self = self else { return }
if let data = data {
self.sendContact(data)
} else {
Expand All @@ -411,7 +414,8 @@ public class ItemProviderHelper: NSObject {
}
}

let secureTextHandler: @Sendable (NSSecureCoding?, Error?) -> Void = { item, error in
let secureTextHandler: @Sendable (NSSecureCoding?, Error?) -> Void = { [weak self] item, error in
guard let self = self else { return }
var text: String? // Changed to var so we can modify it
if error == nil {
if let str = item as? String {
Expand Down Expand Up @@ -476,9 +480,9 @@ public class ItemProviderHelper: NSObject {
// Plain Text (two attempts - direct and coerced)
else if type.conforms(to: .plainText) {
incrementUnprocessed()
item.loadItem(forTypeIdentifier: "public.plain-text", options: nil, completionHandler: { (item: NSSecureCoding?, error: Error?) in
item.loadItem(forTypeIdentifier: "public.plain-text", options: nil, completionHandler: { [weak self] (item: NSSecureCoding?, error: Error?) in
let text = item as? String ?? ""
self.sendText(text)
self?.sendText(text)
})


Expand All @@ -495,9 +499,9 @@ public class ItemProviderHelper: NSObject {
// URLs
else if type.conforms(to: .url) {
incrementUnprocessed()
item.loadItem(forTypeIdentifier: "public.url", options: nil, completionHandler: { (item: NSSecureCoding?, error: Error?) in
item.loadItem(forTypeIdentifier: "public.url", options: nil, completionHandler: { [weak self] (item: NSSecureCoding?, error: Error?) in
let url = item as? URL
self.sendText(url?.absoluteString ?? "")
self?.sendText(url?.absoluteString ?? "")
})

break
Expand Down