diff --git a/Vendoo.xcodeproj/project.pbxproj b/Vendoo.xcodeproj/project.pbxproj index 908bce8..9d3bd66 100644 --- a/Vendoo.xcodeproj/project.pbxproj +++ b/Vendoo.xcodeproj/project.pbxproj @@ -40,6 +40,7 @@ 3EC3252F1CF894E500626C48 /* AVFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3EC3252E1CF894E500626C48 /* AVFoundation.framework */; }; 3ECEDB871CF9C722003566B3 /* ListingPreviewViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3ECEDB861CF9C722003566B3 /* ListingPreviewViewController.swift */; }; 3EDE75AE1D67B92F00BC3472 /* CategoryPopUpController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3EDE75AD1D67B92F00BC3472 /* CategoryPopUpController.swift */; }; + 3EF422B21D73262000B9A3EB /* UserCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3EF422B11D73262000B9A3EB /* UserCell.swift */; }; 3EFB0E331D0B968300A05D7A /* SideMenuView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3EFB0E321D0B968300A05D7A /* SideMenuView.swift */; }; 3F8E0464700649BDD8B552B1 /* Pods_Vendoo_VendooTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B876489113F498AF1D2FD7E9 /* Pods_Vendoo_VendooTests.framework */; }; A87525ED0EE7D42D9A7708D8 /* Pods_Vendoo.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 23ECC3C8465826BD6AC74A02 /* Pods_Vendoo.framework */; }; @@ -105,6 +106,7 @@ 3EC3252E1CF894E500626C48 /* AVFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AVFoundation.framework; path = System/Library/Frameworks/AVFoundation.framework; sourceTree = SDKROOT; }; 3ECEDB861CF9C722003566B3 /* ListingPreviewViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ListingPreviewViewController.swift; sourceTree = ""; }; 3EDE75AD1D67B92F00BC3472 /* CategoryPopUpController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CategoryPopUpController.swift; sourceTree = ""; }; + 3EF422B11D73262000B9A3EB /* UserCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UserCell.swift; sourceTree = ""; }; 3EFB0E321D0B968300A05D7A /* SideMenuView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SideMenuView.swift; sourceTree = ""; }; 7D1FC6F6278B48A7BA9A9E03 /* Pods_Vendoo_VendooUITests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Vendoo_VendooUITests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; A44ED233D6B5454EF92FEB08 /* Pods-Vendoo-VendooUITests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Vendoo-VendooUITests.debug.xcconfig"; path = "Pods/Target Support Files/Pods-Vendoo-VendooUITests/Pods-Vendoo-VendooUITests.debug.xcconfig"; sourceTree = ""; }; @@ -328,6 +330,7 @@ 3E1AA4331D0DD0B2005FCCBB /* Settings */, 3EFB0E321D0B968300A05D7A /* SideMenuView.swift */, 3E1AA4311D0DA071005FCCBB /* MenuPanelViewController.swift */, + 3EF422B11D73262000B9A3EB /* UserCell.swift */, ); name = Menu; sourceTree = ""; @@ -751,6 +754,7 @@ 3E1DC3CF1D42328C0091BC60 /* CategoryCell.swift in Sources */, 3EC325111CF703A600626C48 /* ItemCell.swift in Sources */, 3EA668A11D02836C00EE57A8 /* EbayWebServiceManager.swift in Sources */, + 3EF422B21D73262000B9A3EB /* UserCell.swift in Sources */, 3ECEDB871CF9C722003566B3 /* ListingPreviewViewController.swift in Sources */, 3E1B1F0B1D2493EE00DBCF08 /* EtsySettingsViewController.swift in Sources */, 3EC325231CF7DA5500626C48 /* HomeViewController.swift in Sources */, diff --git a/Vendoo.xcworkspace/xcuserdata/okechi.xcuserdatad/UserInterfaceState.xcuserstate b/Vendoo.xcworkspace/xcuserdata/okechi.xcuserdatad/UserInterfaceState.xcuserstate index fff33d0..e35b2a9 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 d9f43cb..75c7d77 100644 --- a/Vendoo.xcworkspace/xcuserdata/okechi.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist +++ b/Vendoo.xcworkspace/xcuserdata/okechi.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist @@ -9,12 +9,106 @@ shouldBeEnabled = "No" ignoreCount = "0" continueAfterRunningActions = "No" - filePath = "Vendoo/EbayWebServiceManager.swift" - timestampString = "493665751.744" + filePath = "Vendoo/ServiceNotificationManager.swift" + timestampString = "494778762.798972" startingColumnNumber = "9223372036854775807" endingColumnNumber = "9223372036854775807" - startingLineNumber = "517" - endingLineNumber = "517" + startingLineNumber = "79" + endingLineNumber = "79" + landmarkName = "pollServices()" + landmarkType = "5"> + + + + + + + + + + + + + + + + + + + + + + + + @@ -26,12 +120,12 @@ ignoreCount = "0" continueAfterRunningActions = "No" filePath = "Vendoo/EbayWebServiceManager.swift" - timestampString = "493665751.744" + timestampString = "494898754.02163" startingColumnNumber = "9223372036854775807" endingColumnNumber = "9223372036854775807" - startingLineNumber = "234" - endingLineNumber = "234" - landmarkName = "listItem(_:completion:)" + startingLineNumber = "525" + endingLineNumber = "525" + landmarkName = "parser(_:foundCharacters:)" landmarkType = "5"> @@ -42,28 +136,12 @@ ignoreCount = "0" continueAfterRunningActions = "No" filePath = "Vendoo/EbayWebServiceManager.swift" - timestampString = "493665751.744" + timestampString = "494898361.943389" startingColumnNumber = "9223372036854775807" endingColumnNumber = "9223372036854775807" - startingLineNumber = "248" - endingLineNumber = "248" - landmarkName = "listItem(_:completion:)" - landmarkType = "5"> - - - - @@ -74,12 +152,12 @@ ignoreCount = "0" continueAfterRunningActions = "No" filePath = "Vendoo/EbayWebServiceManager.swift" - timestampString = "493665751.744" + timestampString = "494898365.099933" startingColumnNumber = "9223372036854775807" endingColumnNumber = "9223372036854775807" - startingLineNumber = "252" - endingLineNumber = "252" - landmarkName = "listItem(_:completion:)" + startingLineNumber = "500" + endingLineNumber = "500" + landmarkName = "parser(_:foundCharacters:)" landmarkType = "5"> @@ -89,13 +167,13 @@ shouldBeEnabled = "No" ignoreCount = "0" continueAfterRunningActions = "No" - filePath = "Vendoo/CategoriesTableViewController.swift" - timestampString = "493602540.110913" + filePath = "Vendoo/CategoryPopUpController.swift" + timestampString = "494899698.118321" startingColumnNumber = "9223372036854775807" endingColumnNumber = "9223372036854775807" - startingLineNumber = "575" - endingLineNumber = "575" - landmarkName = "tableView(_:didSelectRowAtIndexPath:)" + startingLineNumber = "66" + endingLineNumber = "66" + landmarkName = "loadCategories(_:selectedCatCompletion:)" landmarkType = "5"> @@ -105,13 +183,13 @@ shouldBeEnabled = "No" ignoreCount = "0" continueAfterRunningActions = "No" - filePath = "Vendoo/CategoriesTableViewController.swift" - timestampString = "493584180.958182" + filePath = "Vendoo/EbayWebServiceManager.swift" + timestampString = "494899878.763302" startingColumnNumber = "9223372036854775807" endingColumnNumber = "9223372036854775807" - startingLineNumber = "159" - endingLineNumber = "159" - landmarkName = "tableView(_:cellForRowAtIndexPath:)" + startingLineNumber = "524" + endingLineNumber = "524" + landmarkName = "parser(_:foundCharacters:)" landmarkType = "5"> @@ -121,44 +199,44 @@ shouldBeEnabled = "No" ignoreCount = "0" continueAfterRunningActions = "No" - filePath = "Vendoo/CategoriesTableViewController.swift" - timestampString = "493584180.958182" + filePath = "Vendoo/HomeViewController.swift" + timestampString = "494902152.530491" startingColumnNumber = "9223372036854775807" endingColumnNumber = "9223372036854775807" - startingLineNumber = "550" - endingLineNumber = "550" - landmarkName = "navigateCategories()" + startingLineNumber = "87" + endingLineNumber = "87" + landmarkName = "viewDidLoad()" landmarkType = "5"> + startingLineNumber = "87" + endingLineNumber = "87" + offsetFromSymbolStart = "507"> + startingLineNumber = "87" + endingLineNumber = "87" + offsetFromSymbolStart = "7119"> @@ -169,12 +247,12 @@ shouldBeEnabled = "No" ignoreCount = "0" continueAfterRunningActions = "No" - filePath = "Vendoo/CategoryPopUpController.swift" - timestampString = "493584180.958182" + filePath = "Vendoo/HomeViewController.swift" + timestampString = "494916335.990713" startingColumnNumber = "9223372036854775807" endingColumnNumber = "9223372036854775807" - startingLineNumber = "21" - endingLineNumber = "21" + startingLineNumber = "59" + endingLineNumber = "59" landmarkName = "viewDidLoad()" landmarkType = "5"> @@ -185,64 +263,95 @@ shouldBeEnabled = "No" ignoreCount = "0" continueAfterRunningActions = "No" - filePath = "Vendoo/CategoryPopUpController.swift" - timestampString = "493604807.799997" + filePath = "Vendoo/ItemTableViewController.swift" + timestampString = "494936802.535184" startingColumnNumber = "9223372036854775807" endingColumnNumber = "9223372036854775807" - startingLineNumber = "81" - endingLineNumber = "81" - landmarkName = "loadCategories(_:selectedCatCompletion:)" + startingLineNumber = "107" + endingLineNumber = "107" + landmarkName = "prepareForSegue(_:sender:)" landmarkType = "5"> + + + + + + + + + startingLineNumber = "51" + endingLineNumber = "51" + offsetFromSymbolStart = "53"> + startingLineNumber = "51" + endingLineNumber = "51" + offsetFromSymbolStart = "95"> + + - - - - @@ -266,12 +375,12 @@ ignoreCount = "0" continueAfterRunningActions = "No" filePath = "Vendoo/EbayWebServiceManager.swift" - timestampString = "493665751.744" + timestampString = "494938315.252535" startingColumnNumber = "9223372036854775807" endingColumnNumber = "9223372036854775807" - startingLineNumber = "310" - endingLineNumber = "310" - landmarkName = "getSubCategories(_:detailLevel:catCode:onCompletion:)" + startingLineNumber = "315" + endingLineNumber = "315" + landmarkName = "listItem(_:imageUrls:completion:)" landmarkType = "5"> @@ -282,55 +391,7 @@ ignoreCount = "0" continueAfterRunningActions = "No" filePath = "Vendoo/EbayWebServiceManager.swift" - timestampString = "493665751.744" - startingColumnNumber = "9223372036854775807" - endingColumnNumber = "9223372036854775807" - startingLineNumber = "481" - endingLineNumber = "481" - landmarkName = "parser(_:foundCharacters:)" - landmarkType = "5"> - - - - - - - - - - - - @@ -362,11 +423,11 @@ ignoreCount = "0" continueAfterRunningActions = "No" filePath = "Vendoo/EbayWebServiceManager.swift" - timestampString = "493665751.744" + timestampString = "494938502.495792" startingColumnNumber = "9223372036854775807" endingColumnNumber = "9223372036854775807" - startingLineNumber = "493" - endingLineNumber = "493" + startingLineNumber = "510" + endingLineNumber = "510" landmarkName = "parser(_:foundCharacters:)" landmarkType = "5"> @@ -374,63 +435,127 @@ + + + + + + + + + + + + + + + + + startingLineNumber = "402" + endingLineNumber = "402" + offsetFromSymbolStart = "5443"> + startingLineNumber = "402" + endingLineNumber = "402" + offsetFromSymbolStart = "43"> @@ -438,225 +563,49 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + - - - - @@ -698,15 +631,31 @@ ignoreCount = "0" continueAfterRunningActions = "No" filePath = "Vendoo/ListingPreviewViewController.swift" - timestampString = "493662437.215315" + timestampString = "494942036.742589" startingColumnNumber = "9223372036854775807" endingColumnNumber = "9223372036854775807" - startingLineNumber = "500" - endingLineNumber = "500" + startingLineNumber = "412" + endingLineNumber = "412" landmarkName = "publishItem(_:)" landmarkType = "5"> + + + + diff --git a/Vendoo/.DS_Store b/Vendoo/.DS_Store index 8d98363..661de9b 100644 Binary files a/Vendoo/.DS_Store and b/Vendoo/.DS_Store differ diff --git a/Vendoo/CategoriesTableViewController.swift b/Vendoo/CategoriesTableViewController.swift index c8e14c9..cf4c1d3 100644 --- a/Vendoo/CategoriesTableViewController.swift +++ b/Vendoo/CategoriesTableViewController.swift @@ -17,7 +17,10 @@ class CategoriesTableViewController: UIViewController, UITableViewDelegate, UITa private var ebayManager: EbayWebServiceManager! = EbayWebServiceManager() private var selectedCategory: String! private var selectedSub: String! - + private var potentialEbay = false + private var potentialEtsy = false + private var potentialAmazon = false + private var categories = ["Accessories", "Antiques", "Art", @@ -124,9 +127,17 @@ class CategoriesTableViewController: UIViewController, UITableViewDelegate, UITa // Configure the cell... + dispatch_async(dispatch_get_main_queue(), { - cell.categoryName.text = self.categories[indexPath.row] + 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 + cell.networks.cellForItemAtIndexPath(NSIndexPath(forRow: 1, inSection: 0))?.hidden = true //amazon + cell.networks.cellForItemAtIndexPath(NSIndexPath(forRow: 0, inSection: 0))?.hidden = true //ebay + + //leaving this in for category debugging purposes + /* switch (cell.categoryName.text!) { case ("Accessories") : cell.networks.cellForItemAtIndexPath(NSIndexPath(forRow: 3, inSection: 0))?.hidden = false //facebook @@ -514,7 +525,7 @@ class CategoriesTableViewController: UIViewController, UITableViewDelegate, UITa break default: break - } + }*/ /*//ebay if(true){ @@ -569,22 +580,132 @@ class CategoriesTableViewController: UIViewController, UITableViewDelegate, UITa } func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { - self.selectedCategory = self.categories[indexPath.row] + + switch self.categories[indexPath.row] { + case "Antiques": + self.selectedCategory = "Antiques" + break + case "Art": + self.selectedCategory = "Art" + self.potentialEtsy = true + break + case "Baby": + self.selectedCategory = "Baby" + break + case "Bath, Beauty & Health": + self.selectedCategory = "Health and Beauty" + self.potentialEtsy = true + break + case "Books": + self.selectedCategory = "Books" + self.potentialEtsy = true + break + case "Business & Industrial": + self.selectedCategory = "Business and Industrial" + break + case "Cameras & Photo": + self.selectedCategory = "Cameras and Photo" + break + case "Cell Phones & Accessories": + self.selectedCategory = "Cell Phones and Accessories" + break + case "Clothing & Shoes": + self.selectedCategory = "Clothing, Shoes and Accessories" + self.potentialEtsy = true + break + case "Coins & Paper Money": + self.selectedCategory = "Coins and Paper Money" + break + case "Collectibles": + self.selectedCategory = "Collectibles" + break + case "Computers/Tablets and Networking": + self.selectedCategory = "Computers/Tablets and Networking" + break + case "Consumer Electronics": + self.selectedCategory = "Consumer Electronics" + break + case "Crafts": + self.selectedCategory = "Crafts" + break + case "Dolls & Miniatures": + self.selectedCategory = "Dolls and Bears" + self.potentialEtsy = true + break + case "DVDs & Movies": + self.selectedCategory = "DVDs & Movies" + break + case "Entertainment Memorabilia": + self.selectedCategory = "Entertainment Memorabilia" + break + case "Everything Else": + self.selectedCategory = "Everything Else" + self.potentialEtsy = true + break + case "Gift Cards & Coupons": + self.selectedCategory = "Gift Cards and Coupons" + break + case "Home/Houseware & Garden": + self.selectedCategory = "Home and Garden" + self.potentialEtsy = true + break + case "Jewelry & Watches": + self.selectedCategory = "Jewelry and Watches" + self.potentialEtsy = true + break + case "Musical Instruments & Gear": + self.selectedCategory = "Musical Instruments and Gear" + break + case "Pet Supplies": + self.selectedCategory = "Pet Supplies" + break + case "Pottery & Glass": + self.selectedCategory = "Pottery and Glass" + break + case "Real Estate": + self.selectedCategory = "Real Estate" + break + case "Specialty Services": + self.selectedCategory = "Specialty Services" + break + case "Sporting Goods": + self.selectedCategory = "Sporting Goods" + break + case "Sports Memorabilia & Fan Shop": + self.selectedCategory = "Sports Mem, Cards and Fan Shop" + break + case "Tickets & Experiences": + self.selectedCategory = "Tickets and Experiences" + break + case "Toys & Hobbies": + self.selectedCategory = "Toys and Hobbies" + self.potentialEtsy = true + break + case "Travel": + self.selectedCategory = "Travel" + break + case "Video Games & Consoles": + self.selectedCategory = "Video Games and Consoles" + break + default: + self.selectedCategory = self.categories[indexPath.row] + self.potentialEtsy = true + break + } + let cell: CategoryCell! = tableView.cellForRowAtIndexPath(indexPath) as! CategoryCell//tableView.dequeueReusableCellWithIdentifier("CategoryCell", forIndexPath: indexPath) as? CategoryCell - if(cell.shouldAskAboutLeafCategories){ - var alert = UIAlertController(title: "Explore Subcategories", message: "Would you like to see the subcategories for \(self.selectedCategory). NOTE: Only Required If Posting to Ebay", preferredStyle: .Alert) + + if(self.ebayManager.isAuthorized ) { + var dict: Dictionary> = (EbayWebServiceManager.settingsDictionary["categories"]!) as! Dictionary> - alert.addAction(UIAlertAction(title: "Yes", style: .Default, handler: {(action: UIAlertAction!) in + let catDict = dict[self.selectedCategory] + if (catDict != nil && !(catDict!["isLeaf"] as! Bool)){ + self.potentialEbay = true self.navigateCategories() - })) - - alert.addAction(UIAlertAction(title: "Cancel", style: .Cancel, handler: {(action: UIAlertAction!) in - })) - alert.addAction(UIAlertAction(title: "No", style: .Default, handler: {(action: UIAlertAction!) in - self.performSegueWithIdentifier("NetworkSelectionSegue", sender: self) - })) - self.presentViewController(alert, animated: true, completion: nil) - + } + else{ + self.performSegueWithIdentifier("NetworkSelectionSegue", sender: self) + } } else { self.performSegueWithIdentifier("NetworkSelectionSegue", sender: self) @@ -642,6 +763,20 @@ class CategoriesTableViewController: UIViewController, UITableViewDelegate, UITa fireManager: self.firManager, ebayManager: self.ebayManager, etsyManager: self.etsyManager ) (segue.destinationViewController as! NetworksTableViewController).setNetworkSelectFunctionality(true) + + //check what networks to load in network selection view + if self.graphManager.isAuthorized { + (segue.destinationViewController as! NetworksTableViewController).toggleMarketPlaceVisibitlity("facebook") + } + if self.potentialEbay && self.ebayManager.isAuthorized { + (segue.destinationViewController as! NetworksTableViewController).toggleMarketPlaceVisibitlity("ebay") + } + if self.potentialEtsy && self.etsyManager.isAuthorized { + (segue.destinationViewController as! NetworksTableViewController).toggleMarketPlaceVisibitlity("etsy") + } + if self.potentialAmazon { + (segue.destinationViewController as! NetworksTableViewController).toggleMarketPlaceVisibitlity("amazon") + } //print(self.categoryPicker.selectedRowInComponent(0)) } } diff --git a/Vendoo/CategoryPopUpController.swift b/Vendoo/CategoryPopUpController.swift index 8807fc1..8e85e20 100644 --- a/Vendoo/CategoryPopUpController.swift +++ b/Vendoo/CategoryPopUpController.swift @@ -59,6 +59,7 @@ class CategoryPopUpController: UIViewController { } } + self.categoryList = Dictionary() self.ebayManager.getSubCategories(selectedCategory, detailLevel: self.parentCategory.count + 1, catCode: catCode, onCompletion: { (dict, error) -> Void in var index = 0 diff --git a/Vendoo/EbayWebServiceManager.swift b/Vendoo/EbayWebServiceManager.swift index 59d8111..81d10dd 100644 --- a/Vendoo/EbayWebServiceManager.swift +++ b/Vendoo/EbayWebServiceManager.swift @@ -40,6 +40,7 @@ class EbayWebServiceManager: NSObject { private var completion: ServiceResponse! private var isGettingSubCategories: Bool = false private var isRevisingListing: Bool = false + private var requestGroup: dispatch_group_t = dispatch_group_create() //---------------------------------------------// @@ -123,7 +124,7 @@ extension EbayWebServiceManager { } } - func authorizeApp(){ + func authorizeApp(onComplete: ServiceResponse){ let soapMessage = "" + "" + @@ -133,18 +134,21 @@ extension EbayWebServiceManager { 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(){ - let soapMessage = "" + + //@TODO: Add an alert to let user know if their account has not been deauthorized and keep them logged in. + var soapMessage = "" + "" + "" + - "\(self.xmlResponseDictionary["eBayAuthToken"])" + - "​" + "\(self.xmlResponseDictionary["eBayAuthToken"]!)" + + "" + soapMessage = soapMessage + "en_US" + + "High​" let url = NSURL(string: self.baseURL) let theRequest = NSMutableURLRequest(URL: url!) @@ -207,8 +211,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 = "" + "" + "" + @@ -217,21 +223,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 = "" + @@ -268,8 +279,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!)" + @@ -285,7 +303,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") @@ -303,7 +321,7 @@ extension EbayWebServiceManager { 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.requestMaker(soapMessage, theRequest: theRequest) } @@ -404,6 +422,7 @@ extension EbayWebServiceManager: NSXMLParserDelegate { print("account credentials saved") NSUserDefaults.standardUserDefaults().setBool(true, forKey: "ebayAuthorized") self.isAuthorized = true + //self.completion(nil, nil) //Test authentication let soapmessage = "" + @@ -465,7 +484,7 @@ extension EbayWebServiceManager: NSXMLParserDelegate { 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 /* @@ -487,6 +506,7 @@ extension EbayWebServiceManager: NSXMLParserDelegate { 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 { diff --git a/Vendoo/EtsyRESTAPIManager.swift b/Vendoo/EtsyRESTAPIManager.swift index d24a554..b464c31 100644 --- a/Vendoo/EtsyRESTAPIManager.swift +++ b/Vendoo/EtsyRESTAPIManager.swift @@ -52,8 +52,6 @@ class EtsyRESTAPIManager: NSObject { "accessTokenUrl": "https://openapi.etsy.com/v2/oauth/access_token?", "responseType": "token"]) - - //FIXME: something is wrong when here when logging back in with a diff user if(self.isAuthorized){ let dictionary = Locksmith.loadDataForUserAccount(self.userEmail, inService: "vendoo_oauth_etsy") let oauthDictionary = dictionary?["etsy_oauth"] as? Dictionary 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/FirebaseManager.swift b/Vendoo/FirebaseManager.swift index 925e6e4..c217f7d 100644 --- a/Vendoo/FirebaseManager.swift +++ b/Vendoo/FirebaseManager.swift @@ -18,24 +18,21 @@ class FirebaseManager: NSObject { let ref = FIRDatabase.database().reference() let user_email = ((NSUserDefaults.standardUserDefaults().objectForKey("email") as? String)!).stringByReplacingOccurrencesOfString(".", withString: "_") let storage = FIRStorage.storage() - let indicator = TYMActivityIndicatorView.init(activityIndicatorStyle: (TYMActivityIndicatorViewStyle.Normal)) + var indicator = UIActivityIndicatorView(activityIndicatorStyle: UIActivityIndicatorViewStyle.WhiteLarge) + //let key: String! override init(){ super.init() - - - + indicator.color = UIColor.blueColor() //check if user has been created self.ref.child("Users").observeSingleEventOfType(.Value, withBlock: { snapshot in // do some stuff once if(!snapshot.hasChild(self.user_email)){ - let user = ["user_Listings": "","listing_Keys": "","favorite_listings_keys": ""] - // let userUpdates = ["/Users/\((NSUserDefaults.standardUserDefaults().objectForKey("email") as? String)!)" : user] + let user = ["name": (NSUserDefaults.standardUserDefaults().objectForKey("name") as? String)!, "user_Listings": "", "listing_Keys": "", "favorite_listings_keys": ""] self.ref.child("Users").child(self.user_email).setValue(user) - //self.ref.child("Users").setValue(["email": (NSUserDefaults.standardUserDefaults().objectForKey("email") as? String)!]) } }) diff --git a/Vendoo/HomeViewController.swift b/Vendoo/HomeViewController.swift index e5ceaaf..f82bba5 100644 --- a/Vendoo/HomeViewController.swift +++ b/Vendoo/HomeViewController.swift @@ -23,15 +23,21 @@ class HomeViewController: UITabBarController { // Do any additional setup after loading the view. dispatch_async(dispatch_get_main_queue(), { - self.firebaseManager.ref.child("Users/\(self.firebaseManager.user_email)/user_Listings").observeSingleEventOfType( .Value, withBlock: { + + //get all listing information for current user + self.firebaseManager.ref.child("Users/\(self.firebaseManager.user_email)").observeSingleEventOfType( .Value, withBlock: { (snapshot) -> Void in - let listingDict = snapshot.value as? [String : AnyObject] + let userDict = snapshot.value as? [String : AnyObject] + + let listingDict = userDict!["user_Listings"] as? [String : AnyObject] + + NSUserDefaults.standardUserDefaults().setObject(userDict!["name"] as? String, forKey: "name") + if listingDict != nil { dispatch_async(dispatch_get_main_queue(), { - for (key, values) in listingDict! { let serviceGroup: dispatch_group_t = dispatch_group_create() self.firebaseManager.ref.observeSingleEventOfType(.Value, withBlock: { snapshot in @@ -54,13 +60,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!)!) } @@ -80,6 +86,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, @@ -105,8 +112,10 @@ class HomeViewController: UITabBarController { }) + }else { + NSNotificationCenter.defaultCenter().postNotificationName("finished_fetching_listings", object: nil) } - + }) }) diff --git a/Vendoo/ItemImagePickerViewController.swift b/Vendoo/ItemImagePickerViewController.swift index 82572d0..61863ab 100644 --- a/Vendoo/ItemImagePickerViewController.swift +++ b/Vendoo/ItemImagePickerViewController.swift @@ -43,6 +43,8 @@ class ItemImagePickerViewController: UIViewController { private var currImageSelected: UIImageView! private var currUILabel: UILabel! private var imageIndex: Int! + private var isEditing: Bool = false + private var currentInformation: Dictionary! override func viewDidLoad() { super.viewDidLoad() @@ -62,8 +64,6 @@ class ItemImagePickerViewController: UIViewController { pickerData = ["Category 1", "Category 2", "Category 3", "Category 4", "Category 5", "Category 6"] let tapGestureMain = UITapGestureRecognizer(target: self, action: #selector(ItemImagePickerViewController.takePicture)) - let tapGesture2 = UITapGestureRecognizer(target: self, action: #selector(ItemImagePickerViewController.takePicture)) - //tapGesture.cancelsTouchesInView = true self.view.addGestureRecognizer(tapGestureMain) @@ -88,7 +88,12 @@ class ItemImagePickerViewController: UIViewController { self.tabBarController?.tabBar.hidden = true } - + func toggleEditingMode(dictionary: Dictionary?){ + if(!self.isEditing) { + self.currentInformation = dictionary! + } + self.isEditing = !self.isEditing + } @@ -157,12 +162,15 @@ extension ItemImagePickerViewController { dict["pictures"] = images (segue.destinationViewController as! CategoriesTableViewController).setListingDictionary(dict) - (segue.destinationViewController as! CategoriesTableViewController).setManagers(((self.tabBarController as? HomeViewController)?.fbGraphManager)!, - fireManager: ((self.tabBarController as? HomeViewController)?.firebaseManager)!, ebayManager: ((self.tabBarController as? HomeViewController)?.ebayGraphManager)!, - etsyManager: ((self.tabBarController as? HomeViewController)?.etsyManager)!) - //(segue.destinationViewController as! NetworksTableViewController).setNetworkSelectFunctionality(true) - //print(self.categoryPicker.selectedRowInComponent(0)) + if(self.isEditing) { + (segue.destinationViewController as! CategoriesTableViewController).setManagers((self.currentInformation["fbManager"] as? FacebookGraphAPIManager)!, fireManager: (self.currentInformation["firebaseManager"] as? FirebaseManager)!, ebayManager: (self.currentInformation["ebayManager"] as? EbayWebServiceManager)!, etsyManager: (self.currentInformation["etsyManager"] as? EtsyRESTAPIManager)!) + + }else { + (segue.destinationViewController as! CategoriesTableViewController).setManagers(((self.tabBarController as? HomeViewController)?.fbGraphManager)!, + fireManager: ((self.tabBarController as? HomeViewController)?.firebaseManager)!, ebayManager: ((self.tabBarController as? HomeViewController)?.ebayGraphManager)!, + etsyManager: ((self.tabBarController as? HomeViewController)?.etsyManager)!) + } } @@ -216,7 +224,6 @@ extension ItemImagePickerViewController: UIImagePickerControllerDelegate, UINavi case 2: if(self.itemImagesSelections[0] && self.itemImagesSelections[1]) { - //self.itemImagesSelections[2] = true viewsWereSaved[0] = true self.imageIndex = 2 @@ -232,7 +239,6 @@ extension ItemImagePickerViewController: UIImagePickerControllerDelegate, UINavi case 3: if(self.itemImagesSelections[0] && self.itemImagesSelections[1] && self.itemImagesSelections[2]) { - //self.itemImagesSelections[3] = true viewsWereSaved[0] = true self.imageIndex = 3 @@ -248,7 +254,6 @@ extension ItemImagePickerViewController: UIImagePickerControllerDelegate, UINavi case 4: if(self.itemImagesSelections[0] && self.itemImagesSelections[1] && self.itemImagesSelections[2] && self.itemImagesSelections[3]) { - //self.itemImagesSelections[4] = true viewsWereSaved[0] = true self.imageIndex = 4 @@ -275,20 +280,6 @@ extension ItemImagePickerViewController: UIImagePickerControllerDelegate, UINavi viewsWereSaved[1] = true } } - /* - for (UIView *view in self.view.subviews) - { - if ([view isKindOfClass:[UIImageView class]] && CGRectContainsPoint(view.frame, location)) - { - UIImageView *image = (UIImageView *) view; - - // ok, now you know which image you received your long press for - // do whatever you wanted on it at this point - - return; - } - } - */ } @@ -439,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 { @@ -452,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]] @@ -526,9 +516,13 @@ extension ItemImagePickerViewController { } @IBAction func cancelNewListing(sender: AnyObject) { - //nil out all data user may have entered so that when they reopen new listing page - //it initialized to a fresh screen. - self.tabBarController?.selectedIndex = 0 + //@FIXME: nil out all data user may have entered so that when they reopen new listing page it initialized to a fresh screen. + + if(!self.isEditing) { + self.tabBarController?.selectedIndex = 0 + }else{ + self.presentingViewController?.dismissViewControllerAnimated(true, completion: nil) + } } diff --git a/Vendoo/ItemTableViewController.swift b/Vendoo/ItemTableViewController.swift index eb8685b..2da8be4 100644 --- a/Vendoo/ItemTableViewController.swift +++ b/Vendoo/ItemTableViewController.swift @@ -10,6 +10,7 @@ This class will be used to retrieve and manipulate data seen by the end user for he/she's item listings */ import UIKit +import TYMActivityIndicatorView class ItemTableViewController: UIViewController { @@ -19,6 +20,8 @@ class ItemTableViewController: UIViewController { @IBOutlet weak var menuButton: UIBarButtonItem! + var loadingView: UIView! + var selectedListing: Listing! override func viewDidLoad() { super.viewDidLoad() @@ -39,10 +42,18 @@ class ItemTableViewController: UIViewController { menuButton.action = "revealToggle:" self.view.addGestureRecognizer(self.revealViewController().panGestureRecognizer()) } - (self.tabBarController as? HomeViewController)?.firebaseManager.indicator.hidesWhenStopped = 1 - //self.view.addSubview(((self.tabBarController as? HomeViewController)?.firebaseManager.indicator)!) + + self.loadingView = UIView(frame: self.view.frame) + self.loadingView.backgroundColor = UIColor.grayColor() + self.loadingView.alpha = 0.4 + ((self.tabBarController as? HomeViewController)?.firebaseManager.indicator)!.center = self.view.center + + + self.loadingView.addSubview(((self.tabBarController as? HomeViewController)?.firebaseManager.indicator)!) + self.view.addSubview(loadingView) (self.tabBarController as? HomeViewController)?.firebaseManager.indicator.startAnimating() + } @@ -58,6 +69,7 @@ class ItemTableViewController: UIViewController { func stopIndicator(){ (self.tabBarController as? HomeViewController)?.firebaseManager.indicator.stopAnimating() + self.loadingView.removeFromSuperview() self.itemTable.reloadData() } @@ -76,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") + } + } } @@ -115,6 +156,8 @@ extension ItemTableViewController: UITableViewDataSource{ }) + }else { + cell.itemStatus.text = "Status: Active" } if(!((self.tabBarController as? HomeViewController)!.userListings[indexPath.row].networks["areNetworksChosen"])!){ @@ -140,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 a86601b..a0373b0 100644 --- a/Vendoo/Listing.swift +++ b/Vendoo/Listing.swift @@ -15,17 +15,19 @@ 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! - 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 a402872..7cff821 100644 --- a/Vendoo/ListingPreviewViewController.swift +++ b/Vendoo/ListingPreviewViewController.swift @@ -14,18 +14,28 @@ */ 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 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() @@ -37,10 +47,30 @@ class ListingPreviewViewController: UIViewController { private var alert = UIAlertController(title: "Listing Published", message: "Your listing has been published", preferredStyle: .Alert) 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 @@ -62,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 @@ -70,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 @@ -82,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 @@ -92,12 +153,23 @@ class ListingPreviewViewController: UIViewController { // Pass the selected object to the new view controller. if(segue.identifier == "EditListingSegue"){ + var imageData: [UIImage] = [] + for imageView in (self.itemListingDictionary["pictures"] as? [UIImageView])! { + imageData.append(imageView.image!) + } + + let dict: Dictionary = ["title": self.itemTitle.text, + "description": self.itemDescription.text, + "price": self.itemPrice.text, + "quantity": self.itemQuantity.text, + "images": imageData, + "category": self.itemCategory.text, + "fbManager": self.graphManager, + "ebayManager": self.ebayManager, + "etsyManager": self.etsyManager, + "firebaseManager": self.firManager] let vc = (segue.destinationViewController as? ItemImagePickerViewController)! - vc.itemName.text? = self.itemTitle.text - vc.itemPrice.text? = self.itemPrice.text - vc.itemDescription.text? = self.itemDescription.text - vc.possibleItemImageMain = self.itemPicture - vc.itemQuantity.text? = self.itemQuantity.text + vc.toggleEditingMode(dict) } } @@ -127,11 +199,30 @@ extension Dictionary { //MARK: - IBActions extension ListingPreviewViewController { - + @IBAction func cancel(sender: AnyObject) { + 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) { + self.loadingView = UIView(frame: self.view.frame) + self.loadingView.backgroundColor = UIColor.grayColor() + self.loadingView.alpha = 0.4 - if(self.itemPicture.image == nil){ + self.firManager.indicator.center = self.view.center + + self.loadingView.addSubview(self.firManager.indicator) + self.view.addSubview(loadingView) + self.firManager.indicator.startAnimating() + + 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)})) @@ -142,113 +233,15 @@ 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) - var categoryCode: String! - var dict = EbayWebServiceManager.settingsDictionary["categories"]! - switch self.itemCategory.text { - case "Antiques": - categoryCode = (dict["Antiques"] as! Dictionary)["cat_id"] as! String - break - case "Art": - categoryCode = (dict["Art"] as! Dictionary)["cat_id"] as! String - break - case "Baby": - categoryCode = (dict["Baby"] as! Dictionary)["cat_id"] as! String - break - case "Bath, Beauty & Health": - categoryCode = (dict["Health and Beauty"] as! Dictionary)["cat_id"] as! String - break - case "Books": - categoryCode = (dict["Books"] as! Dictionary)["cat_id"] as! String - break - case "Business & Industrial": - categoryCode = (dict["Business and Industrial"] as! Dictionary)["cat_id"] as! String - break - case "Cameras & Photo": - categoryCode = (dict["Cameras and Photo"] as! Dictionary)["cat_id"] as! String - break - case "Cell Phones & Accessories": - categoryCode = (dict["Cell Phones and Accessories"] as! Dictionary)["cat_id"] as! String - break - case "Clothing & Shoes": - categoryCode = (dict["Clothing, Shoes and Accessories"] as! Dictionary)["cat_id"] as! String - break - case "Coins & Paper Money": - categoryCode = (dict["Coins and Paper Money"] as! Dictionary)["cat_id"] as! String - break - case "Collectibles": - categoryCode = (dict["Collectibles"] as! Dictionary)["cat_id"] as! String - break - case "Computers/Tablets and Networking": - categoryCode = (dict["Computers/Tablets and Networking"] as! Dictionary)["cat_id"] as! String - break - case "Consumer Electronics": - categoryCode = (dict["Consumer Electronics"] as! Dictionary)["cat_id"] as! String - break - case "Crafts": - categoryCode = (dict["Crafts"] as! Dictionary)["cat_id"] as! String - break - case "Dolls & Miniatures": - categoryCode = (dict["Dolls and Bears"] as! Dictionary)["cat_id"] as! String - break - case "DVDs & Movies": - categoryCode = (dict["DVDs & Movies"] as! Dictionary)["cat_id"] as! String - break - case "Entertainment Memorabilia": - categoryCode = (dict["Entertainment Memorabilia"] as! Dictionary)["cat_id"] as! String - break - case "Everything Else": - categoryCode = (dict["Everything Else"] as! Dictionary)["cat_id"] as! String - break - case "Gift Cards & Coupons": - categoryCode = (dict["Gift Cards and Coupons"] as! Dictionary)["cat_id"] as! String - break - case "Home/Houseware & Garden": - categoryCode = (dict["Coins and Paper Money"] as! Dictionary)["cat_id"] as! String - break - case "Jewelry & Watches": - categoryCode = (dict["Jewelry and Watches"] as! Dictionary)["cat_id"] as! String - break - case "Musical Instruments & Gear": - categoryCode = (dict["Musical Instruments and Gear"] as! Dictionary)["cat_id"] as! String - break - case "Pet Supplies": - categoryCode = (dict["Pet Supplies"] as! Dictionary)["cat_id"] as! String - break - case "Pottery & Glass": - categoryCode = (dict["Pottery and Glass"] as! Dictionary)["cat_id"] as! String - break - case "Real Estate": - categoryCode = (dict["Real Estate"] as! Dictionary)["cat_id"] as! String - break - case "Specialty Services": - categoryCode = (dict["Specialty Services"] as! Dictionary)["cat_id"] as! String - break - case "Sporting Goods": - categoryCode = (dict["Sporting Goods"] as! Dictionary)["cat_id"] as! String - break - case "Sports Memorabilia & Fan Shop": - categoryCode = (dict["Sports Mem, Cards and Fan Shop"] as! Dictionary)["cat_id"] as! String - break - case "Tickets & Experiences": - categoryCode = (dict["Tickets and Experiences"] as! Dictionary)["cat_id"] as! String - break - case "Toys & Hobbies": - categoryCode = (dict["Toys and Hobbies"] as! Dictionary)["cat_id"] as! String - break - case "Travel": - categoryCode = (dict["Travel"] as! Dictionary)["cat_id"] as! String - break - case "Video Games & Consoles": - categoryCode = (dict["Video Games and Consoles"] as! Dictionary)["cat_id"] as! String - break - default: - break - } let body: [String: String] = [ "title": self.itemTitle.text, "quantity":self.itemQuantity.text, @@ -267,7 +260,7 @@ extension ListingPreviewViewController { self.newInProgressListing["networkIDs"] = networkIDs dispatch_group_leave(postingGroup) }) - } + }*/ //post to amazon @@ -404,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 @@ -421,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 @@ -451,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, @@ -482,65 +541,132 @@ 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) + self.firManager.indicator.stopAnimating() + + let alert = UIAlertController(title: "Listing Posted Successfully", message: "Your listing was submitted to all networks successfully", preferredStyle: .Alert) + + alert.addAction(UIAlertAction(title: "OK", style: .Default, handler:{(action: UIAlertAction!) in + + self.cancel(self) + alert.dismissViewControllerAnimated(true, completion: nil) + })) + + 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 8cf4967..88d4ab6 100755 --- a/Vendoo/Main.storyboard +++ b/Vendoo/Main.storyboard @@ -1027,7 +1027,7 @@ - + + @@ -1045,14 +1055,21 @@ + + - + + + + + + @@ -1367,6 +1384,7 @@ + @@ -1409,7 +1427,7 @@ - + @@ -1417,14 +1435,14 @@ + + + + diff --git a/Vendoo/MenuPanelViewController.swift b/Vendoo/MenuPanelViewController.swift index dc53499..89eb499 100644 --- a/Vendoo/MenuPanelViewController.swift +++ b/Vendoo/MenuPanelViewController.swift @@ -8,6 +8,7 @@ import UIKit import FirebaseAuth +import Locksmith class MenuPanelViewController: UIViewController{ @@ -99,7 +100,11 @@ extension MenuPanelViewController: UITableViewDataSource let cell: UITableViewCell switch(indexPath.row){ case 0: - cell = self.table.dequeueReusableCellWithIdentifier("User_Cell")! + + cell = (self.table.dequeueReusableCellWithIdentifier("User_Cell", forIndexPath: indexPath) as! UserCell) + + (cell as! UserCell).name.text = "Hi " + (NSUserDefaults.standardUserDefaults().objectForKey("name") as? String)! + (cell as! UserCell).email.text = (NSUserDefaults.standardUserDefaults().objectForKey("email") as? String)! break case 1: cell = self.table.dequeueReusableCellWithIdentifier("Notifications_Cell")! @@ -129,7 +134,32 @@ extension MenuPanelViewController{ do{ try FIRAuth.auth()?.signOut() - NSUserDefaults.standardUserDefaults().setBool(false, forKey: "signedIn") + try Locksmith.deleteDataForUserAccount((NSUserDefaults.standardUserDefaults().objectForKey("email") as? String)!, inService: "vendoo") + + do { + try Locksmith.deleteDataForUserAccount((NSUserDefaults.standardUserDefaults().objectForKey("email") as? String)!, inService: "vendoo_oauth_ebay") + }catch { + (error) + print(error) + } + + do { + try Locksmith.deleteDataForUserAccount((NSUserDefaults.standardUserDefaults().objectForKey("email") as? String)!, inService: "vendoo_oauth_etsy") + }catch { + (error) + print(error) + } + + do { + try Locksmith.deleteDataForUserAccount((NSUserDefaults.standardUserDefaults().objectForKey("email") as? String)!, inService: "vendoo_oauth_amazon") + }catch { + (error) + print(error) + } + + for key in Array(NSUserDefaults.standardUserDefaults().dictionaryRepresentation().keys) { + NSUserDefaults.standardUserDefaults().removeObjectForKey(key) + } let vc = self.storyboard?.instantiateViewControllerWithIdentifier("SignInViewController") self.presentViewController(vc!, animated: true, completion: nil) diff --git a/Vendoo/NetworksTableViewController.swift b/Vendoo/NetworksTableViewController.swift index 9139c15..4303e3d 100644 --- a/Vendoo/NetworksTableViewController.swift +++ b/Vendoo/NetworksTableViewController.swift @@ -33,6 +33,8 @@ class NetworksTableViewController: UIViewController { private var firManager: FirebaseManager! = nil private var etsyManager: EtsyRESTAPIManager! = nil private var ebayManager: EbayWebServiceManager! = EbayWebServiceManager() + private var shouldShowDictionary: Dictionary = ["ebay":false, "amazon":false,"etsy":false,"facebook":false] + private var networkOrderSelection: [String] = [] @@ -71,6 +73,23 @@ class NetworksTableViewController: UIViewController { self.networkToggleOrSelect = bool } + func toggleMarketPlaceVisibitlity (market: String) { + self.shouldShowDictionary[market] = !self.shouldShowDictionary[market]! + } + + private func checkVisibility () -> String? { + var string = "" + for (market, visibility) in self.shouldShowDictionary { + if visibility { + self.shouldShowDictionary[market] = !self.shouldShowDictionary[market]! + string = market + self.networkOrderSelection.append(market) + break + } + } + return string + } + override func viewWillAppear(animated: Bool) { super.viewWillAppear(animated) if(!networkToggleOrSelect) { @@ -129,8 +148,20 @@ extension NetworksTableViewController: UITableViewDataSource { } func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { - // #warning Incomplete implementation, return the number of rows - return 4 + if(self.networkToggleOrSelect) { + var count = 0 + // #warning Incomplete implementation, return the number of rows + for (_, visibility) in self.shouldShowDictionary { + if visibility { + count += 1 + } + } + return count + } + else { + return 4 + } + } @@ -142,7 +173,27 @@ extension NetworksTableViewController: UITableViewDataSource { //may hide future networks that don't apply to a listing if(self.networkToggleOrSelect){ - switch (indexPath.row){ + let market = self.checkVisibility()! + switch (market) { + case "facebook": + cell = (self.tableView.dequeueReusableCellWithIdentifier("facebook", forIndexPath: indexPath) as! FBTableViewCell) + break + case "ebay": + cell = (self.tableView.dequeueReusableCellWithIdentifier("ebay", forIndexPath: indexPath) as! EbayTableViewCell) + break + case "etsy": + cell = (self.tableView.dequeueReusableCellWithIdentifier("etsy", forIndexPath: indexPath) as! EtsyTableViewCell) + break + case "amazon": + cell = (self.tableView.dequeueReusableCellWithIdentifier("amazon", forIndexPath: indexPath) as! AmazonTableViewCell) + break + default: + cell = UITableViewCell() + break + } + + + /*switch (indexPath.row){ case 0: @@ -158,11 +209,11 @@ 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 - } + }*/ } else{ @@ -353,8 +404,8 @@ extension NetworksTableViewController: UITableViewDelegate { //case where class is being used in new item posting workflow to select which network to sell on if(self.networkToggleOrSelect){ - switch (indexPath.row){ - case 0: + switch (self.networkOrderSelection[indexPath.row]){ + case "ebay": let cell: EbayTableViewCell! cell = (self.tableView.dequeueReusableCellWithIdentifier("ebay", forIndexPath: indexPath) as! EbayTableViewCell) cell.setSelected(false, animated: false) @@ -383,7 +434,7 @@ extension NetworksTableViewController: UITableViewDelegate { } break - case 1: + case "amazon": let cell: AmazonTableViewCell! cell = (self.tableView.dequeueReusableCellWithIdentifier("amazon", forIndexPath: indexPath) as! AmazonTableViewCell) cell.setSelected(false, animated: false) @@ -413,7 +464,7 @@ extension NetworksTableViewController: UITableViewDelegate { break - case 2: + case "etsy": let cell: EtsyTableViewCell! cell = (self.tableView.dequeueReusableCellWithIdentifier("etsy", forIndexPath: indexPath) as! EtsyTableViewCell) @@ -451,7 +502,7 @@ extension NetworksTableViewController: UITableViewDelegate { break - default: + case "facebook": let cell: FBTableViewCell! @@ -477,16 +528,9 @@ extension NetworksTableViewController: UITableViewDelegate { //code to select network self.networksDictionary["facebook"] = true - //this is the type of code desired to access the REST management classes - /* - let tabBar = self.tabBarController - (tabBar as? HomeViewController)?.fbGraphManager.authorizeApp(self) - */ - - } - - + break + default: break } @@ -682,10 +726,19 @@ 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)) + let mywebViewController = UIViewController() + + //let myWebView:UIWebView = UIWebView(frame: CGRectMake(0, 0, UIScreen.mainScreen().bounds.width, UIScreen.mainScreen().bounds.height)) + let myWebView = UIWebView(frame: mywebViewController.view.bounds) myWebView.delegate = self myWebView.loadRequest(NSURLRequest(URL: NSURL(string: signInString)!)) - self.view.addSubview(myWebView) + mywebViewController.view = myWebView + + let navController = UINavigationController(rootViewController: mywebViewController) + mywebViewController.navigationItem.rightBarButtonItem = UIBarButtonItem(barButtonSystemItem: .Done, target: self, action: Selector("dismiss")) + + self.presentViewController(navController, animated: true, completion: nil) + //self.view.addSubview(myWebView) } } @@ -712,24 +765,15 @@ extension NetworksTableViewController: UIWebViewDelegate { NSLog("Oauth successful") ((self.tabBarController as? HomeViewController)?.ebayGraphManager)!.fetchToken() } - - /*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 { - - } - }*/ } } + func dismiss() { + self.dismissViewControllerAnimated(true, completion: nil) + } + } extension NetworksTableViewController { @@ -741,12 +785,16 @@ extension NetworksTableViewController { switch (sender.superview?.superview?.classForCoder){ case is EbayTableViewCell.Type: let tabBar = self.tabBarController - ((tabBar as? HomeViewController)?.ebayGraphManager.authorizeApp())! - dispatch_async(dispatch_get_main_queue(), { - sender.setTitle("Logout", forState: UIControlState.Normal) - (sender.superview?.superview as! EbayTableViewCell).settingsBtn.enabled = true - (sender.superview?.superview as! EbayTableViewCell).settingsBtn.hidden = false - }) + ((tabBar as? HomeViewController)?.ebayGraphManager.authorizeApp({ + something,_ -> Void in + // // // + dispatch_async(dispatch_get_main_queue(), { + sender.setTitle("Logout", forState: UIControlState.Normal) + (sender.superview?.superview as! EbayTableViewCell).settingsBtn.enabled = true + (sender.superview?.superview as! EbayTableViewCell).settingsBtn.hidden = false + }) + }))! + break case is AmazonTableViewCell.Type: break diff --git a/Vendoo/SettingsViewController.swift b/Vendoo/SettingsViewController.swift index 01fbc4e..e731b06 100644 --- a/Vendoo/SettingsViewController.swift +++ b/Vendoo/SettingsViewController.swift @@ -8,6 +8,7 @@ import UIKit import Locksmith +import FirebaseAuth class SettingsViewController: UIViewController { @@ -106,7 +107,7 @@ extension SettingsViewController: UITableViewDelegate { //put in password changing code later print("password accepted please enter new password") - let alert2 = UIAlertController(title: "Change Password", message: "WARNING! You are about to change your vendoo account password. Please enter your current password to continue.", preferredStyle: .Alert) + let alert2 = UIAlertController(title: "Change Password", message: "WARNING! You are about to change your vendoo account password. Please enter your new password to continue.", preferredStyle: .Alert) alert2.addTextFieldWithConfigurationHandler({ (textField : UITextField!) -> Void in @@ -116,8 +117,25 @@ extension SettingsViewController: UITableViewDelegate { alert2.addAction(UIAlertAction(title: "Change Password", style: .Default, handler:{(action: UIAlertAction!) in let textField2 = alert2.textFields![0] as UITextField + + FIRAuth.auth()?.currentUser?.updatePassword(textField2.text!, completion: { + (error) -> Void in - print("your new password is \(textField2.text!). This will be take out once password change logic is implemented.") + if (error != nil) { + print(error) + }else { + print("Current user's new password is now \(textField2.text!).") + do{ + try Locksmith.updateData(["pass": textField2.text!], forUserAccount: (NSUserDefaults.standardUserDefaults().objectForKey("email") as? String)!, inService: "vendoo") + print("account credentials saved") + } + catch{ + //could not save data to keychain + print("account credentials could not be saved") + + } + } + }) })) alert.dismissViewControllerAnimated(false, completion: {}) diff --git a/Vendoo/SignUpViewController.swift b/Vendoo/SignUpViewController.swift index fab4bcb..3de1cc9 100644 --- a/Vendoo/SignUpViewController.swift +++ b/Vendoo/SignUpViewController.swift @@ -6,10 +6,11 @@ // Copyright © 2016 Okechi Onyeje. All rights reserved. // -//NEED TO PROMPT NEW USER THAT THEY HAVE BEEN LOGGED IN, NEED TO ADD AN INDICTOR TO LET USER KNOW THEY NEED TO WAIT AND NEED TO SEGUE TO MAIN SCREEN VIEW CONTROLLER +//@FIXME: NEED TO PROMPT NEW USER THAT THEY HAVE BEEN LOGGED IN, NEED TO ADD AN INDICTOR TO LET USER KNOW THEY NEED TO WAIT AND NEED TO SEGUE TO MAIN SCREEN VIEW CONTROLLER import UIKit import FirebaseAuth +import Firebase import Locksmith class SignUpViewController: UIViewController { @@ -43,43 +44,56 @@ class SignUpViewController: UIViewController { extension SignUpViewController { @IBAction func signUpUser(sender: AnyObject) { - let finalEmail = email!.text!.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceCharacterSet()) - - if isValidEmail(finalEmail){ + if( (self.email.text != "") && (self.name.text != "") && (self.password.text != "")) { + let finalEmail = email!.text!.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceCharacterSet()) - FIRAuth.auth()?.createUserWithEmail(email.text!, password: password.text!) { (user, error) in - if error != nil { - /* - if ( error!.userInfo[("error_name" as NSObject!)] == "ERROR_WEAK_PASSWORD"){ - - - } - */ - print("user could not be created") - print(error!.localizedDescription) - return - } - else{ - - //save user account - NSUserDefaults.standardUserDefaults().setBool(true, forKey: "signedIn") - NSUserDefaults.standardUserDefaults().setObject(self.email.text, forKey: "email") - - //save user credentials in Keychain - do{ - try Locksmith.saveData(["pass": self.password.text!], forUserAccount: self.email.text!, inService: "vendoo") - print("account credentials saved") + if isValidEmail(finalEmail){ + FIRAuth.auth()?.createUserWithEmail(email.text!, password: password.text!) { (user, error) in + if error != nil { + /* + if ( error!.userInfo[("error_name" as NSObject!)] == "ERROR_WEAK_PASSWORD"){ + + + } + */ + print("user could not be created") + print(error!.localizedDescription) + return } - catch{ - //could not save data to keychain - print("account credentials could not be saved") + else{ + //save user account + NSUserDefaults.standardUserDefaults().setBool(true, forKey: "signedIn") + NSUserDefaults.standardUserDefaults().setObject(self.email.text, forKey: "email") + NSUserDefaults.standardUserDefaults().setObject(self.name.text, forKey: "name") + + + //save user credentials in Keychain + do{ + try Locksmith.saveData(["pass": self.password.text!], forUserAccount: self.email.text!, inService: "vendoo") + print("account credentials saved") + } + catch{ + //could not save data to keychain + print("account credentials could not be saved") + + } + self.performSegueWithIdentifier("HomeScreenSegue", sender:nil) } - self.performSegueWithIdentifier("HomeScreenSegue", sender:nil) } + } + + }else { + + var alert = UIAlertController(title: "Missing Required Fields", message: "You are missing required field(s) to complete your Vendoo sign up. Please make sure the email, name, and password fields have been filled.", preferredStyle: .Alert) + alert.addAction(UIAlertAction(title: "OK", style: .Default, handler: {(action: UIAlertAction!) in + })) + self.presentViewController(alert, animated: true, completion: nil) + } + } diff --git a/Vendoo/UserCell.swift b/Vendoo/UserCell.swift new file mode 100644 index 0000000..fa8847d --- /dev/null +++ b/Vendoo/UserCell.swift @@ -0,0 +1,19 @@ +// +// UserCell.swift +// Vendoo +// +// Created by Okechi Onyeje on 8/28/16. +// Copyright © 2016 Okechi Onyeje. All rights reserved. +// + +import UIKit + +class UserCell: UITableViewCell { + @IBOutlet weak var name: UILabel! + @IBOutlet weak var email: UILabel! + + override func awakeFromNib() { + super.awakeFromNib() + // Initialization code + } +}