mirror of https://github.com/oxen-io/session-ios
Merge branch 'charlesmchen/oversizeTextMessageView'
commit
2f40e3734e
@ -0,0 +1,150 @@
|
||||
//
|
||||
// Copyright (c) 2017 Open Whisper Systems. All rights reserved.
|
||||
//
|
||||
|
||||
import Foundation
|
||||
import WebRTC
|
||||
import PromiseKit
|
||||
|
||||
class OversizeTextMessageViewController: UIViewController {
|
||||
|
||||
let TAG = "[OversizeTextMessageViewController]"
|
||||
|
||||
let message: TSMessage
|
||||
|
||||
// MARK: Initializers
|
||||
|
||||
@available(*, unavailable, message:"use message: constructor instead.")
|
||||
required init?(coder aDecoder: NSCoder) {
|
||||
message = TSMessage()
|
||||
super.init(coder: aDecoder)
|
||||
}
|
||||
|
||||
required init(message: TSMessage) {
|
||||
self.message = message
|
||||
super.init(nibName: nil, bundle: nil)
|
||||
}
|
||||
|
||||
// MARK: Attachment
|
||||
|
||||
private func attachmentStream() -> TSAttachmentStream? {
|
||||
guard message.hasAttachments() else {
|
||||
Logger.error("\(TAG) message has no attachments.")
|
||||
assert(false)
|
||||
return nil
|
||||
}
|
||||
let attachmentIDRaw = message.attachmentIds[0]
|
||||
guard attachmentIDRaw is String else {
|
||||
Logger.error("\(TAG) message attachment id is not a string.")
|
||||
assert(false)
|
||||
return nil
|
||||
}
|
||||
let attachmentID = attachmentIDRaw as! String
|
||||
guard let attachment = TSAttachment.fetch(withUniqueID:attachmentID) else {
|
||||
Logger.error("\(TAG) could not load attachment.")
|
||||
assert(false)
|
||||
return nil
|
||||
}
|
||||
guard attachment.contentType == OWSMimeTypeOversizeTextMessage else {
|
||||
Logger.error("\(TAG) attachment has unexpected content type.")
|
||||
assert(false)
|
||||
return nil
|
||||
}
|
||||
guard attachment is TSAttachmentStream else {
|
||||
Logger.error("\(TAG) attachment has unexpected type.")
|
||||
assert(false)
|
||||
return nil
|
||||
}
|
||||
let stream = attachment as! TSAttachmentStream
|
||||
return stream
|
||||
}
|
||||
|
||||
private func attachmentData() -> Data? {
|
||||
guard let stream = attachmentStream() else {
|
||||
Logger.error("\(TAG) attachment has invalid stream.")
|
||||
assert(false)
|
||||
return nil
|
||||
}
|
||||
guard let mediaURL = stream.mediaURL() else {
|
||||
Logger.error("\(TAG) attachment missing URL.")
|
||||
assert(false)
|
||||
return nil
|
||||
}
|
||||
do {
|
||||
let textData = try Data(contentsOf:mediaURL)
|
||||
return textData
|
||||
} catch {
|
||||
Logger.error("\(TAG) error loading data.")
|
||||
assert(false)
|
||||
return nil
|
||||
}
|
||||
}
|
||||
|
||||
private func displayText() -> String {
|
||||
guard let textData = attachmentData() else {
|
||||
Logger.error("\(TAG) could not load attachment data.")
|
||||
assert(false)
|
||||
return ""
|
||||
}
|
||||
guard let fullText = String(data:textData, encoding:.utf8) else {
|
||||
Logger.error("\(TAG) text is empty.")
|
||||
assert(false)
|
||||
return ""
|
||||
}
|
||||
guard let displayText = DisplayableTextFilter().displayableText(fullText) else {
|
||||
Logger.error("\(TAG) No valid text.")
|
||||
assert(false)
|
||||
return ""
|
||||
}
|
||||
return displayText
|
||||
}
|
||||
|
||||
// MARK: View Lifecycle
|
||||
|
||||
override func viewDidLoad() {
|
||||
super.viewDidLoad()
|
||||
|
||||
self.navigationItem.title = NSLocalizedString("OVERSIZE_TEXT_MESSAGE_VIEW_TITLE",
|
||||
comment: "The title of the 'oversize text message' view.")
|
||||
|
||||
self.view.backgroundColor = UIColor.white
|
||||
|
||||
let textView = UITextView()
|
||||
textView.textColor = UIColor.black
|
||||
textView.text = displayText()
|
||||
textView.font = UIFont.ows_regularFont(withSize:14)
|
||||
self.view.addSubview(textView)
|
||||
textView.autoPinWidthToSuperview()
|
||||
textView.autoPin(toTopLayoutGuideOf : self, withInset: 0)
|
||||
|
||||
let footerBar = UIToolbar()
|
||||
footerBar.barTintColor = UIColor.ows_signalBrandBlue()
|
||||
footerBar.setItems([
|
||||
UIBarButtonItem(barButtonSystemItem:.flexibleSpace,
|
||||
target:nil,
|
||||
action:nil),
|
||||
UIBarButtonItem(barButtonSystemItem:.action,
|
||||
target:self,
|
||||
action:#selector(shareWasPressed)),
|
||||
UIBarButtonItem(barButtonSystemItem:.flexibleSpace,
|
||||
target:nil,
|
||||
action:nil)
|
||||
], animated: false)
|
||||
self.view.addSubview(footerBar)
|
||||
footerBar.autoPinWidthToSuperview()
|
||||
footerBar.autoPin(toBottomLayoutGuideOf : self, withInset: 0)
|
||||
footerBar.autoPinEdge(.top, to:.bottom, of:textView)
|
||||
}
|
||||
|
||||
func shareWasPressed(sender: UIButton) {
|
||||
Logger.info("\(TAG) sharing oversize text.")
|
||||
|
||||
guard let attachment = attachmentStream() else {
|
||||
Logger.error("\(TAG) attachment has invalid stream.")
|
||||
assert(false)
|
||||
return
|
||||
}
|
||||
|
||||
AttachmentSharing.showShareUI(for:attachment.mediaURL())
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue