This PR contains all the work related to setting up this project as required to implement the [Assignment](https://repo.rock-n-code.com/rock-n-code/deep-linking-assignment/wiki/Assignment) on top, as intended. To summarise this work: - [x] created a new **Xcode** project; - [x] cloned the `Wikipedia` app and inserted it into the **Xcode** project; - [x] created the `Locations` app and also, its `Libraries` package; - [x] created the `Shared` package to share dependencies between the apps; - [x] added a `Makefile` file and implemented some **environment** and **help** commands. Co-authored-by: Javier Cicchelli <javier@rock-n-code.com> Reviewed-on: rock-n-code/deep-linking-assignment#1
50 lines
1.6 KiB
Swift
50 lines
1.6 KiB
Swift
import Foundation
|
|
|
|
enum GlobalUserInfoFetcherError: Error {
|
|
case cannotExtractMergedGroups
|
|
case unableToFindEditCount
|
|
}
|
|
|
|
class GlobalUserInfoFetcher: Fetcher {
|
|
|
|
func fetchEditCount(guiUser: String, siteURL: URL, completion: @escaping ((Result<Int, Error>) -> Void)) {
|
|
|
|
let parameters = [
|
|
"action": "query",
|
|
"meta": "globaluserinfo",
|
|
"guiuser": guiUser,
|
|
"guiprop": "groups|merged|unattached",
|
|
"format": "json"
|
|
]
|
|
|
|
performMediaWikiAPIGET(for: siteURL, with: parameters, cancellationKey: nil) { (result, response, error) in
|
|
|
|
if let error = error {
|
|
completion(.failure(error))
|
|
return
|
|
}
|
|
|
|
guard
|
|
let query = result?["query"] as? [String : Any],
|
|
let userinfo = query["globaluserinfo"] as? [String : Any],
|
|
let merged = userinfo["merged"] as? [[String: Any]] else {
|
|
completion(.failure(GlobalUserInfoFetcherError.cannotExtractMergedGroups))
|
|
return
|
|
}
|
|
|
|
for dict in merged {
|
|
if let responseURLString = dict["url"] as? String,
|
|
let responseURL = URL(string: responseURLString),
|
|
siteURL == responseURL,
|
|
let editCount = dict["editcount"] as? Int {
|
|
|
|
completion(.success(editCount))
|
|
return
|
|
}
|
|
}
|
|
|
|
completion(.failure(GlobalUserInfoFetcherError.unableToFindEditCount))
|
|
}
|
|
}
|
|
}
|