use transport.send(request, resultType, completion)

This commit is contained in:
Jonathan Bennett 2019-11-20 11:47:28 -05:00
parent e4cce9f7f2
commit e867991ec8
3 changed files with 33 additions and 19 deletions

View File

@ -7,6 +7,7 @@
objects = {
/* Begin PBXBuildFile section */
3B826D6923859D9D00FC1ADB /* FeedWranglerAuthorizationResult.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3B826D6823859D9D00FC1ADB /* FeedWranglerAuthorizationResult.swift */; };
3BF610C723571CD4000EF978 /* FeedWranglerAPICaller.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3BF610C423571CD4000EF978 /* FeedWranglerAPICaller.swift */; };
3BF610C823571CD4000EF978 /* FeedWranglerConfig.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3BF610C523571CD4000EF978 /* FeedWranglerConfig.swift */; };
3BF610C923571CD4000EF978 /* FeedWranglerAccountDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3BF610C623571CD4000EF978 /* FeedWranglerAccountDelegate.swift */; };
@ -178,6 +179,7 @@
/* End PBXContainerItemProxy section */
/* Begin PBXFileReference section */
3B826D6823859D9D00FC1ADB /* FeedWranglerAuthorizationResult.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FeedWranglerAuthorizationResult.swift; sourceTree = "<group>"; };
3BF610C423571CD4000EF978 /* FeedWranglerAPICaller.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FeedWranglerAPICaller.swift; sourceTree = "<group>"; };
3BF610C523571CD4000EF978 /* FeedWranglerConfig.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FeedWranglerConfig.swift; sourceTree = "<group>"; };
3BF610C623571CD4000EF978 /* FeedWranglerAccountDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FeedWranglerAccountDelegate.swift; sourceTree = "<group>"; };
@ -349,6 +351,7 @@
3BF6118F23577173000EF978 /* FeedWranglerGenericResult.swift */,
3BF611912357877E000EF978 /* FeedWranglerFeedItem.swift */,
3BF6119323578F55000EF978 /* FeedWranglerFeedItemsRequest.swift */,
3B826D6823859D9D00FC1ADB /* FeedWranglerAuthorizationResult.swift */,
);
path = FeedWrangler;
sourceTree = "<group>";
@ -948,6 +951,7 @@
9E1D155B2334423300F4944C /* FeedlyOrganiseParsedItemsByFeedOperation.swift in Sources */,
552032FE229D5D5A009559E0 /* ReaderAPIAccountDelegate.swift in Sources */,
3BF610C723571CD4000EF978 /* FeedWranglerAPICaller.swift in Sources */,
3B826D6923859D9D00FC1ADB /* FeedWranglerAuthorizationResult.swift in Sources */,
5170743C232AEDB500A461A3 /* OPMLFile.swift in Sources */,
51BB7B84233531BC008E8144 /* AccountBehaviors.swift in Sources */,
9E1773D923458D590056A5A8 /* FeedlyResourceId.swift in Sources */,

View File

@ -33,31 +33,18 @@ final class FeedWranglerAPICaller: NSObject {
let request = URLRequest(url: callURL, credentials: credentials)
let username = self.credentials?.username ?? ""
transport.send(request: request) { result in
transport.send(request: request, resultType: FeedWranglerAuthorizationResult.self) { result in
switch result {
case .success(let (_, data)):
guard let data = data else {
case .success(let (_, results)):
if let accessToken = results?.accessToken {
let authCredentials = Credentials(type: .feedWranglerToken, username: username, secret: accessToken)
completion(.success(authCredentials))
} else {
completion(.success(nil))
return
}
do {
if let json = try JSONSerialization.jsonObject(with: data, options: []) as? [String:Any] {
if let accessToken = json["access_token"] as? String {
let authCredentials = Credentials(type: .feedWranglerToken, username: username, secret: accessToken)
completion(.success(authCredentials))
return
}
}
completion(.success(nil))
} catch let error {
completion(.failure(error))
}
case .failure(let error):
completion(.failure(error))
}
}
}

View File

@ -0,0 +1,23 @@
//
// FeedWranglerAuthorizationResult.swift
// Account
//
// Created by Jonathan Bennett on 2019-11-20.
// Copyright © 2019 Ranchero Software, LLC. All rights reserved.
//
import Foundation
struct FeedWranglerAuthorizationResult: Hashable, Codable {
let accessToken: String?
let error: String?
let result: String
enum CodingKeys: String, CodingKey {
case accessToken = "access_token"
case error = "error"
case result = "result"
}
}