diff --git a/Vendoo.xcworkspace/xcuserdata/okechi.xcuserdatad/UserInterfaceState.xcuserstate b/Vendoo.xcworkspace/xcuserdata/okechi.xcuserdatad/UserInterfaceState.xcuserstate index 938394e..22d8d1d 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/xcdebugger/Breakpoints_v2.xcbkptlist b/Vendoo.xcworkspace/xcuserdata/okechi.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist index c1c6ba6..895a2d8 100644 --- a/Vendoo.xcworkspace/xcuserdata/okechi.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist +++ b/Vendoo.xcworkspace/xcuserdata/okechi.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist @@ -58,12 +58,633 @@ ignoreCount = "0" continueAfterRunningActions = "No" filePath = "Vendoo/HomeViewController.swift" - timestampString = "494847768.56364" + timestampString = "494906385.49118" startingColumnNumber = "9223372036854775807" endingColumnNumber = "9223372036854775807" - startingLineNumber = "182" - endingLineNumber = "182" - landmarkName = "listingHasEnded(_:ebayInfo:amazonInfo:etsyInfo:)" + startingLineNumber = "183" + endingLineNumber = "183"> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Vendoo/CategoriesTableViewController.swift b/Vendoo/CategoriesTableViewController.swift index 14f1738..cf4c1d3 100644 --- a/Vendoo/CategoriesTableViewController.swift +++ b/Vendoo/CategoriesTableViewController.swift @@ -129,6 +129,7 @@ class CategoriesTableViewController: UIViewController, UITableViewDelegate, UITa dispatch_async(dispatch_get_main_queue(), { + cell.categoryName.text = self.categories[indexPath.row] cell.networks.cellForItemAtIndexPath(NSIndexPath(forRow: 3, inSection: 0))?.hidden = true //facebook cell.networks.cellForItemAtIndexPath(NSIndexPath(forRow: 2, inSection: 0))?.hidden = true //etsy @@ -693,9 +694,18 @@ class CategoriesTableViewController: UIViewController, UITableViewDelegate, UITa } let cell: CategoryCell! = tableView.cellForRowAtIndexPath(indexPath) as! CategoryCell//tableView.dequeueReusableCellWithIdentifier("CategoryCell", forIndexPath: indexPath) as? CategoryCell - if(self.ebayManager.isAuthorized && cell.shouldAskAboutLeafCategories){ - self.potentialEbay = true - self.navigateCategories() + + if(self.ebayManager.isAuthorized ) { + var dict: Dictionary> = (EbayWebServiceManager.settingsDictionary["categories"]!) as! Dictionary> + + let catDict = dict[self.selectedCategory] + if (catDict != nil && !(catDict!["isLeaf"] as! Bool)){ + self.potentialEbay = true + self.navigateCategories() + } + else{ + self.performSegueWithIdentifier("NetworkSelectionSegue", sender: self) + } } else { self.performSegueWithIdentifier("NetworkSelectionSegue", sender: self) diff --git a/Vendoo/EbayWebServiceManager.swift b/Vendoo/EbayWebServiceManager.swift index 8c86b5c..31e9faa 100644 --- a/Vendoo/EbayWebServiceManager.swift +++ b/Vendoo/EbayWebServiceManager.swift @@ -214,8 +214,10 @@ extension EbayWebServiceManager { self.requestMaker(soapMessage, theRequest: theRequest) } - func addImagesToListing(listingID: String, imageURL: String, onCompletion: ServiceResponse) { + func addImagesToListing(listingID: String, imageURLs: [String], listingOnCompletion: ServiceResponse, body: [String:String],onCompletion: ServiceResponse) { + listItem(body, imageUrls: imageURLs, completion: listingOnCompletion) + /* var soapMessage = "" + "" + "" + @@ -224,21 +226,26 @@ extension EbayWebServiceManager { soapMessage = soapMessage + "en_US" + "" + - "\(listingID)" + - "" + - "\(imageURL.stringByReplacingOccurrencesOfString("&", withString: "&"))" + - "" + - "" + "\(listingID)" + + for i in 0...(imageURLs.count - 1) { + soapMessage = soapMessage + "" + + "\(imageURLs[i].stringByReplacingOccurrencesOfString("&", withString: "&"))" + + "" + } + + + soapMessage = soapMessage + "" let url = NSURL(string: self.baseURL) let theRequest = NSMutableURLRequest(URL: url!) theRequest.addValue("ReviseItem", forHTTPHeaderField: "X-EBAY-API-CALL-NAME") self.completion = onCompletion self.requestMaker(soapMessage, theRequest: theRequest) - + */ } - func listItem(params: [String: String], completion: ServiceResponse?){ + func listItem(params: [String: String], imageUrls: [String], completion: ServiceResponse?){ var dict = EbayWebServiceManager.settingsDictionary var emailRetrievalGroup = dispatch_group_create() var soapMessage = "" + @@ -275,8 +282,15 @@ extension EbayWebServiceManager { "\(dict["listingDuration"] as! String!)" + "\(dict["listingType"] as! String!)" + "\(dict["payment"] as! String!)" + - "\(dict["paypal_email"] as! String!)" + - "\(dict["postalCode"] as! String!)" + + "\(dict["paypal_email"] as! String!)" + + for i in 0...(0/*imageUrls.count - 1*/) { //will replace with actual count once everything is working with images + soapMessage = soapMessage + + "\(imageUrls[i].stringByReplacingOccurrencesOfString("&", withString: "&"))" + + } + + soapMessage = soapMessage + "\(dict["postalCode"] as! String!)" + "\(params["quantity"] as String!)" + "" + "\(dict["return"] as! String!)" + @@ -292,7 +306,7 @@ extension EbayWebServiceManager { "" + "US" + "" - + print(soapMessage) let url = NSURL(string: self.baseURL) let theRequest = NSMutableURLRequest(URL: url!) theRequest.addValue("AddItem", forHTTPHeaderField: "X-EBAY-API-CALL-NAME") @@ -520,11 +534,17 @@ extension EbayWebServiceManager: NSXMLParserDelegate { 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] - } + var dict: Dictionary> = (EbayWebServiceManager.settingsDictionary["categories"]!) as! Dictionary> + + 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] } diff --git a/Vendoo/FacebookGraphAPIManager.swift b/Vendoo/FacebookGraphAPIManager.swift index 1355b78..d86b931 100644 --- a/Vendoo/FacebookGraphAPIManager.swift +++ b/Vendoo/FacebookGraphAPIManager.swift @@ -90,6 +90,7 @@ extension FacebookGraphAPIManager { print(result.token) print(result.grantedPermissions) NSUserDefaults.standardUserDefaults().setBool(true, forKey:"fbAuthorized") + self.isAuthorized = true FBSDKAccessToken.setCurrentAccessToken(result.token) @@ -103,6 +104,10 @@ extension FacebookGraphAPIManager { (result, error) -> Void in NSLog("Logged in with publish permisions") + NSUserDefaults.standardUserDefaults().setBool(true, forKey:"fbAuthorized") + self.isAuthorized = true + + }) }) diff --git a/Vendoo/HomeViewController.swift b/Vendoo/HomeViewController.swift index 5242ca6..df1063e 100644 --- a/Vendoo/HomeViewController.swift +++ b/Vendoo/HomeViewController.swift @@ -65,13 +65,13 @@ class HomeViewController: UITabBarController { var listingImages: [UIImage] = [mainImage!] var count = 0 //Get supporting images - for i in 2...5 { + for i in 1...4 { let supportListingImg1 = storageRef.child("images/\(key)/\(i).jpg") supportListingImg1.dataWithMaxSize(10 * 1024 * 1024, completion: { (data1, error) -> Void in if(error != nil){ - print("support image \(i - 1) for key, \(key), does not exist") + print("support image \(i) for key, \(key), does not exist") }else{ listingImages.append(UIImage(data: data1!)!) } @@ -94,6 +94,7 @@ class HomeViewController: UITabBarController { self.userListings.append( Listing(itemTitle: (listingInfo!["listingTitle"] as? String)!, itemCategory: listingInfo!["listingCategory"] as? String, + itemQuantity: (listingInfo!["listingQuantity"] as? String)!, itemPrice: listingInfo!["listingPrice"] as? String, itemDescription: listingInfo!["listingDescription"] as? String, itemImages: listingImages, diff --git a/Vendoo/ItemImagePickerViewController.swift b/Vendoo/ItemImagePickerViewController.swift index 55fd698..c810b21 100644 --- a/Vendoo/ItemImagePickerViewController.swift +++ b/Vendoo/ItemImagePickerViewController.swift @@ -430,7 +430,6 @@ extension ItemImagePickerViewController { //save listing to private user path in firebase let newListingRef = (self.tabBarController as? HomeViewController)?.firebaseManager.ref.child("Users").child("\(((self.tabBarController as? HomeViewController)?.firebaseManager.user_email)!)").child("user_Listings").childByAutoId() - let category = (self.pickerData[self.categoryPicker.selectedRowInComponent(0)]) var counter = -1 for bool in self.itemImagesSelections { if bool { @@ -443,8 +442,8 @@ extension ItemImagePickerViewController { "seller email": (NSUserDefaults.standardUserDefaults().objectForKey("email") as? String)!, "listingTitle": self.itemName.text, "listingPrice": self.itemPrice.text, - "listingCategory": category, "listingDescription": self.itemDescription.text, + "listingQuantity": self.itemQuantity.text!, "numberOfSupportingImages" : counter, "isListingDraft": true, "networks": ["areNetworksChosen": false]] diff --git a/Vendoo/ItemTableViewController.swift b/Vendoo/ItemTableViewController.swift index 1689642..2da8be4 100644 --- a/Vendoo/ItemTableViewController.swift +++ b/Vendoo/ItemTableViewController.swift @@ -21,6 +21,7 @@ class ItemTableViewController: UIViewController { @IBOutlet weak var menuButton: UIBarButtonItem! var loadingView: UIView! + var selectedListing: Listing! override func viewDidLoad() { super.viewDidLoad() @@ -87,6 +88,35 @@ extension ItemTableViewController { override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { // Get the new view controller using segue.destinationViewController. // Pass the selected object to the new view controller. + + let des = segue.destinationViewController as! ListingPreviewViewController + var tempImages: [UIImageView] = [] + for uiImage in self.selectedListing.images { + tempImages.append(UIImageView(image: uiImage)) + } + let dict:[String:AnyObject] = [ + "pictures": tempImages, + "title": self.selectedListing.title != nil ? self.selectedListing.title : "", + "description": self.selectedListing.desc != nil ? self.selectedListing.desc: "", + "price": self.selectedListing.price != nil ? self.selectedListing.price : "", + "category": self.selectedListing.category != nil ? self.selectedListing.category : "", + "quantity": self.selectedListing.quantity != nil ? self.selectedListing.quantity: nil + ] + + des.setDictionary(self.selectedListing.networks, itemdictionary: dict) + des.setManagers( + ((self.tabBarController as? HomeViewController)?.fbGraphManager)!, + fireManager: ((self.tabBarController as? HomeViewController)?.firebaseManager)!, + ebayManager: ((self.tabBarController as? HomeViewController)?.ebayGraphManager)!, + etsyManager: ((self.tabBarController as? HomeViewController)?.etsyManager)! + ) + + if self.selectedListing.isDraft! { + des.setViewState("Editible") + }else { + des.setViewState("NonEditable") + } + } } @@ -153,6 +183,11 @@ extension ItemTableViewController: UITableViewDataSource{ } return cell } + + func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { + self.selectedListing = (self.tabBarController as? HomeViewController)?.userListings[indexPath.row] + self.performSegueWithIdentifier("ItemDetailSegue", sender: self) + } } diff --git a/Vendoo/Listing.swift b/Vendoo/Listing.swift index c9657f9..76ec5cc 100644 --- a/Vendoo/Listing.swift +++ b/Vendoo/Listing.swift @@ -15,18 +15,20 @@ class Listing : NSObject { var category: String! var price: String! var desc: String! + var quantity: String! var isDraft: Bool! var images: [UIImage]! var key: String! var networks: Dictionary! var listingStatus: String! - init(itemTitle:String, itemCategory: String!, itemPrice: String!, itemDescription: String!, itemImages: [UIImage], isDraftListing: Bool, itemKey: String, networksSellingOn: Dictionary){ + init(itemTitle:String, itemCategory: String!, itemQuantity: String!, itemPrice: String!, itemDescription: String!, itemImages: [UIImage], isDraftListing: Bool, itemKey: String, networksSellingOn: Dictionary){ self.title = itemTitle self.category = itemCategory self.price = itemPrice self.desc = itemDescription + self.quantity = itemQuantity self.isDraft = isDraftListing self.images = itemImages self.key = itemKey diff --git a/Vendoo/ListingPreviewViewController.swift b/Vendoo/ListingPreviewViewController.swift index 3d26171..7cff821 100644 --- a/Vendoo/ListingPreviewViewController.swift +++ b/Vendoo/ListingPreviewViewController.swift @@ -14,6 +14,7 @@ */ import UIKit +import FirebaseStorage import SWRevealViewController //@TODO: Need to make multiple images work for etsy and facebook and need to implement multiple images saving to firebase @@ -22,12 +23,19 @@ class ListingPreviewViewController: UIViewController { //IBOutlets @IBOutlet weak var containerScrollView: UIScrollView! @IBOutlet weak var itemQuantity: UITextView! - @IBOutlet weak var itemPicture: UIImageView! + @IBOutlet weak var itemPictureMain: UIImageView! + @IBOutlet weak var itemPictureSup1: UIImageView! + @IBOutlet weak var itemPictureSup2: UIImageView! + @IBOutlet weak var itemPictureSup3: UIImageView! + @IBOutlet weak var itemPictureSup4: UIImageView! @IBOutlet weak var itemTitle: UITextView! @IBOutlet weak var itemDescription: UITextView! @IBOutlet weak var itemPrice: UITextView! @IBOutlet weak var itemCategory: UITextView! @IBOutlet weak var networks: UICollectionView! + @IBOutlet weak var publishBtn: UIButton! + @IBOutlet weak var edit_button: UIButton! + @IBOutlet weak var cancel_backBtn: UIButton! //class variables private var networksDictionary: Dictionary = Dictionary() @@ -40,10 +48,29 @@ class ListingPreviewViewController: UIViewController { private var lastListingKey: String! private var newInProgressListing: Dictionary = Dictionary() var loadingView: UIView! + private var itemViewState = "" override func viewDidLoad() { super.viewDidLoad() + if (self.itemViewState == "NonEditable") { + dispatch_async(dispatch_get_main_queue(), { + //self.cancel_backBtn.titleLabel?.text = "Back" + self.edit_button.hidden = true + self.edit_button.enabled = false + + self.publishBtn.hidden = true + self.publishBtn.enabled = false + }) + } + + /*if(!self.networksDictionary["areNetworksChosen"]!) { + self.networks.hidden = true + }*/ + /*else if (self.itemViewState == "Editable") { + //self.cancel_backBtn.titleLabel?.text = "Back" + + }*/ // Do any additional setup after loading the view. // Initialization code @@ -65,7 +92,27 @@ class ListingPreviewViewController: UIViewController { func setListing(){ - self.itemPicture.image = (self.itemListingDictionary["pictures"] as? [UIImageView])![0].image + for i in 0...((self.itemListingDictionary["pictures"] as! [UIImageView]).count - 1) { + switch i { + case 0: + self.itemPictureMain.image = (self.itemListingDictionary["pictures"] as? [UIImageView])![i].image + break + case 1: + self.itemPictureSup1.image = (self.itemListingDictionary["pictures"] as? [UIImageView])![i].image + break + case 2: + self.itemPictureSup2.image = (self.itemListingDictionary["pictures"] as? [UIImageView])![i].image + break + case 3: + self.itemPictureSup3.image = (self.itemListingDictionary["pictures"] as? [UIImageView])![i].image + break + case 4: + self.itemPictureSup4.image = (self.itemListingDictionary["pictures"] as? [UIImageView])![i].image + break + default: + break + } + } self.itemTitle.text = self.itemListingDictionary["title"] as! String self.itemDescription.text = self.itemListingDictionary["description"] as! String self.itemPrice.text = self.itemListingDictionary["price"] as! String @@ -73,6 +120,10 @@ class ListingPreviewViewController: UIViewController { self.itemQuantity.text = self.itemListingDictionary["quantity"] as! String } + func setViewState(state: String) { + self.itemViewState = state + } + func setDictionary(netdictionary:Dictionary, itemdictionary: Dictionary){ self.networksDictionary = netdictionary self.itemListingDictionary = itemdictionary @@ -85,7 +136,14 @@ class ListingPreviewViewController: UIViewController { self.etsyManager = etsyManager } - + func saveToFirebase(listingImageRef: FIRStorageReference, completion: ServiceResponse! ) { + + listingImageRef.putData(UIImageJPEGRepresentation(self.itemPictureMain.image!, 0.8)!, metadata: nil,completion: { + (metadata, error) -> Void in + completion(metadata, error) + }) + + } // MARK: - Navigation @@ -142,9 +200,15 @@ extension Dictionary { //MARK: - IBActions extension ListingPreviewViewController { @IBAction func cancel(sender: AnyObject) { - let storyboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil) - let vc = storyboard.instantiateViewControllerWithIdentifier("Reveal View Controller") as! SWRevealViewController - self.presentViewController(vc, animated: true, completion: nil) + if self.itemViewState == "" { + let storyboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil) + let vc = storyboard.instantiateViewControllerWithIdentifier("Reveal View Controller") as! SWRevealViewController + self.presentViewController(vc, animated: true, completion: nil) + } + else if self.itemViewState == "Editable" || self.itemViewState == "NonEditable"{ + self.presentingViewController?.dismissViewControllerAnimated(true, completion: nil) + } + } @IBAction func publishItem(sender: AnyObject) { @@ -158,7 +222,7 @@ extension ListingPreviewViewController { self.view.addSubview(loadingView) self.firManager.indicator.startAnimating() - if(self.itemPicture.image == nil){ + if(self.itemPictureMain.image == nil){ let alert = UIAlertController(title: "Image Needed", message: "To proceed to choose networks, you must supply at least one picture for your listing", preferredStyle: .Alert) alert.addAction(UIAlertAction(title: "OK", style: .Default, handler:{(action: UIAlertAction!) in alert.dismissViewControllerAnimated(true, completion: nil)})) @@ -169,10 +233,14 @@ extension ListingPreviewViewController { //save listing to private user path in firebase let newListingRef = self.firManager.ref.child("Users").child("\(self.firManager.user_email)").child("user_Listings").childByAutoId() let postingGroup: dispatch_group_t = dispatch_group_create() + + /*if(!(self.networksDictionary["ebay"]!)&&(!(self.networksDictionary["etsy"]!))&&(!(self.networksDictionary["amazon"]!))&&(!(self.networksDictionary["facebook"]!))) { - + }else { + dispatch_g + }*/ //post to ebay - if(self.networksDictionary["ebay"]!){ + /*if(self.networksDictionary["ebay"]!){ dispatch_group_enter(postingGroup) let body: [String: String] = [ "title": self.itemTitle.text, @@ -192,7 +260,7 @@ extension ListingPreviewViewController { self.newInProgressListing["networkIDs"] = networkIDs dispatch_group_leave(postingGroup) }) - } + }*/ //post to amazon @@ -329,7 +397,7 @@ extension ListingPreviewViewController { let imageBody = ["listing_id": networkIDs["etsy"] as! Int, //"type":"image/jpg", - "image": UIImageJPEGRepresentation(self.itemPicture.image!, 0.45)!] + "image": UIImageJPEGRepresentation(self.itemPictureMain.image!, 0.45)!] self.etsyManager.sendPOSTRequest(("listings/\(networkIDs["etsy"] as! Int)/images"), body: imageBody, onCompletion: { (dict, error) -> Void in @@ -346,26 +414,93 @@ extension ListingPreviewViewController { //post to facebook if(self.networksDictionary["facebook"]!){ dispatch_group_enter(postingGroup) - + let fb_group: dispatch_group_t = dispatch_group_create() + 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) + try UIImageJPEGRepresentation(self.itemPictureMain.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/photos", params: parameters, onComplete: { - (imageId, error) -> Void in + + var imageIDs: [String] = [] + + + //post multiple images to fb + for i in 0...(self.itemListingDictionary["pictures"] as! [UIImageView]).count - 1 { + var parameters: Dictionary = Dictionary() + switch (i) { + + case 0: + dispatch_group_enter(fb_group) + parameters["Source"] = UIImageJPEGRepresentation(self.itemPictureMain.image!,0.45)! + parameters["published"] = false + self.graphManager.makePOSTResquest("me/photos", params: parameters, onComplete: { + (imageId, error) -> Void in + imageIDs.append(imageId as! String) + dispatch_group_leave(fb_group) + }) + break + case 1: + dispatch_group_enter(fb_group) + parameters["Source"] = UIImageJPEGRepresentation(self.itemPictureSup1.image!,0.45)! + parameters["published"] = false + self.graphManager.makePOSTResquest("me/photos", params: parameters, onComplete: { + (imageId, error) -> Void in + imageIDs.append(imageId as! String) + dispatch_group_leave(fb_group) + }) + break + case 2: + dispatch_group_enter(fb_group) + parameters["Source"] = UIImageJPEGRepresentation(self.itemPictureSup2.image!,0.45)! + parameters["published"] = false + self.graphManager.makePOSTResquest("me/photos", params: parameters, onComplete: { + (imageId, error) -> Void in + imageIDs.append(imageId as! String) + dispatch_group_leave(fb_group) + }) + break + case 3: + dispatch_group_enter(fb_group) + parameters["Source"] = UIImageJPEGRepresentation(self.itemPictureSup3.image!,0.45)! + parameters["published"] = false + self.graphManager.makePOSTResquest("me/photos", params: parameters, onComplete: { + (imageId, error) -> Void in + imageIDs.append(imageId as! String) + dispatch_group_leave(fb_group) + }) + break + case 4: + dispatch_group_enter(fb_group) + parameters["Source"] = UIImageJPEGRepresentation(self.itemPictureSup4.image!,0.45)! + parameters["published"] = false + self.graphManager.makePOSTResquest("me/photos", params: parameters, onComplete: { + (imageId, error) -> Void in + imageIDs.append(imageId as! String) + dispatch_group_leave(fb_group) + }) + break + default: + break + } + } + + + //notifies that all images are ready to be attached to new listing on facebook + dispatch_group_notify(fb_group, dispatch_get_main_queue(), { + + var listingParams: Dictionary = ["message":("**"+self.itemTitle.text!+"**\n\n"+"Price: "+self.itemPrice.text! + "\n\n"+self.itemDescription.text!)] + + for i in 0...(self.itemListingDictionary["pictures"] as! [UIImageView]).count - 1 { + listingParams["attached_media[\(i)]"] = "{\"media_fbid\":\"\(imageIDs[i])\"}" + } + - 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 @@ -376,25 +511,24 @@ extension ListingPreviewViewController { networkIDs["facebook"] = listingId as! String self.newInProgressListing["networkIDs"] = networkIDs dispatch_group_leave(postingGroup) - - + + }) - /* - - */ + }) - //let parameters: Dictionary = ["":""] - - } + + //notifies once all selected networks have been posted to dispatch_group_notify(postingGroup, dispatch_get_main_queue(), { + //self.networksDictionary["areNetworksChosen"] = true self.newInProgressListing.update(["listingID": newListingRef.key, "seller email": (NSUserDefaults.standardUserDefaults().objectForKey("email") as? String)!, "listingTitle": self.itemTitle.text, "listingPrice": self.itemPrice.text, "listingCategory": self.itemCategory.text, + "listingQuantity": self.itemQuantity.text, "listingDescription": self.itemDescription.text, "numberOfSupportingImages" : ((self.itemListingDictionary["pictures"] as? [UIImageView])?.count)! - 1, "isListingDraft": false, @@ -407,37 +541,102 @@ extension ListingPreviewViewController { let storageRef = self.firManager.storage.referenceForURL((databaseDict["image_storage"] as? String)!) + var imageURLs: [String] = [] + let completion: ServiceResponse = {(metadata, error) -> Void in + + //for ebay due to its unique posting flow, will use firbase image storage url to add pictures + if (self.networksDictionary["ebay"]!){ + imageURLs.append((metadata?.downloadURL()?.absoluteString)!) + dispatch_group_leave(postingGroup) + }else{ + dispatch_group_leave(postingGroup) + } + + + + + } + //change code to new multi-image saving - - - - let listingImageRef = storageRef.child("images/\(newListingRef.key)"+".jpg") - listingImageRef.putData(UIImageJPEGRepresentation(self.itemPicture.image!, 0.8)!, metadata: nil,completion: - {(metadata, error) -> Void in + for i in 0...(self.itemListingDictionary["pictures"] as! [UIImageView]).count - 1 { + switch (i) { - //for ebay due to its unique posting flow, will use firbase image storage url to add pictures + case 0: dispatch_group_enter(postingGroup) - if (self.networksDictionary["ebay"]!){ - var networkIDs = self.newInProgressListing["networkIDs"] as! Dictionary - - self.ebayManager.addImagesToListing(networkIDs["ebay"] as! String, imageURL: (metadata?.downloadURL()?.absoluteString)!, onCompletion: { - (_, _) -> Void in - dispatch_group_leave(postingGroup) - }) - }else{ + let listingImageRef = storageRef.child("images/\(newListingRef.key)/main"+".jpg") + self.saveToFirebase(listingImageRef, completion: completion) + break + case 1: + dispatch_group_enter(postingGroup) + let listingImageRef = storageRef.child("images/\(newListingRef.key)/1"+".jpg") + self.saveToFirebase(listingImageRef, completion: completion) + break + case 2: + dispatch_group_enter(postingGroup) + let listingImageRef = storageRef.child("images/\(newListingRef.key)/2"+".jpg") + self.saveToFirebase(listingImageRef, completion: completion) + break + case 3: + dispatch_group_enter(postingGroup) + let listingImageRef = storageRef.child("images/\(newListingRef.key)/3"+".jpg") + self.saveToFirebase(listingImageRef, completion: completion) + break + case 4: + dispatch_group_enter(postingGroup) + let listingImageRef = storageRef.child("images/\(newListingRef.key)/4"+".jpg") + self.saveToFirebase(listingImageRef, completion: completion) + break + default: + break + } + } + + //notify to upload multiple ebay photos + dispatch_group_notify(postingGroup, dispatch_get_main_queue(), { + dispatch_group_enter(postingGroup) + if (self.networksDictionary["ebay"]!){ + + let body: [String: String] = [ "title": self.itemTitle.text, + "quantity":self.itemQuantity.text, + "description":self.itemDescription.text, + "price":self.itemPrice.text, + "category_id":self.itemListingDictionary["ebaySubCategoryID"] as! String + ] + let listingCompletion: ServiceResponse = { + (listingID, error) -> Void in + if((self.newInProgressListing["networkIDs"] == nil)){ + self.newInProgressListing["networkIDs"] = Dictionary() + } + var networkIDs = (self.newInProgressListing["networkIDs"] as! Dictionary) + networkIDs["ebay"] = listingID as! String + self.newInProgressListing["networkIDs"] = networkIDs dispatch_group_leave(postingGroup) } - - dispatch_group_notify(postingGroup, dispatch_get_main_queue(), { - newListingRef.setValue(self.newInProgressListing) - // self.alert.title = "Listing saved with error" - // self.alert.message = "Your listing has been saved but something went wrong when trying to publish to facebook" - - - //let alert = UIAlertController(title: "Listing Published", message: "Your listing has been published", preferredStyle: .Alert) - - // self.alert.addAction(UIAlertAction(title: "OK", style: .Default, handler:{(action: UIAlertAction!) in self.alert.dismissViewControllerAnimated(true, completion: nil)})) + /*self.ebayManager.listItem(body, completion: { + (listingID, error) -> Void in + if((self.newInProgressListing["networkIDs"] == nil)){ + self.newInProgressListing["networkIDs"] = Dictionary() + } + var networkIDs = (self.newInProgressListing["networkIDs"] as! Dictionary) + networkIDs["ebay"] = listingID as! String + self.newInProgressListing["networkIDs"] = networkIDs + dispatch_group_leave(postingGroup) + })*/ + self.ebayManager.listItem(body, imageUrls: imageURLs, completion: listingCompletion) + //self.ebayManager.addImagesToListing(networkIDs["ebay"] as! String, imageURLs: imageURLs, listingOnCompletion: listingCompletion, body: body, onCompletion: { + //(_, _) -> Void in + //dispatch_group_leave(postingGroup) + //}) + + } + else { + dispatch_group_leave(postingGroup) + } + + //notify to save final listing to firebase + dispatch_group_notify(postingGroup, dispatch_get_main_queue(), { + newListingRef.setValue(self.newInProgressListing) //register new listing id in global path of firebase root' self.firManager.ref.child("Global_listings").child(newListingRef.key).setValue(newListingRef.key) @@ -454,29 +653,20 @@ extension ListingPreviewViewController { self.presentViewController(alert, animated: true, completion: nil) }) - + }) + }) - - - - }) - }) - } - + } } @IBAction func editListing(sender: AnyObject) { self.performSegueWithIdentifier("EditListingSegue", sender: self) } - - - } - extension ListingPreviewViewController: UICollectionViewDelegate { /* diff --git a/Vendoo/Main.storyboard b/Vendoo/Main.storyboard index de3c82e..69728fa 100755 --- a/Vendoo/Main.storyboard +++ b/Vendoo/Main.storyboard @@ -1006,7 +1006,7 @@ - + - - + @@ -1035,14 +1034,21 @@ + + - + + + + + + @@ -1357,6 +1363,7 @@ + @@ -1608,7 +1615,7 @@ - + @@ -1625,7 +1632,7 @@ - + @@ -1686,7 +1693,7 @@ - + @@ -1703,7 +1710,7 @@ - + @@ -2463,9 +2470,10 @@ - - + + + diff --git a/Vendoo/NetworksTableViewController.swift b/Vendoo/NetworksTableViewController.swift index 268deb5..4303e3d 100644 --- a/Vendoo/NetworksTableViewController.swift +++ b/Vendoo/NetworksTableViewController.swift @@ -209,7 +209,7 @@ extension NetworksTableViewController: UITableViewDataSource { cell = (self.tableView.dequeueReusableCellWithIdentifier("etsy", forIndexPath: indexPath) as! EtsyTableViewCell) break default: - //loads network cell for ebay + //loads network cell for facebook cell = (self.tableView.dequeueReusableCellWithIdentifier("facebook", forIndexPath: indexPath) as! FBTableViewCell) break