mirror of
https://github.com/oxen-io/session-ios.git
synced 2023-12-13 21:30:14 +01:00
fix crash
This commit is contained in:
parent
4f3a8d93a7
commit
e35756609b
1 changed files with 20 additions and 12 deletions
|
@ -496,8 +496,8 @@ public class OWSLinkPreview: MTLModel {
|
||||||
return Promise.value(cachedInfo)
|
return Promise.value(cachedInfo)
|
||||||
}
|
}
|
||||||
return downloadLink(url: previewUrl)
|
return downloadLink(url: previewUrl)
|
||||||
.then(on: DispatchQueue.global()) { (data) -> Promise<OWSLinkPreviewDraft> in
|
.then(on: DispatchQueue.global()) { (data, response) -> Promise<OWSLinkPreviewDraft> in
|
||||||
return parseLinkDataAndBuildDraft(linkData: data, linkUrlString: previewUrl)
|
return parseLinkDataAndBuildDraft(linkData: data, response: response, linkUrlString: previewUrl)
|
||||||
}.then(on: DispatchQueue.global()) { (linkPreviewDraft) -> Promise<OWSLinkPreviewDraft> in
|
}.then(on: DispatchQueue.global()) { (linkPreviewDraft) -> Promise<OWSLinkPreviewDraft> in
|
||||||
guard linkPreviewDraft.isValid() else {
|
guard linkPreviewDraft.isValid() else {
|
||||||
throw LinkPreviewError.noPreview
|
throw LinkPreviewError.noPreview
|
||||||
|
@ -507,9 +507,14 @@ public class OWSLinkPreview: MTLModel {
|
||||||
return Promise.value(linkPreviewDraft)
|
return Promise.value(linkPreviewDraft)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Twitter doesn't return OpenGraph tags to Signal
|
||||||
|
// `curl -A Signal "https://twitter.com/signalapp/status/1280166087577997312?s=20"`
|
||||||
|
// If this ever changes, we can switch back to our default User-Agent
|
||||||
|
private static let userAgentString = "WhatsApp"
|
||||||
|
|
||||||
class func downloadLink(url urlString: String,
|
class func downloadLink(url urlString: String,
|
||||||
remainingRetries: UInt = 3) -> Promise<Data> {
|
remainingRetries: UInt = 3) -> Promise<(Data, URLResponse)> {
|
||||||
|
|
||||||
Logger.verbose("url: \(urlString)")
|
Logger.verbose("url: \(urlString)")
|
||||||
|
|
||||||
|
@ -529,11 +534,13 @@ public class OWSLinkPreview: MTLModel {
|
||||||
owsFailDebug("Could not configure url: \(urlString).")
|
owsFailDebug("Could not configure url: \(urlString).")
|
||||||
return Promise(error: LinkPreviewError.assertionFailure)
|
return Promise(error: LinkPreviewError.assertionFailure)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sessionManager.requestSerializer.setValue(self.userAgentString, forHTTPHeaderField: "User-Agent")
|
||||||
|
|
||||||
let (promise, resolver) = Promise<Data>.pending()
|
let (promise, resolver) = Promise<(Data, URLResponse)>.pending()
|
||||||
sessionManager.get(urlString,
|
sessionManager.get(urlString,
|
||||||
parameters: [String: AnyObject](),
|
parameters: [String: AnyObject](),
|
||||||
headers: [:],
|
headers: nil,
|
||||||
progress: nil,
|
progress: nil,
|
||||||
success: { task, value in
|
success: { task, value in
|
||||||
|
|
||||||
|
@ -559,7 +566,7 @@ public class OWSLinkPreview: MTLModel {
|
||||||
resolver.reject(LinkPreviewError.invalidContent)
|
resolver.reject(LinkPreviewError.invalidContent)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
resolver.fulfill(data)
|
resolver.fulfill((data, response))
|
||||||
},
|
},
|
||||||
failure: { _, error in
|
failure: { _, error in
|
||||||
Logger.verbose("Error: \(error)")
|
Logger.verbose("Error: \(error)")
|
||||||
|
@ -576,8 +583,8 @@ public class OWSLinkPreview: MTLModel {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
OWSLinkPreview.downloadLink(url: urlString, remainingRetries: remainingRetries - 1)
|
OWSLinkPreview.downloadLink(url: urlString, remainingRetries: remainingRetries - 1)
|
||||||
.done(on: DispatchQueue.global()) { (data) in
|
.done(on: DispatchQueue.global()) { (data, response) in
|
||||||
resolver.fulfill(data)
|
resolver.fulfill((data, response))
|
||||||
}.catch(on: DispatchQueue.global()) { (error) in
|
}.catch(on: DispatchQueue.global()) { (error) in
|
||||||
resolver.reject(error)
|
resolver.reject(error)
|
||||||
}.retainUntilComplete()
|
}.retainUntilComplete()
|
||||||
|
@ -662,9 +669,10 @@ public class OWSLinkPreview: MTLModel {
|
||||||
}
|
}
|
||||||
|
|
||||||
class func parseLinkDataAndBuildDraft(linkData: Data,
|
class func parseLinkDataAndBuildDraft(linkData: Data,
|
||||||
|
response: URLResponse,
|
||||||
linkUrlString: String) -> Promise<OWSLinkPreviewDraft> {
|
linkUrlString: String) -> Promise<OWSLinkPreviewDraft> {
|
||||||
do {
|
do {
|
||||||
let contents = try parse(linkData: linkData)
|
let contents = try parse(linkData: linkData, response: response)
|
||||||
|
|
||||||
let title = contents.title
|
let title = contents.title
|
||||||
guard let imageUrl = contents.imageUrl else {
|
guard let imageUrl = contents.imageUrl else {
|
||||||
|
@ -699,9 +707,9 @@ public class OWSLinkPreview: MTLModel {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class func parse(linkData: Data) throws -> OWSLinkPreviewContents {
|
class func parse(linkData: Data, response: URLResponse) throws -> OWSLinkPreviewContents {
|
||||||
guard let linkText = String(bytes: linkData, encoding: .utf8) else {
|
guard let linkText = String(data: linkData, urlResponse: response) else {
|
||||||
owsFailDebug("Could not parse link text.")
|
print("Could not parse link text.")
|
||||||
throw LinkPreviewError.invalidInput
|
throw LinkPreviewError.invalidInput
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue