diff --git a/Vendoo.xcworkspace/xcuserdata/okechi.xcuserdatad/UserInterfaceState.xcuserstate b/Vendoo.xcworkspace/xcuserdata/okechi.xcuserdatad/UserInterfaceState.xcuserstate index 59acbc9..325e34c 100644 Binary files a/Vendoo.xcworkspace/xcuserdata/okechi.xcuserdatad/UserInterfaceState.xcuserstate and b/Vendoo.xcworkspace/xcuserdata/okechi.xcuserdatad/UserInterfaceState.xcuserstate differ diff --git a/Vendoo.xcworkspace/xcuserdata/okechi.xcuserdatad/UserInterfaceState.xcuserstate-base b/Vendoo.xcworkspace/xcuserdata/okechi.xcuserdatad/UserInterfaceState.xcuserstate-base index ad8885e..fdaef2a 100644 Binary files a/Vendoo.xcworkspace/xcuserdata/okechi.xcuserdatad/UserInterfaceState.xcuserstate-base and b/Vendoo.xcworkspace/xcuserdata/okechi.xcuserdatad/UserInterfaceState.xcuserstate-base differ diff --git a/Vendoo.xcworkspace/xcuserdata/okechi.xcuserdatad/UserInterfaceState.xcuserstate-ours b/Vendoo.xcworkspace/xcuserdata/okechi.xcuserdatad/UserInterfaceState.xcuserstate-ours index f7d4c09..8a12093 100644 Binary files a/Vendoo.xcworkspace/xcuserdata/okechi.xcuserdatad/UserInterfaceState.xcuserstate-ours and b/Vendoo.xcworkspace/xcuserdata/okechi.xcuserdatad/UserInterfaceState.xcuserstate-ours differ diff --git a/Vendoo.xcworkspace/xcuserdata/okechi.xcuserdatad/UserInterfaceState.xcuserstate-theirs b/Vendoo.xcworkspace/xcuserdata/okechi.xcuserdatad/UserInterfaceState.xcuserstate-theirs index 63a8882..c5d7912 100644 Binary files a/Vendoo.xcworkspace/xcuserdata/okechi.xcuserdatad/UserInterfaceState.xcuserstate-theirs and b/Vendoo.xcworkspace/xcuserdata/okechi.xcuserdatad/UserInterfaceState.xcuserstate-theirs differ diff --git a/Vendoo.xcworkspace/xcuserdata/okechi.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist b/Vendoo.xcworkspace/xcuserdata/okechi.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist index 70e71b3..dfbaa09 100644 --- a/Vendoo.xcworkspace/xcuserdata/okechi.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist +++ b/Vendoo.xcworkspace/xcuserdata/okechi.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist @@ -218,11 +218,11 @@ ignoreCount = "0" continueAfterRunningActions = "No" filePath = "Vendoo/ListingPreviewViewController.swift" - timestampString = "491395746.298372" + timestampString = "491705640.842647" startingColumnNumber = "9223372036854775807" endingColumnNumber = "9223372036854775807" - startingLineNumber = "317" - endingLineNumber = "317" + startingLineNumber = "340" + endingLineNumber = "340" landmarkName = "publishItem(_:)" landmarkType = "5"> @@ -234,11 +234,11 @@ ignoreCount = "0" continueAfterRunningActions = "No" filePath = "Vendoo/ListingPreviewViewController.swift" - timestampString = "491395746.298372" + timestampString = "491705640.842647" startingColumnNumber = "9223372036854775807" endingColumnNumber = "9223372036854775807" - startingLineNumber = "342" - endingLineNumber = "342" + startingLineNumber = "366" + endingLineNumber = "366" landmarkName = "publishItem(_:)" landmarkType = "5"> @@ -266,7 +266,7 @@ moduleName = "Vendoo" usesParentBreakpointCondition = "Yes" urlString = "file:///Users/okechi/Documents/iOs%20Practice/Vendoo/Vendoo_bb/Vendoo/Vendoo/EtsyRESTAPIManager.swift" - timestampString = "491530458.908998" + timestampString = "491705859.140832" startingColumnNumber = "9223372036854775807" endingColumnNumber = "9223372036854775807" startingLineNumber = "216" @@ -281,7 +281,7 @@ moduleName = "Vendoo" usesParentBreakpointCondition = "Yes" urlString = "file:///Users/okechi/Documents/iOs%20Practice/Vendoo/Vendoo_bb/Vendoo/Vendoo/EtsyRESTAPIManager.swift" - timestampString = "491530458.909179" + timestampString = "491705859.141037" startingColumnNumber = "9223372036854775807" endingColumnNumber = "9223372036854775807" startingLineNumber = "219" @@ -401,6 +401,38 @@ endingLineNumber = "610" landmarkName = "sendPOSTRequest(_:body:onCompletion:)" landmarkType = "5"> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Vendoo/EbaySettingsViewController.swift b/Vendoo/EbaySettingsViewController.swift index c40945b..f4229fc 100644 --- a/Vendoo/EbaySettingsViewController.swift +++ b/Vendoo/EbaySettingsViewController.swift @@ -9,11 +9,42 @@ import UIKit class EbaySettingsViewController: UIViewController { + var wereDefaultsChanged: Bool = NSUserDefaults.standardUserDefaults().boolForKey("ebayDefaultsOverriden") + + //IBOutlets + @IBOutlet weak var listingTypeBtn: UIButton! + + @IBOutlet weak var conditonBtn: UIButton! + + @IBOutlet weak var listingDurationBtn: UIButton! + + @IBOutlet weak var ebaySite: UIButton! + + @IBOutlet weak var shippingBtn: UIButton! + + @IBOutlet weak var paymentBtn: UIButton! + + @IBOutlet weak var returnPolicyBtn: UIButton! + + @IBOutlet weak var userID: UILabel! + + + + var ebayManager: EbayWebServiceManager! override func viewDidLoad() { super.viewDidLoad() - + self.ebayManager.reinit() // Do any additional setup after loading the view. + if(wereDefaultsChanged) { + //change button labels to reflect user selected defaults + } + dispatch_async(dispatch_get_main_queue(), { + print(EbayWebServiceManager.settingsDictionary["userID"] as? String) + self.userID.text = EbayWebServiceManager.settingsDictionary["userID"] as? String + + }) + } override func didReceiveMemoryWarning() { @@ -21,6 +52,8 @@ class EbaySettingsViewController: UIViewController { // Dispose of any resources that can be recreated. } + + /* // MARK: - Navigation @@ -31,9 +64,17 @@ class EbaySettingsViewController: UIViewController { // Pass the selected object to the new view controller. } */ + } +//MARK:- Class Methods +extension EbaySettingsViewController { + + func loadManager (ebayManager: EbayWebServiceManager) { + self.ebayManager = ebayManager + } +} //MARK:- IBActions extension EbaySettingsViewController { @@ -44,4 +85,25 @@ extension EbaySettingsViewController { } + @IBAction func selectListingType(sender: AnyObject) { + } + + @IBAction func selectCondition(sender: AnyObject) { + } + + @IBAction func selectListingDuration(sender: AnyObject) { + } + + @IBAction func selectEbaySite(sender: AnyObject) { + } + + @IBAction func selectShipping(sender: AnyObject) { + } + + @IBAction func selectPayment(sender: AnyObject) { + } + + @IBAction func selectReturnPolicy(sender: AnyObject) { + } + } \ No newline at end of file diff --git a/Vendoo/EbayWebServiceManager.swift b/Vendoo/EbayWebServiceManager.swift index 3138f27..748bd93 100644 --- a/Vendoo/EbayWebServiceManager.swift +++ b/Vendoo/EbayWebServiceManager.swift @@ -31,6 +31,7 @@ class EbayWebServiceManager: NSObject { private var xmlResponseDictionary: Dictionary = Dictionary() var delegate: EbayWebServiceManagerDelegate? var isAuthorized: Bool = NSUserDefaults.standardUserDefaults().boolForKey("ebayAuthorized") + static var settingsDictionary = Dictionary() //let tradingClient = EBayTradingServiceClient.sharedClient() //---------------------------------------------// //let tradingClient = SOAPEngine() @@ -51,51 +52,46 @@ class EbayWebServiceManager: NSObject { 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)! + } + else{ - /* - tradingClient.userAgent = "SOAPEngine" - tradingClient.actionNamespaceSlash = true - tradingClient.version = SOAPVersion.VERSION_1_1 - tradingClient.responseHeader = true - tradingClient.header = "967"+"" + self.devKey + "" + "" + self.certID + "" + "GetSessionID" - - tradingClient.setIntegerValue(967, forKey: "X-EBAY-API-COMPATIBILITY-LEVEL") - //tradingClient.setValue(self.devKey, forKey: "X-EBAY-API-DEV-NAME") - //tradingClient.setValue(tradingClient.apiKey, forKey: "X-EBAY-API-APP-NAME") - tradingClient.setIntegerValue(0, forKey: "X-EBAY-API-SITEID") - //tradingClient.setValue(self.certID, forKey: "X-EBAY-API-CERT-NAME") - //tradingClient.setValue("GeteBayOfficialTime", forKey: "X-EBAY-API-CALL-NAME") - tradingClient.envelope = "xmlns=\"urn:ebay:apis:eBLBaseComponents\"" - tradingClient.authorizationMethod = SOAPAuthorization.AUTH_TOKEN - tradingClient.requestURL(self.baseURL, soapAction: self.baseURL+"GetSessionID", completeWithDictionary: - {(statusCode : Int, - dict : [NSObject : AnyObject]!) -> Void in - print(statusCode) - let result:Dictionary = dict as Dictionary - NSLog("%@", result) - }, failWithError: - {(error : NSError!) -> Void in - NSLog("%@", error) - }) -*/ - - /*tradingClient.requestURL(baseURL, soapAction: baseURL+"/GetSessionID", completeWithDictionary: - {(statusCode : Int, - dict : [NSObject : AnyObject]!) -> Void in + 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":"00000" - let result:Dictionary = dict as Dictionary - NSLog("%@", result) - }, failWithError: - {(error : NSError!) -> Void in - NSLog("%@", error) - })*/ - - + ] as Dictionary) + + NSUserDefaults.standardUserDefaults().setObject(EbayWebServiceManager.settingsDictionary, forKey: "ebaySettings") + + NSUserDefaults.standardUserDefaults().setBool(true, forKey: "ebayDefaultsOverriden") + } } } + func reinit() { + + EbayWebServiceManager.settingsDictionary = (NSUserDefaults.standardUserDefaults().objectForKey("ebaySettings") as? Dictionary)! + } + } @@ -242,13 +238,30 @@ extension EbayWebServiceManager: NSXMLParserDelegate { //Test authentication let soapmessage = "" + - "" + + "" + "\(string)" + - "" + "" + + /* + * + + + boolean + ItemIDType (string) + string + + DetailLevelCodeType + + string + string + string + WarningLevelCodeType + + */ let url = NSURL(string: self.baseURL) let theRequest = NSMutableURLRequest(URL: url!) - theRequest.addValue("GeteBayOfficialTime", forHTTPHeaderField: "X-EBAY-API-CALL-NAME") + theRequest.addValue("GetUser", forHTTPHeaderField: "X-EBAY-API-CALL-NAME") self.requestMaker(soapmessage, theRequest: theRequest) @@ -265,6 +278,11 @@ extension EbayWebServiceManager: NSXMLParserDelegate { case "HardExpirationTime" : print(string) break + case "UserID" : + print(string) + EbayWebServiceManager.settingsDictionary["userID"] = string + NSUserDefaults.standardUserDefaults().setObject(EbayWebServiceManager.settingsDictionary, forKey: "ebaySettings") + break default: //print(string) print("\(self.currentElementName):\(string)") diff --git a/Vendoo/FacebookGraphAPIManager.swift b/Vendoo/FacebookGraphAPIManager.swift index c196110..90c538d 100644 --- a/Vendoo/FacebookGraphAPIManager.swift +++ b/Vendoo/FacebookGraphAPIManager.swift @@ -173,34 +173,36 @@ extension FacebookGraphAPIManager { } //used to post to users timeline, path must start with '/' - func makePOSTResquest(requestPath: String!, params: [NSObject: AnyObject]!){ + func makePOSTResquest(requestPath: String!, var params: [NSObject: AnyObject]!, onComplete: ServiceResponse){ - /*if(FBSDKAccessToken.currentAccessToken() != nil && FBSDKAccessToken.currentAccessToken().hasGranted("pubish_actions")){*/ - - let graphRequest: FBSDKGraphRequest = FBSDKGraphRequest(graphPath: requestPath, parameters: params, HTTPMethod: "POST") - graphRequest.startWithCompletionHandler({ - (id, result, error) -> Void in + if(FBSDKAccessToken.currentAccessToken() != nil && FBSDKAccessToken.currentAccessToken().hasGranted("publish_actions")){ + params["access_token"] = self.apiKey + "|" + self.apiSecret - - if(error == nil){ + let graphRequest: FBSDKGraphRequest = FBSDKGraphRequest(graphPath: requestPath + "?access_token=" + FBSDKAccessToken.currentAccessToken().tokenString, parameters: params, HTTPMethod: "POST") + graphRequest.startWithCompletionHandler({ + (id, result, error) -> Void in - print(result["id"]) - self.delegate?.listingUploadedFB((result["id"] as? String)!) - print(result) - } - else{ - - } - //save id in firebase so retrieval can be done later - }) - //} + if(error == nil){ + + print(result["id"]) + //self.delegate?.listingUploadedFB((result["id"] as? String)!) + print(result) + onComplete((result["id"] as? String)!, nil) + + } + else{ + print(error) + } + //save id in firebase so retrieval can be done later + }) + } /*else{ print("must reauthenticate facebook") - }*/ - - } + } + + */} //used to delete permissions and listings from users timeline, path must start with '/' func makeDELETIONResquest(requestPath: String!, params: [NSObject: AnyObject]!) -> Bool{ diff --git a/Vendoo/ListingPreviewViewController.swift b/Vendoo/ListingPreviewViewController.swift index aa738b0..bb908a1 100644 --- a/Vendoo/ListingPreviewViewController.swift +++ b/Vendoo/ListingPreviewViewController.swift @@ -47,7 +47,7 @@ class ListingPreviewViewController: UIViewController { self.networks.delegate = self self.networks.dataSource = self self.networks.backgroundView?.backgroundColor = UIColor.whiteColor() - self.graphManager.delegate = self + //self.graphManager.delegate = self } override func viewDidAppear(animated: Bool) { @@ -110,20 +110,20 @@ extension Dictionary { } } } - -//MARK: - FacebookGraphAPIManagerDelegate methods -extension ListingPreviewViewController: FacebookGraphAPIManagerDelegate { - func listingUploadedFB(fbID: String) { - - self.firManager.ref.child("Users").child("\(self.firManager.user_email)").child("user_Listings").child(self.lastListingKey).updateChildValues(["network_listing_IDs":["fbID":fbID]]) - - self.alert.title = "Listing Published" - self.alert.message = "Your listing has been published to facebook" - - self.presentViewController(self.alert, animated: true, completion: nil) - } -} - +/* + //MARK: - FacebookGraphAPIManagerDelegate methods + extension ListingPreviewViewController: FacebookGraphAPIManagerDelegate { + func listingUploadedFB(fbID: String) { + + self.firManager.ref.child("Users").child("\(self.firManager.user_email)").child("user_Listings").child(self.lastListingKey).updateChildValues(["network_listing_IDs":["fbID":fbID]]) + + self.alert.title = "Listing Published" + self.alert.message = "Your listing has been published to facebook" + + self.presentViewController(self.alert, animated: true, completion: nil) + } + } + */ //MARK: - IBActions extension ListingPreviewViewController { @@ -300,15 +300,49 @@ extension ListingPreviewViewController { //post to facebook if(self.networksDictionary["facebook"]!){ dispatch_group_enter(postingGroup) - let parameters: Dictionary = ["message":("**"+self.itemTitle.text!+"**\n\n"+"Price: "+self.itemPrice.text! + "\n\n"+self.itemDescription.text!)] + + let tmpDirURL = NSURL.fileURLWithPath(NSTemporaryDirectory(), isDirectory: true) + let fileURL = tmpDirURL.URLByAppendingPathComponent("main").URLByAppendingPathExtension("jpg") + print("FilePath: \(fileURL.path!)") + do { + try UIImageJPEGRepresentation(self.itemPicture.image!, 0.45)!.writeToFile(fileURL.path!, options: NSDataWritingOptions.AtomicWrite) + }catch{ + (error) + print(error) + } + + //let parameters: Dictionary = ["message":("**"+self.itemTitle.text!+"**\n\n"+"Price: "+self.itemPrice.text! + "\n\n"+self.itemDescription.text!)] + + let parameters: Dictionary = ["Source": UIImageJPEGRepresentation(self.itemPicture.image!, 0.45)!, "published":false] self.lastListingKey = newListingRef.key - self.graphManager.makePOSTResquest("me/feed", params: parameters) + self.graphManager.makePOSTResquest("me/photos", params: parameters, onComplete: { + (imageId, error) -> Void in + + var listingParams: Dictionary = ["message":("**"+self.itemTitle.text!+"**\n\n"+"Price: "+self.itemPrice.text! + "\n\n"+self.itemDescription.text!), "attached_media[0]":"{\"media_fbid\":\"\(imageId as! String)\"}"] + self.graphManager.makePOSTResquest("me/feed", params: listingParams, onComplete: { + (listingId, error) -> Void in + + if((self.newInProgressListing["networkIDs"] == nil)){ + self.newInProgressListing["networkIDs"] = Dictionary() + } + var networkIDs = (self.newInProgressListing["networkIDs"] as! Dictionary) + networkIDs["facebook"] = listingId as! String + self.newInProgressListing["networkIDs"] = networkIDs + dispatch_group_leave(postingGroup) + + + }) + /* + + */ + }) //let parameters: Dictionary = ["":""] - dispatch_group_leave(postingGroup) + } + dispatch_group_notify(postingGroup, dispatch_get_main_queue(), { self.newInProgressListing.update(["listingID": newListingRef.key, "seller email": (NSUserDefaults.standardUserDefaults().objectForKey("email") as? String)!, diff --git a/Vendoo/NetworksTableViewController.swift b/Vendoo/NetworksTableViewController.swift index 8fb8d56..9139c15 100644 --- a/Vendoo/NetworksTableViewController.swift +++ b/Vendoo/NetworksTableViewController.swift @@ -112,6 +112,9 @@ extension NetworksTableViewController { (segue.destinationViewController as! ListingPreviewViewController).setManagers(self.graphManager, fireManager: self.firManager, ebayManager: self.ebayManager, etsyManager: self.etsyManager) } + if(segue.identifier == "EbaySettingsSegue") { + (segue.destinationViewController as! EbaySettingsViewController).loadManager(self.ebayManager) + } if(segue.identifier == "EtsySettingsSegue") { (segue.destinationViewController as! EtsySettingsViewController).loadManager(self.etsyManager) } @@ -368,7 +371,7 @@ extension NetworksTableViewController: UITableViewDelegate { //code to deselect network self.networksDictionary["ebay"] = false - + } else{ @@ -394,7 +397,7 @@ extension NetworksTableViewController: UITableViewDelegate { }) //code to deselect network self.networksDictionary["amazon"] = false - + } else{ @@ -404,7 +407,7 @@ extension NetworksTableViewController: UITableViewDelegate { }) //code to select network self.networksDictionary["amazon"] = true - + } break @@ -443,7 +446,7 @@ extension NetworksTableViewController: UITableViewDelegate { (tabBar as? HomeViewController)?.etsyManager.authorizeApp(self) */ - + } break @@ -487,11 +490,11 @@ extension NetworksTableViewController: UITableViewDelegate { break } - + } else{ - + /* //case where class is being used to authorize a network for the app to post on switch (indexPath.row){ case 0: @@ -566,7 +569,7 @@ extension NetworksTableViewController: UITableViewDelegate { //code to deauthorize network let tabBar = self.tabBarController - + ((tabBar as? HomeViewController)?.etsyManager.deAuthorizeApp(self))! cell.networkToggle.on = ((tabBar as? HomeViewController)?.etsyManager.isAuthorized)! } @@ -579,7 +582,7 @@ extension NetworksTableViewController: UITableViewDelegate { //this is the type of code desired to access the rest management classes - + let tabBar = self.tabBarController ((tabBar as? HomeViewController)?.etsyManager.authorizeApp(self))! @@ -631,8 +634,8 @@ extension NetworksTableViewController: UITableViewDelegate { break - } - + }*/ + } @@ -677,21 +680,23 @@ extension NetworksTableViewController: UITableViewDelegate { } extension NetworksTableViewController: EbayWebServiceManagerDelegate { + func signInUser(signInString : String!) { let myWebView:UIWebView = UIWebView(frame: CGRectMake(0, 0, UIScreen.mainScreen().bounds.width, UIScreen.mainScreen().bounds.height)) myWebView.delegate = self myWebView.loadRequest(NSURLRequest(URL: NSURL(string: signInString)!)) self.view.addSubview(myWebView) } + } extension NetworksTableViewController: UIWebViewDelegate { - + func webView(webView: UIWebView, didFailLoadWithError error: NSError?) { print("Webview fail with error \(error)"); } func webView(webView: UIWebView, shouldStartLoadWithRequest request: NSURLRequest, navigationType: UIWebViewNavigationType) -> Bool { - return true; + return true; } func webViewDidStartLoad(webView: UIWebView) { print("Webview started Loading") @@ -709,22 +714,22 @@ extension NetworksTableViewController: UIWebViewDelegate { } /*var data : NSData? = NSData(contentsOfURL: NSURL(string: responseString as! String)!)! - if (data != nil){ - let jsonObject: AnyObject? - do { - try jsonObject = NSJSONSerialization.JSONObjectWithData(data!, options: .MutableLeaves) - print(jsonObject) - - } - catch { - - } - }*/ + if (data != nil){ + let jsonObject: AnyObject? + do { + try jsonObject = NSJSONSerialization.JSONObjectWithData(data!, options: .MutableLeaves) + print(jsonObject) + + } + catch { + + } + }*/ } - + } - + } extension NetworksTableViewController { @@ -755,12 +760,20 @@ extension NetworksTableViewController { }) break case is FBTableViewCell.Type: + let tabBar = self.tabBarController + ((tabBar as? HomeViewController)?.fbGraphManager.authorizeApp(self))! + dispatch_async(dispatch_get_main_queue(), { + sender.setTitle("Logout", forState: UIControlState.Normal) + (sender.superview?.superview as! FBTableViewCell).settingsBtn.enabled = true + (sender.superview?.superview as! FBTableViewCell).settingsBtn.hidden = false + }) + break default: break } } - //DeAuthorize app + //DeAuthorize app else { switch (sender.superview?.superview?.classForCoder){ case is EbayTableViewCell.Type: @@ -785,6 +798,13 @@ extension NetworksTableViewController { }) break case is FBTableViewCell.Type: + let tabBar = self.tabBarController + ((tabBar as? HomeViewController)?.fbGraphManager.deAuthorizeApp(self))! + dispatch_async(dispatch_get_main_queue(), { + sender.setTitle("Login", forState: UIControlState.Normal) + (sender.superview?.superview as! FBTableViewCell).settingsBtn.enabled = false + (sender.superview?.superview as! FBTableViewCell).settingsBtn.hidden = true + }) break default: break