Fix pagination links not being parsed correctly for some URLs

Fixes an issue where Mentions notifications wouldn't load past the first page.

URLComponents(string:) fails when the string contains some characters, such as [ or ]
URL(string:) and then URLComponents(url:resolvingAgainstBaseURL:) does not fail
See FB7271340
This commit is contained in:
Shadowfacts 2019-09-14 15:32:20 -04:00
parent 84a07fc718
commit 60aa6eca36
Signed by untrusted user: shadowfacts
GPG Key ID: 94A5AB95422746E5
1 changed files with 6 additions and 3 deletions

View File

@ -44,13 +44,16 @@ extension Pagination {
} }
let rel = segments.last?.replacingOccurrences(of: "\"", with: "").trimmingCharacters(in: .whitespaces).components(separatedBy: "=") let rel = segments.last?.replacingOccurrences(of: "\"", with: "").trimmingCharacters(in: .whitespaces).components(separatedBy: "=")
guard let validURL = url, guard let urlStr = url,
let validURL = URL(string: urlStr),
let key = rel?.first, let key = rel?.first,
key == "rel", key == "rel",
let value = rel?.last, let value = rel?.last,
let kind = Kind(rawValue: value), let kind = Kind(rawValue: value),
let components = URLComponents(string: validURL), let components = URLComponents(url: validURL, resolvingAgainstBaseURL: false),
let queryItems = components.queryItems else { return nil } let queryItems = components.queryItems else {
return nil
}
let min = queryItems.first { $0.name == "min_id" }?.value let min = queryItems.first { $0.name == "min_id" }?.value
let since = queryItems.first { $0.name == "since_id" }?.value let since = queryItems.first { $0.name == "since_id" }?.value