fix sharing not work for session

This commit is contained in:
ryanzhao 2021-10-01 14:44:52 +10:00
parent 260f539283
commit 1899a3fe3d
3 changed files with 43 additions and 11 deletions

View File

@ -121,16 +121,14 @@ final class ThreadPickerVC : UIViewController, UITableViewDataSource, UITableVie
}
shareVC!.dismiss(animated: true, completion: nil)
ModalActivityIndicatorViewController.present(fromViewController: shareVC!, canCancel: false, message: NSLocalizedString("vc_share_sending_message", comment: "")) { activityIndicator in
Storage.write { transaction in
MessageSender.sendNonDurably(message, with: attachments, in: self.selectedThread!, using: transaction).done { [weak self] _ in
guard let self = self else { return }
activityIndicator.dismiss { }
self.shareVC!.shareViewWasCompleted()
}.catch { [weak self] error in
guard let self = self else { return }
activityIndicator.dismiss { }
self.shareVC!.shareViewFailed(error: error)
}
MessageSender.sendNonDurably(message, with: attachments, in: self.selectedThread!).done { [weak self] _ in
guard let self = self else { return }
activityIndicator.dismiss { }
self.shareVC!.shareViewWasCompleted()
}.catch { [weak self] error in
guard let self = self else { return }
activityIndicator.dismiss { }
self.shareVC!.shareViewFailed(error: error)
}
}
}

View File

@ -269,7 +269,7 @@ public class MediaMessageView: UIView, OWSAudioPlayerDelegate {
private func createGenericPreview() {
var subviews = [UIView]()
let imageView = createHeroImageView(imageName: "file-thin-black-filled-large")
let imageView = createHeroImageView(imageName: "actionsheet_document_black")
subviews.append(imageView)
let fileNameLabel = createFileNameLabel()

View File

@ -67,4 +67,38 @@ extension MessageSender {
let destination = Message.Destination.from(thread)
return MessageSender.send(message, to: destination, using: transaction)
}
public static func sendNonDurably(_ message: VisibleMessage, with attachments: [SignalAttachment], in thread: TSThread) -> Promise<Void> {
Storage.writeSync{ transaction in
prep(attachments, for: message, using: transaction)
}
let attachments = message.attachmentIDs.compactMap { TSAttachment.fetch(uniqueId: $0) as? TSAttachmentStream }
let attachmentsToUpload = attachments.filter { !$0.isUploaded }
let attachmentUploadPromises: [Promise<Void>] = attachmentsToUpload.map { stream in
let storage = SNMessagingKitConfiguration.shared.storage
if let v2OpenGroup = storage.getV2OpenGroup(for: thread.uniqueId!) {
let (promise, seal) = Promise<Void>.pending()
AttachmentUploadJob.upload(stream, using: { data in return OpenGroupAPIV2.upload(data, to: v2OpenGroup.room, on: v2OpenGroup.server) }, encrypt: false, onSuccess: { seal.fulfill(()) }, onFailure: { seal.reject($0) })
return promise
} else {
let (promise, seal) = Promise<Void>.pending()
AttachmentUploadJob.upload(stream, using: FileServerAPIV2.upload, encrypt: true, onSuccess: { seal.fulfill(()) }, onFailure: { seal.reject($0) })
return promise
}
}
let (promise, seal) = Promise<Void>.pending()
let results = when(resolved: attachmentUploadPromises).wait()
let errors = results.compactMap { result -> Swift.Error? in
if case .rejected(let error) = result { return error } else { return nil }
}
if let error = errors.first { seal.reject(error) }
Storage.write{ transaction in
sendNonDurably(message, in: thread, using: transaction).done {
seal.fulfill(())
}.catch { error in
seal.reject(error)
}
}
return promise
}
}