mirror of
https://github.com/oxen-io/session-ios.git
synced 2023-12-13 21:30:14 +01:00
Merge branch 'charlesmchen/pinterestLinkPreviews' into release/2.39.0
This commit is contained in:
commit
91efe8d3d6
|
@ -2166,7 +2166,7 @@
|
|||
"SETTINGS_LINK_PREVIEWS" = "Send Link Previews";
|
||||
|
||||
/* Footer for setting for enabling & disabling link previews. */
|
||||
"SETTINGS_LINK_PREVIEWS_FOOTER" = "Previews are supported for Imgur, Instagram, Reddit, and YouTube links.";
|
||||
"SETTINGS_LINK_PREVIEWS_FOOTER" = "Previews are supported for Imgur, Instagram, Pinterest, Reddit, and YouTube links.";
|
||||
|
||||
/* Header for setting for enabling & disabling link previews. */
|
||||
"SETTINGS_LINK_PREVIEWS_HEADER" = "Link Previews";
|
||||
|
|
|
@ -311,7 +311,12 @@ public class OWSLinkPreview: MTLModel {
|
|||
// Instagram
|
||||
"instagram.com",
|
||||
"www.instagram.com",
|
||||
"m.instagram.com"
|
||||
"m.instagram.com",
|
||||
|
||||
// Pinterest
|
||||
"pinterest.com",
|
||||
"www.pinterest.com",
|
||||
"pin.it"
|
||||
]
|
||||
|
||||
// For media domains, we DO NOT require an exact match - subdomains are allowed.
|
||||
|
@ -327,7 +332,10 @@ public class OWSLinkPreview: MTLModel {
|
|||
|
||||
// Instagram
|
||||
"cdninstagram.com",
|
||||
"fbcdn.net"
|
||||
"fbcdn.net",
|
||||
|
||||
// Pinterest
|
||||
"pinimg.com"
|
||||
]
|
||||
|
||||
private static let protocolWhitelist = [
|
||||
|
@ -780,7 +788,7 @@ public class OWSLinkPreview: MTLModel {
|
|||
}
|
||||
|
||||
var title: String?
|
||||
if let rawTitle = NSRegularExpression.parseFirstMatch(pattern: "<meta\\s+property\\s*=\\s*\"og:title\"\\s+content\\s*=\\s*\"(.*?)\"\\s*/?>",
|
||||
if let rawTitle = NSRegularExpression.parseFirstMatch(pattern: "<meta\\s+property\\s*=\\s*\"og:title\"\\s+[^>]*content\\s*=\\s*\"(.*?)\"\\s*[^>]*/?>",
|
||||
text: linkText,
|
||||
options: .dotMatchesLineSeparators) {
|
||||
if let decodedTitle = decodeHTMLEntities(inString: rawTitle) {
|
||||
|
@ -793,7 +801,7 @@ public class OWSLinkPreview: MTLModel {
|
|||
|
||||
Logger.verbose("title: \(String(describing: title))")
|
||||
|
||||
guard let rawImageUrlString = NSRegularExpression.parseFirstMatch(pattern: "<meta\\s+property\\s*=\\s*\"og:image\"\\s+content\\s*=\\s*\"(.*?)\"\\s*/?>", text: linkText) else {
|
||||
guard let rawImageUrlString = NSRegularExpression.parseFirstMatch(pattern: "<meta\\s+property\\s*=\\s*\"og:image\"\\s+[^>]*content\\s*=\\s*\"(.*?)\"[^>]*/?>", text: linkText) else {
|
||||
return OWSLinkPreviewContents(title: title)
|
||||
}
|
||||
guard let imageUrlString = decodeHTMLEntities(inString: rawImageUrlString)?.ows_stripped() else {
|
||||
|
|
|
@ -130,6 +130,10 @@ class OWSLinkPreviewTest: SSKBaseTestSwift {
|
|||
XCTAssertTrue(OWSLinkPreview.isValidLinkUrl("https://www.instagram.com/p/BrgpsUjF9Jo/?utm_source=ig_web_button_share_sheet"))
|
||||
XCTAssertTrue(OWSLinkPreview.isValidLinkUrl("https://www.instagram.com/p/BrgpsUjF9Jo/?utm_source=ig_share_sheet&igshid=94c7ihqjfmbm"))
|
||||
XCTAssertTrue(OWSLinkPreview.isValidLinkUrl("https://imgur.com/gallery/igHOwDM"))
|
||||
XCTAssertTrue(OWSLinkPreview.isValidLinkUrl("https://pinterest.com/something"))
|
||||
XCTAssertTrue(OWSLinkPreview.isValidLinkUrl("https://www.pinterest.com/something"))
|
||||
XCTAssertTrue(OWSLinkPreview.isValidLinkUrl("https://pin.it/something"))
|
||||
XCTAssertTrue(OWSLinkPreview.isValidLinkUrl("https://www.pinterest.com/ohjoy/recipes/"))
|
||||
|
||||
// Strip trailing commas.
|
||||
XCTAssertTrue(OWSLinkPreview.isValidLinkUrl("https://imgur.com/gallery/igHOwDM,"))
|
||||
|
@ -171,6 +175,7 @@ class OWSLinkPreviewTest: SSKBaseTestSwift {
|
|||
XCTAssertTrue(OWSLinkPreview.isValidMediaUrl("https://scontent-mia3-2.cdninstagram.com/vp/9035a7d6b32e6f840856661e4a11e3cf/5CFC285B/t51.2885-15/e35/47690175_2275988962411653_1145978227188801192_n.jpg?_nc_ht=scontent-mia3-2.cdninstagram.com"))
|
||||
XCTAssertTrue(OWSLinkPreview.isValidMediaUrl("https://scontent-mia3-2.cdninstagram.com/vp/9035a7d6b32e6f840856661e4a11e3cf/5CFC285B/t51.2885-15/e35/47690175_2275988962411653_1145978227188801192_n.jpg?_nc_ht=scontent-mia3-2.cdninstagram.com"))
|
||||
XCTAssertTrue(OWSLinkPreview.isValidMediaUrl("https://i.imgur.com/PYiyLv1.jpg?fbplay"))
|
||||
XCTAssertTrue(OWSLinkPreview.isValidMediaUrl("https://pinimg.com/something"))
|
||||
}
|
||||
|
||||
func testPreviewUrlForMessageBodyText() {
|
||||
|
@ -452,6 +457,27 @@ class OWSLinkPreviewTest: SSKBaseTestSwift {
|
|||
self.waitForExpectations(timeout: 5.0, handler: nil)
|
||||
}
|
||||
|
||||
func testLinkParsingWithRealData10() {
|
||||
let expectation = self.expectation(description: "link download and parsing")
|
||||
|
||||
OWSLinkPreview.downloadLink(url: "https://www.pinterest.com/ohjoy/recipes/")
|
||||
.done { (linkData) in
|
||||
let content = try! OWSLinkPreview.parse(linkData: linkData)
|
||||
XCTAssertNotNil(content)
|
||||
|
||||
XCTAssertEqual(content.title, "Recipes")
|
||||
XCTAssertEqual(content.imageUrl, "https://i.pinimg.com/200x150/76/ae/9d/76ae9d3056dbcb295924fdd5db6951c6.jpg")
|
||||
|
||||
expectation.fulfill()
|
||||
}.catch { (error) in
|
||||
Logger.error("error: \(error)")
|
||||
XCTFail("Unexpected error: \(error)")
|
||||
expectation.fulfill()
|
||||
}.retainUntilComplete()
|
||||
|
||||
self.waitForExpectations(timeout: 5.0, handler: nil)
|
||||
}
|
||||
|
||||
// When using regular expressions to parse link titles, we need to use
|
||||
// String.utf16.count, not String.count in the range.
|
||||
func testRegexRanges() {
|
||||
|
|
Loading…
Reference in a new issue