vendoo_v1.0/Vendoo/EbayWebServiceManager.swift
Okechi Onyeje bfd4832b7d Error Messages Set Up
- for ebay service getting items and authentication
2017-01-25 18:45:03 -05:00

646 lines
29 KiB
Swift
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//
// EbayWebServiceManager.swift
// Vendoo
//
// Created by Okechi Onyeje on 6/3/16.
// Copyright © 2016 Okechi Onyeje. All rights reserved.
//
import Foundation
import Locksmith
protocol EbayWebServiceManagerDelegate {
func signInUser(string: String!)
}
class EbayWebServiceManager: NSObject {
//API Manager class variables
//----------------------------------------------//
let baseURL = "https://api.sandbox.ebay.com/ws/api.dll"
//api credentials for app
private var apiKey: String!
private var devKey: String!
private var certID: String!
var isAuthorized: Bool = NSUserDefaults.standardUserDefaults().boolForKey("ebayAuthorized")
//request variables
private var mutableData: NSMutableData = NSMutableData()
private var currentElementName:NSString = ""
private var catID: NSString!
private var catLevel: NSString!
private var currentCategory: String!
private var catDetailLevel: Int! = 1
private var userEmail:String = (NSUserDefaults.standardUserDefaults().objectForKey("email") as? String)!
private var signinURL: String!
private var xmlResponseDictionary: Dictionary<String, AnyObject!> = Dictionary<String, AnyObject!>()
//class variables
var delegate: EbayWebServiceManagerDelegate?
static var settingsDictionary = Dictionary<String , AnyObject>()
private var subCategories = Dictionary<String, Dictionary<String, AnyObject>>()
private var completion: ServiceResponse!
private var isGettingSubCategories: Bool = false
private var isRevisingListing: Bool = false
private var isErrorHandling: Bool = false
private var currErrorCodeKey: String = ""
private var currErrorMessage: String = ""
private var errorCount = 0
var errorInfo: [[String:String]] = []
private var requestGroup: dispatch_group_t = dispatch_group_create()
var isGettingNotification: Bool = false
private var qtySold: Int!
private var currItemQuantity: Int!
private var currViewController: UIViewController!
//---------------------------------------------//
override init(){
super.init()
if let path = NSBundle.mainBundle().pathForResource("Services", ofType: "plist"), dict = NSDictionary(contentsOfFile: path) as? [String: AnyObject] {
self.apiKey = ((dict["Ebay"] as! Dictionary<String, AnyObject>)["consumerKey"] as! String)
self.devKey = ((dict["Ebay"] as! Dictionary<String, AnyObject>)["devID"] as! String)
self.certID = ((dict["Ebay"] as! Dictionary<String, AnyObject>)["CertID"] as! String)
self.signinURL = ((dict["Ebay"] as! Dictionary<String, AnyObject>)["signin"] as! String)
if(self.isAuthorized){
let dictionary = Locksmith.loadDataForUserAccount(self.userEmail, inService: "vendoo_oauth_ebay")
self.xmlResponseDictionary["eBayAuthToken"] = dictionary?["ebay_oauth"] as? String
}
//set default posting settings for ebay
if(NSUserDefaults.standardUserDefaults().boolForKey("ebayDefaultsOverriden")) {
EbayWebServiceManager.settingsDictionary = (NSUserDefaults.standardUserDefaults().objectForKey("ebaySettings") as? Dictionary<String, AnyObject>)!
}
else{
EbayWebServiceManager.settingsDictionary = ([
"listingType":"FixedPriceItem",
"condition":"1500",
"listingDuration":"Days_7",
"ebaySite":"US",
"currency":"USD",
"shipping": [
"shippingType": "Flat",
"freeShipping": "true",
"shippingServicePriority": "1",
"shippingService":"UPSGround",
"shippingServiceAdditionalCost":"0.00"
],
"payment":"PayPal",
"return":"ReturnsNotAccepted",
"postalCode":"21216"
] as Dictionary<String, AnyObject>)
NSUserDefaults.standardUserDefaults().setObject(EbayWebServiceManager.settingsDictionary, forKey: "ebaySettings")
NSUserDefaults.standardUserDefaults().setBool(true, forKey: "ebayDefaultsOverriden")
}
}
}
func reinit() {
EbayWebServiceManager.settingsDictionary = (NSUserDefaults.standardUserDefaults().objectForKey("ebaySettings") as? Dictionary<String, AnyObject>)!
}
}
//MARK: - authentication methods
extension EbayWebServiceManager {
//used to set up all xml requests when making calls to ebay service
private func requestMaker(soapMessage: String!, theRequest: NSMutableURLRequest!) {
let msgLength = soapMessage.characters.count
theRequest.addValue("text/xml", forHTTPHeaderField: "Content-Type")
theRequest.addValue(String(msgLength), forHTTPHeaderField: "Content-Length")
theRequest.addValue("967", forHTTPHeaderField: "X-EBAY-API-COMPATIBILITY-LEVEL")
theRequest.addValue(self.devKey, forHTTPHeaderField: "X-EBAY-API-DEV-NAME")
theRequest.addValue(self.certID, forHTTPHeaderField: "X-EBAY-API-CERT-NAME")
theRequest.addValue(self.apiKey, forHTTPHeaderField: "X-EBAY-API-APP-NAME")
theRequest.addValue("0", forHTTPHeaderField: "X-EBAY-API-SITEID")
theRequest.addValue("", forHTTPHeaderField: "SOAPAction")
theRequest.HTTPMethod = "POST"
//adds xml soap message to request before starting call
theRequest.HTTPBody = soapMessage.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false) // or false
let connection = NSURLConnection(request: theRequest, delegate: self, startImmediately: true)
connection!.start()
if (connection == true) {
var mutableData : Void = NSMutableData.initialize()
}
}
//authorize ebay for use with app by first getting a sessionID
func authorizeApp(onComplete: ServiceResponse){
let soapMessage = "<?xml version=\"1.0\" encoding=\"utf-8\"?>" +
"<GetSessionIDRequest xmlns=\"urn:ebay:apis:eBLBaseComponents\">" +
"<RuName>Kroleo-Kroleo-Vendoo-S-ktqeobkk</RuName>" +
"</GetSessionIDRequest>"
let url = NSURL(string: self.baseURL)
let theRequest = NSMutableURLRequest(URL: url!)
theRequest.addValue("GetSessionID", forHTTPHeaderField: "X-EBAY-API-CALL-NAME")
self.completion = onComplete
self.requestMaker(soapMessage, theRequest: theRequest)
}
func deauthorizeApp(){
var soapMessage = "<?xml version=\"1.0\" encoding=\"utf-8\"?>" +
"<RevokeTokenRequest xmlns=\"urn:ebay:apis:eBLBaseComponents\">" +
"<RequesterCredentials>" +
"<eBayAuthToken>\(self.xmlResponseDictionary["eBayAuthToken"]!)</eBayAuthToken>" +
"</RequesterCredentials>"
soapMessage = soapMessage + "<ErrorLanguage>en_US</ErrorLanguage>" +
"<WarningLevel>High</WarningLevel></RevokeTokenRequest>"
let url = NSURL(string: self.baseURL)
let theRequest = NSMutableURLRequest(URL: url!)
theRequest.addValue("RevokeToken", forHTTPHeaderField: "X-EBAY-API-CALL-NAME")
self.requestMaker(soapMessage, theRequest: theRequest)
//delete token from locksmith keychain
do{
try Locksmith.deleteDataForUserAccount(self.userEmail, inService: "vendoo_oauth_ebay")
print("account credentials deleted for ebay")
NSUserDefaults.standardUserDefaults().setBool(false, forKey: "ebayAuthorized")
self.isAuthorized = false
}
catch{
(error)
print(error)
//could not save data to keychain
print("account credentials could not be deleted")
}
}
//used to retrieve users paypal email
private func getPaypalEmail(onCompletion: ServiceResponse){
var soapMessage = "<?xml version=\"1.0\" encoding=\"utf-8\"?>" +
"<GetUserPreferencesRequest xmlns=\"urn:ebay:apis:eBLBaseComponents\">" +
"<RequesterCredentials>" +
"<eBayAuthToken>\(self.xmlResponseDictionary["eBayAuthToken"] as! String)</eBayAuthToken>" +
"</RequesterCredentials>"
soapMessage = soapMessage + "<ShowBidderNoticePreferences>true</ShowBidderNoticePreferences>" +
"<ShowCombinedPaymentPreferences>true</ShowCombinedPaymentPreferences>" +
"<ShowDispatchCutoffTimePreferences>true</ShowDispatchCutoffTimePreferences>" +
"<ShoweBayPLUSPreference>true</ShoweBayPLUSPreference>" +
"<ShowEmailShipmentTrackingNumberPreference>true</ShowEmailShipmentTrackingNumberPreference>" +
"<ShowEndOfAuctionEmailPreferences>true</ShowEndOfAuctionEmailPreferences>" +
"<ShowGlobalShippingProgramListingPreference>true</ShowGlobalShippingProgramListingPreference>" +
"<ShowGlobalShippingProgramPreference>true</ShowGlobalShippingProgramPreference>" +
"<ShowOutOfStockControlPreference>true</ShowOutOfStockControlPreference>" +
"<ShowOverrideGSPServiceWithIntlServicePreference>true</ShowOverrideGSPServiceWithIntlServicePreference>" +
"<ShowPickupDropoffPreferences>true</ShowPickupDropoffPreferences>" +
"<ShowPurchaseReminderEmailPreferences>true</ShowPurchaseReminderEmailPreferences>" +
"<ShowRequiredShipPhoneNumberPreference>true</ShowRequiredShipPhoneNumberPreference>" +
"<ShowSellerExcludeShipToLocationPreference>true</ShowSellerExcludeShipToLocationPreference>" +
"<ShowSellerFavoriteItemPreferences>true</ShowSellerFavoriteItemPreferences>" +
"<ShowSellerPaymentPreferences>true</ShowSellerPaymentPreferences>" +
"<ShowSellerProfilePreferences>true</ShowSellerProfilePreferences>" +
"<ShowSellerReturnPreferences>true</ShowSellerReturnPreferences>" +
"<ShowUnpaidItemAssistanceExclusionList>true</ShowUnpaidItemAssistanceExclusionList>" +
"<ShowUnpaidItemAssistancePreference>true</ShowUnpaidItemAssistancePreference>" +
"<ErrorLanguage>en_US</ErrorLanguage>" +
"<MessageID> string </MessageID><WarningLevel>High</WarningLevel>" +
"</GetUserPreferencesRequest>"
let url = NSURL(string: self.baseURL)
let theRequest = NSMutableURLRequest(URL: url!)
theRequest.addValue("GetUserPreferences", forHTTPHeaderField: "X-EBAY-API-CALL-NAME")
self.completion = onCompletion
self.requestMaker(soapMessage, theRequest: theRequest)
}
//used to add images to listing posting request before actually posting
func addImagesToListing(listingID: String, imageURLs: [String], listingOnCompletion: ServiceResponse, body: [String:String],onCompletion: ServiceResponse) {
listItem(body, imageUrls: imageURLs, completion: listingOnCompletion)
}
func listItem(params: [String: String], imageUrls: [String], completion: ServiceResponse?){
var dict = EbayWebServiceManager.settingsDictionary
var emailRetrievalGroup = dispatch_group_create()
var soapMessage = "<?xml version=\"1.0\" encoding=\"utf-8\"?>" +
"<AddItemRequest xmlns=\"urn:ebay:apis:eBLBaseComponents\">" +
"<RequesterCredentials>" +
"<eBayAuthToken>\(self.xmlResponseDictionary["eBayAuthToken"] as! String)</eBayAuthToken>" +
"</RequesterCredentials>"
//if paypal email not in local cache retrieve it before continuing to post to ebay
if((dict["payment"] as? String) == "PayPal") {
dispatch_group_enter(emailRetrievalGroup)
if((EbayWebServiceManager.settingsDictionary["paypal_email"]) == nil) {
self.getPaypalEmail({
(any, error) -> Void in
dispatch_group_leave(emailRetrievalGroup)
})
}else {
dispatch_group_leave(emailRetrievalGroup)
}
dispatch_group_notify(emailRetrievalGroup, dispatch_get_main_queue(), {
soapMessage = soapMessage + "<Item>" +
"<Title>\(params["title"] as String!)</Title>" +
"<Description>\(params["description"] as String!)</Description>" +
"<PrimaryCategory>" +
"<CategoryID>\(params["category_id"] as String!)</CategoryID>" +
"</PrimaryCategory>" +
"<StartPrice>\(params["price"] as String!)</StartPrice>" +
"<ConditionID>\(dict["condition"] as! String!)</ConditionID>" +
"<Country>US</Country>" +
"<Currency>USD</Currency>" +
"<DispatchTimeMax>3</DispatchTimeMax>" +
"<ListingDuration>\(dict["listingDuration"] as! String!)</ListingDuration>" +
"<ListingType>\(dict["listingType"] as! String!)</ListingType>" +
"<PaymentMethods>\(dict["payment"] as! String!)</PaymentMethods>" +
"<PayPalEmailAddress>\(dict["paypal_email"] as! String!)</PayPalEmailAddress><PictureDetails><GalleryType>Gallery</GalleryType>"
//append image urls to listing request
for i in 0...(imageUrls.count - 1) {
soapMessage = soapMessage +
"<PictureURL>\(imageUrls[i].stringByReplacingOccurrencesOfString("&", withString: "&amp;"))</PictureURL>"
}
soapMessage = soapMessage + "</PictureDetails><PostalCode>\(dict["postalCode"] as! String!)</PostalCode>" +
"<Quantity>\(params["quantity"] as String!)</Quantity>" +
"<ReturnPolicy>" +
"<ReturnsAcceptedOption>\(dict["return"] as! String!)</ReturnsAcceptedOption>" +
"<Description>Vendoo requires seller to set up return policy manually.</Description>" +
"</ReturnPolicy>" +
"<ShippingDetails>" +
"<ShippingServiceOptions>" +
"<ShippingServicePriority>\(dict["shipping"]!["shippingServicePriority"] as! String!)</ShippingServicePriority>" +
"<ShippingService>\(dict["shipping"]!["shippingService"] as! String!)</ShippingService>" +
"<ShippingServiceCost>0.00</ShippingServiceCost>" +
"<ShippingServiceAdditionalCost>\(dict["shipping"]!["shippingServiceAdditionalCost"] as! String!)</ShippingServiceAdditionalCost>" +
"</ShippingServiceOptions>" +
"</ShippingDetails>" +
"<Site>US</Site>" +
"</Item></AddItemRequest>"
print(soapMessage)
//make request
let url = NSURL(string: self.baseURL)
let theRequest = NSMutableURLRequest(URL: url!)
theRequest.addValue("AddItem", forHTTPHeaderField: "X-EBAY-API-CALL-NAME")
self.completion = completion!
self.requestMaker(soapMessage, theRequest: theRequest)
})
}
}
//after getting a sessionID get a unique oauth token
func fetchToken(onComplete: ServiceResponse?) {
let soapMessage = "<?xml version=\"1.0\" encoding=\"utf-8\"?>" +
"<FetchTokenRequest xmlns=\"urn:ebay:apis:eBLBaseComponents\"><SessionID>\(self.xmlResponseDictionary["SessionID"] as! String!)</SessionID></FetchTokenRequest>"
let url = NSURL(string: self.baseURL)
let theRequest = NSMutableURLRequest(URL: url!)
theRequest.addValue("FetchToken", forHTTPHeaderField: "X-EBAY-API-CALL-NAME")
//dispatch_group_enter(self.requestGroup)
self.completion = onComplete
self.requestMaker(soapMessage, theRequest: theRequest)
}
//used to get sub categories when creating a new listing
func getSubCategories(selectedCategory: String, detailLevel: Int, catCode: String, onCompletion: ServiceResponse) {
self.isGettingNotification = false
self.isGettingSubCategories = true
var soapMessage = "<?xml version=\"1.0\" encoding=\"utf-8\"?>" +
"<GetCategoriesRequest xmlns=\"urn:ebay:apis:eBLBaseComponents\">" +
"<RequesterCredentials>" +
"<eBayAuthToken>\(self.xmlResponseDictionary["eBayAuthToken"] as! String)</eBayAuthToken>"
soapMessage = soapMessage + "</RequesterCredentials>" +
"<CategoryParent>\(catCode)</CategoryParent>" +
"<CategorySiteID>0</CategorySiteID>" +
"<DetailLevel>ReturnAll</DetailLevel><LevelLimit>\(detailLevel)</LevelLimit>" +
"</GetCategoriesRequest>"
let url = NSURL(string: self.baseURL)
let theRequest = NSMutableURLRequest(URL: url!)
theRequest.addValue("GetCategories", forHTTPHeaderField: "X-EBAY-API-CALL-NAME")
self.completion = onCompletion
self.catDetailLevel = detailLevel
self.requestMaker(soapMessage, theRequest: theRequest)
}
//used for notifications to retrieve current information about the status of a listing
func getListingInfo(listingID: String, onComplete: ServiceResponse?){
var soapMessage = "<?xml version=\"1.0\" encoding=\"utf-8\"?>" +
"<GetItemRequest xmlns=\"urn:ebay:apis:eBLBaseComponents\">" +
"<RequesterCredentials>" +
"<eBayAuthToken>\(self.xmlResponseDictionary["eBayAuthToken"] as! String)</eBayAuthToken>" +
"</RequesterCredentials>"
soapMessage = soapMessage +
"<ItemID>\(listingID)</ItemID>" +
"</GetItemRequest>"
let url = NSURL(string: self.baseURL)
let theRequest = NSMutableURLRequest(URL: url!)
theRequest.addValue("GetItem", forHTTPHeaderField: "X-EBAY-API-CALL-NAME")
self.completion = onComplete
self.isGettingNotification = true
self.requestMaker(soapMessage, theRequest: theRequest)
}
}
extension EbayWebServiceManager: NSURLConnectionDelegate {
func connection(connection: NSURLConnection!, didReceiveResponse response: NSURLResponse!) {
mutableData.length = 0;
print(response)
}
func connection(connection: NSURLConnection!, didReceiveData data: NSData!) {
mutableData.appendData(data)
print(data)
}
func connectionDidFinishLoading(connection: NSURLConnection!) {
let response = NSString(data: mutableData, encoding: NSUTF8StringEncoding)
print(response)
var response_fixed = response!.stringByReplacingOccurrencesOfString("&amp;", withString: "and")
response_fixed = response_fixed.stringByReplacingOccurrencesOfString("&apos;", withString: "'")
let data_fixed = response_fixed.dataUsingEncoding(NSUTF8StringEncoding)
print(response_fixed)
let xmlParser = NSXMLParser(data: data_fixed!)
xmlParser.delegate = self
xmlParser.parse()
xmlParser.shouldResolveExternalEntities = true
}
func connection(connection: NSURLConnection, willSendRequestForAuthenticationChallenge challenge: NSURLAuthenticationChallenge) {
challenge.sender!.performDefaultHandlingForAuthenticationChallenge!(challenge)
}
}
//used to parse xml responses and save data
extension EbayWebServiceManager: NSXMLParserDelegate {
func parser(parser: NSXMLParser, didStartElement elementName: String, namespaceURI: String?, qualifiedName qName: String?, attributes attributeDict: [String : String]) {
currentElementName = elementName
}
func parser(parser: NSXMLParser, foundCharacters string: String) {
switch (self.currentElementName) {
/*
This case will be developed further to allow error handling with ebay and stateful operations
*/
case "Ack":
if(string == "Success") {
if(isRevisingListing) {
self.completion(nil, nil)
self.isRevisingListing = false
}
}
else if(string == "Failure") {
self.isErrorHandling = true
}
break
case "Errors":
if(self.isErrorHandling) {
}
case "ShortMessage":
if(self.isErrorHandling) {
self.errorInfo.append(Dictionary<String, String>())
self.errorInfo[self.errorCount]["short_message"] = string
}
break
case "LongMessage":
if(self.isErrorHandling) {
self.errorInfo[self.errorCount]["long_message"] = string
}
break
case "ErrorCode":
if(self.isErrorHandling) {
self.errorInfo[self.errorCount]["error_code"] = string
}
break
case "SeverityCode":
if(self.isErrorHandling) {
self.errorInfo[self.errorCount]["severity_code"] = string
}
break
case "ErrorClassification":
if(self.isErrorHandling) {
self.errorInfo[self.errorCount]["error_classification"] = string
self.errorCount+=1
}
break
case "Build":
if(self.isErrorHandling){
self.completion(self.errorInfo, true)
}
break
/*
Used to authorize user to allow posting new listings to ebay sites and fetches all necessary information when posting to Ebay
*/
case "SessionID":
self.xmlResponseDictionary["SessionID"] = string
var str = "\(signinURL)&SessID=\(string)"
self.signinURL = str
print(self.signinURL)
print((self.currentElementName as String) + " : " + string)
self.delegate?.signInUser(self.signinURL)
break
case "eBayAuthToken":
self.xmlResponseDictionary["eBayAuthToken"] = string
print(string)
//save token to locksmith keychain
do{
try Locksmith.saveData(["ebay_oauth" : string], forUserAccount: self.userEmail, inService: "vendoo_oauth_ebay")
print("account credentials saved")
NSUserDefaults.standardUserDefaults().setBool(true, forKey: "ebayAuthorized")
self.isAuthorized = true
self.completion(nil, nil)
//Test authentication
let soapmessage = "<?xml version=\"1.0\" encoding=\"utf-8\"?>" +
"<GetUserRequest xmlns=\"urn:ebay:apis:eBLBaseComponents\">" +
"<RequesterCredentials><eBayAuthToken>\(string)</eBayAuthToken>" +
"</RequesterCredentials></GetUserRequest>"
let url = NSURL(string: self.baseURL)
let theRequest = NSMutableURLRequest(URL: url!)
theRequest.addValue("GetUser", forHTTPHeaderField: "X-EBAY-API-CALL-NAME")
self.requestMaker(soapmessage, theRequest: theRequest)
}
catch{
(error)
print(error)
//could not save data to keychain
print("account credentials could not be saved")
}
break
//saves paypal email from response
case "DefaultPayPalEmailAddress":
var dict = (EbayWebServiceManager.settingsDictionary)
dict["paypal_email"] = string
EbayWebServiceManager.settingsDictionary = dict
NSUserDefaults.standardUserDefaults().setObject(EbayWebServiceManager.settingsDictionary, forKey: "ebaySettings")
self.completion(nil, nil)
break
//saves userID from response and gets toplevel ebay categories
case "UserID" :
if(!self.isGettingNotification) {
print(string)
EbayWebServiceManager.settingsDictionary["userID"] = string
NSUserDefaults.standardUserDefaults().setObject(EbayWebServiceManager.settingsDictionary, forKey: "ebaySettings")
print(self.xmlResponseDictionary["eBayAuthToken"])
let soapmessage = "<?xml version=\"1.0\" encoding=\"utf-8\"?>" +
"<GetCategoriesRequest xmlns=\"urn:ebay:apis:eBLBaseComponents\">" +
"<RequesterCredentials><eBayAuthToken>\(self.xmlResponseDictionary["eBayAuthToken"] as! String)</eBayAuthToken>" +
"</RequesterCredentials><CategorySiteID>0</CategorySiteID><DetailLevel>ReturnAll</DetailLevel><LevelLimit>1</LevelLimit>" +
"</GetCategoriesRequest>"
let url = NSURL(string: self.baseURL)
let theRequest = NSMutableURLRequest(URL: url!)
theRequest.addValue("GetCategories", forHTTPHeaderField: "X-EBAY-API-CALL-NAME")
self.completion(nil, nil)
self.requestMaker(soapmessage, theRequest: theRequest)
}
break
/*
Used to build both the top level categories, and subcategories on request during item listing workflow
*/
case "CategoryID" :
self.catID = string
break
case "CategoryLevel":
self.catLevel = string
break
case "CategoryName" :
if (!self.isGettingNotification) {
if(!self.isGettingSubCategories) {
if((EbayWebServiceManager.settingsDictionary["categories"]) == nil) {
EbayWebServiceManager.settingsDictionary["categories"] = Dictionary<String , Dictionary<String, AnyObject>>()
}
var dict: Dictionary<String, Dictionary<String, AnyObject>> = (EbayWebServiceManager.settingsDictionary["categories"]!) as! Dictionary<String, Dictionary<String, AnyObject>>
dict[string] = ["cat_id": self.catID, "isLeaf": false, "level": self.catLevel]
EbayWebServiceManager.settingsDictionary["categories"] = dict
NSUserDefaults.standardUserDefaults().setObject(EbayWebServiceManager.settingsDictionary, forKey: "ebaySettings")
}
else {
if "\(self.catDetailLevel)" == self.catLevel {
if((self.subCategories[string] == nil )){
self.subCategories[string] = ["cat_id": self.catID, "isLeaf": false, "level": self.catLevel]
}
}
self.currentCategory = string
}
}
break
case "LeafCategory":
if (!self.isGettingSubCategories) {
var dict: Dictionary<String, Dictionary<String, AnyObject>> = (EbayWebServiceManager.settingsDictionary["categories"]!) as! Dictionary<String, Dictionary<String, AnyObject>>
dict[self.currentCategory]!["isLeaf"] = true
}
else {
if (self.catDetailLevel == Int((self.subCategories[self.currentCategory]!["level"] as! String))) {
self.subCategories[self.currentCategory]!["isLeaf"] = true
}
}
break
case "CategoryCount":
if(self.isGettingSubCategories){
self.completion(self.subCategories, nil)
self.isGettingSubCategories = false
self.subCategories = Dictionary<String, Dictionary<String, AnyObject>>()
}
break
/*
Used during the listing creation process to save the new listing id, as well as adding pictures to the new listing
*/
case "ItemID":
if (!self.isGettingNotification) {
self.completion(string, nil)
}
break
case "ReviseItemResponse":
self.isRevisingListing = true
break
/*
Used for retrieving listing info for notifications
*/
case "Quantity":
if self.isGettingNotification {
print("Quantity: \(string)")
self.currItemQuantity = Int(string)
}
break
case "QuantitySold":
if self.isGettingNotification {
print("QuantitySold: \(string)")
self.qtySold = Int(string)
}
break
case "ListingStatus":
if self.isGettingNotification {
print("ListingStatus: \(string)")
self.completion(["status":string, "quantitySold": self.qtySold, "itemQuantity": self.currItemQuantity], nil)
self.qtySold = nil
self.currItemQuantity = nil
}
break
default:
//print(string)
print("\(self.currentElementName):\(string)")
}
}
}