diff --git a/Vendoo.xcworkspace/xcuserdata/okechi.xcuserdatad/UserInterfaceState.xcuserstate b/Vendoo.xcworkspace/xcuserdata/okechi.xcuserdatad/UserInterfaceState.xcuserstate index d2e5d09..31b14f8 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 09e2064..23f6fdc 100644 --- a/Vendoo.xcworkspace/xcuserdata/okechi.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist +++ b/Vendoo.xcworkspace/xcuserdata/okechi.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist @@ -10,11 +10,11 @@ ignoreCount = "0" continueAfterRunningActions = "No" filePath = "Vendoo/ListingPreviewViewController.swift" - timestampString = "501292645.293697" + timestampString = "501865709.047213" startingColumnNumber = "9223372036854775807" endingColumnNumber = "9223372036854775807" - startingLineNumber = "617" - endingLineNumber = "617" + startingLineNumber = "629" + endingLineNumber = "629" landmarkName = "publishItem(_:)" landmarkType = "5"> @@ -186,7 +186,7 @@ moduleName = "Vendoo" usesParentBreakpointCondition = "Yes" urlString = "file:///Users/okechi/Documents/iOs%20Practice/Vendoo/Vendoo_bb/Vendoo/Vendoo/CategoriesTableViewController.swift" - timestampString = "501823413.391987" + timestampString = "501881724.556734" startingColumnNumber = "9223372036854775807" endingColumnNumber = "9223372036854775807" startingLineNumber = "570" @@ -201,7 +201,7 @@ moduleName = "Vendoo" usesParentBreakpointCondition = "Yes" urlString = "file:///Users/okechi/Documents/iOs%20Practice/Vendoo/Vendoo_bb/Vendoo/Vendoo/CategoriesTableViewController.swift" - timestampString = "501823413.392097" + timestampString = "501881724.556878" startingColumnNumber = "9223372036854775807" endingColumnNumber = "9223372036854775807" startingLineNumber = "572" @@ -744,7 +744,7 @@ moduleName = "Vendoo" usesParentBreakpointCondition = "Yes" urlString = "file:///Users/okechi/Documents/iOs%20Practice/Vendoo/Vendoo_bb/Vendoo/Vendoo/SettingsViewController.swift" - timestampString = "501823413.408374" + timestampString = "501881724.576913" startingColumnNumber = "9223372036854775807" endingColumnNumber = "9223372036854775807" startingLineNumber = "194" @@ -759,7 +759,7 @@ moduleName = "Vendoo" usesParentBreakpointCondition = "Yes" urlString = "file:///Users/okechi/Documents/iOs%20Practice/Vendoo/Vendoo_bb/Vendoo/Vendoo/SettingsViewController.swift" - timestampString = "501823413.408515" + timestampString = "501881724.577081" startingColumnNumber = "9223372036854775807" endingColumnNumber = "9223372036854775807" startingLineNumber = "197" @@ -788,15 +788,15 @@ @@ -840,11 +840,138 @@ ignoreCount = "0" continueAfterRunningActions = "No" filePath = "Vendoo/ItemImagePickerViewController.swift" - timestampString = "501824288.668123" + timestampString = "501879828.267358" startingColumnNumber = "9223372036854775807" endingColumnNumber = "9223372036854775807" - startingLineNumber = "167" - endingLineNumber = "167" + startingLineNumber = "537" + endingLineNumber = "537" + landmarkName = "cancelNewListing(_:)" + landmarkType = "5"> + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Vendoo/FirebaseManager.swift b/Vendoo/FirebaseManager.swift index c217f7d..b1dbc37 100644 --- a/Vendoo/FirebaseManager.swift +++ b/Vendoo/FirebaseManager.swift @@ -2,6 +2,7 @@ // FirebaseService.swift // Vendoo // +// This class is responsible for initializing a new user, as well as managing web request to both firebase database and data storage // Created by Okechi Onyeje on 6/2/16. // Copyright © 2016 Okechi Onyeje. All rights reserved. // @@ -19,6 +20,7 @@ class FirebaseManager: NSObject { let user_email = ((NSUserDefaults.standardUserDefaults().objectForKey("email") as? String)!).stringByReplacingOccurrencesOfString(".", withString: "_") let storage = FIRStorage.storage() var indicator = UIActivityIndicatorView(activityIndicatorStyle: UIActivityIndicatorViewStyle.WhiteLarge) + var firGroup = dispatch_group_create() //let key: String! @@ -26,18 +28,22 @@ class FirebaseManager: NSObject { 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 = ["name": (NSUserDefaults.standardUserDefaults().objectForKey("name") as? String)!, "user_Listings": "", "listing_Keys": "", "favorite_listings_keys": ""] - self.ref.child("Users").child(self.user_email).setValue(user) + dispatch_group_enter(self.firGroup) + self.ref.child("Users").observeSingleEventOfType(.Value, withBlock: { snapshot in + // do some stuff once - } - }) - - - + if(!snapshot.hasChild(self.user_email)){ + 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, withCompletionBlock: { + (error, reference) -> Void in + + dispatch_group_leave(self.firGroup) + }) + + }else{ + dispatch_group_leave(self.firGroup) + } + }) } } diff --git a/Vendoo/HomeViewController.swift b/Vendoo/HomeViewController.swift index ac3be80..d1ff6b7 100644 --- a/Vendoo/HomeViewController.swift +++ b/Vendoo/HomeViewController.swift @@ -27,7 +27,7 @@ class HomeViewController: UITabBarController { ServiceNotificationManager.delegate = self self.notificationsManager.setManagers(fbGraphManager, fireManager: firebaseManager, ebayManager: ebayGraphManager, etsyManager: etsyManager) // Do any additional setup after loading the view. - dispatch_async(dispatch_get_main_queue(), { + dispatch_group_notify(self.firebaseManager.firGroup, dispatch_get_main_queue(), { //get all listing information for current user self.firebaseManager.ref.child("Users/\(self.firebaseManager.user_email)").observeSingleEventOfType( .Value, withBlock: { diff --git a/Vendoo/ItemImagePickerViewController.swift b/Vendoo/ItemImagePickerViewController.swift index 0a36a0a..4f2678e 100644 --- a/Vendoo/ItemImagePickerViewController.swift +++ b/Vendoo/ItemImagePickerViewController.swift @@ -134,43 +134,60 @@ extension ItemImagePickerViewController { print(self.itemDescription.text!) print(self.possibleItemImageMain.image) print(self.itemPrice.text!) + if ( + self.itemName.text! == "" || + Int(self.itemQuantity.text!) == nil || + Int(self.itemQuantity.text!) < 1 || + self.itemPrice.text! == "" || + Double(self.itemPrice.text!) == nil || + Double(self.itemPrice.text!) < 0.30 || + self.itemDescription.text! == "Description" + ){ - var dict: Dictionary = ["title":self.itemName.text!, "description":self.itemDescription.text!, "price":self.itemPrice.text!, "quantity":self.itemQuantity.text!] - var counter = 0 - var images: [UIImageView] = [] - for bool in self.itemImagesSelections { - if !bool { - break - } - switch counter { - case 1: - images.append(self.possibleItemImage2) - break - case 2: - images.append(self.possibleItemImage3) - break - case 3: - images.append(self.possibleItemImage4) - break - case 4: - images.append(self.possibleItemImage5) - break - default: - images.append(self.possibleItemImageMain) - } - counter += 1 - } - - dict["pictures"] = images - (segue.destinationViewController as! CategoriesTableViewController).setListingDictionary(dict) - - 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)!) + let alert = UIAlertController(title: "Required Information Missing", message: "To proceed with your listing, at least one image must be provided. Along with all provided fields including:\n Title\nDescription\nQuantity (must be greater than 0)\nPrice (must be greater than $0.30).", preferredStyle: .Alert) + alert.addAction(UIAlertAction(title: "OK", style: .Default, handler:{(action: UIAlertAction!) in alert.dismissViewControllerAnimated(true, completion: nil)})) - }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)!) + self.presentViewController(alert, animated: true, completion: nil) + + }else{ + var dict: Dictionary = ["title":self.itemName.text!, "description":self.itemDescription.text!, "price":self.itemPrice.text!, "quantity":self.itemQuantity.text!] + var counter = 0 + var images: [UIImageView] = [] + for bool in self.itemImagesSelections { + if !bool { + break + } + switch counter { + case 1: + images.append(self.possibleItemImage2) + break + case 2: + images.append(self.possibleItemImage3) + break + case 3: + images.append(self.possibleItemImage4) + break + case 4: + images.append(self.possibleItemImage5) + break + default: + images.append(self.possibleItemImageMain) + } + counter += 1 + } + + dict["pictures"] = images + (segue.destinationViewController as! CategoriesTableViewController).setListingDictionary(dict) + + 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)!) + } + } } diff --git a/Vendoo/ListingPreviewViewController.swift b/Vendoo/ListingPreviewViewController.swift index 6eef20b..ab47a80 100644 --- a/Vendoo/ListingPreviewViewController.swift +++ b/Vendoo/ListingPreviewViewController.swift @@ -68,10 +68,22 @@ class ListingPreviewViewController: UIViewController { /*if(!self.networksDictionary["areNetworksChosen"]!) { self.networks.hidden = true }*/ - /*else if (self.itemViewState == "Editable") { + else if (self.itemViewState == "Editible") { //self.cancel_backBtn.titleLabel?.text = "Back" - - }*/ + if( + self.itemTitle.text == "" || + self.itemDescription.text == "" || + self.itemPrice.text == "" || + self.itemCategory.text == "" || + self.itemQuantity == nil || + self.itemPictureMain.image == nil || + self.networks.numberOfItemsInSection(0) == 0 + ){ + + self.publishBtn.hidden = true + self.publishBtn.enabled = false + } + } // Do any additional setup after loading the view. // Initialization code @@ -233,7 +245,7 @@ extension ListingPreviewViewController { let vc = storyboard.instantiateViewControllerWithIdentifier("Reveal View Controller") as! SWRevealViewController self.presentViewController(vc, animated: true, completion: nil) } - else if self.itemViewState == "Editable" || self.itemViewState == "NonEditable"{ + else if self.itemViewState == "Editible" || self.itemViewState == "NonEditable"{ self.presentingViewController?.dismissViewControllerAnimated(true, completion: nil) } diff --git a/Vendoo/NetworksTableViewController.swift b/Vendoo/NetworksTableViewController.swift index 21e708e..ac55bd2 100644 --- a/Vendoo/NetworksTableViewController.swift +++ b/Vendoo/NetworksTableViewController.swift @@ -35,6 +35,7 @@ class NetworksTableViewController: UIViewController { private var ebayManager: EbayWebServiceManager! = EbayWebServiceManager() private var shouldShowDictionary: Dictionary = ["ebay":false, "amazon":false,"etsy":false,"facebook":false] private var networkOrderSelection: [String] = [] + private var networkCount = 0 @@ -81,6 +82,7 @@ class NetworksTableViewController: UIViewController { var string = "" for (market, visibility) in self.shouldShowDictionary { if visibility { + self.networkCount += 1 self.shouldShowDictionary[market] = !self.shouldShowDictionary[market]! string = market self.networkOrderSelection.append(market) @@ -126,9 +128,31 @@ extension NetworksTableViewController { // Pass the selected object to the new view controller. if(segue.identifier == "ItemPreviewSegue"){ + if(networkCount > 0){ + var count = 0; + for (_,v) in self.networksDictionary{ + if v { + count += 1 + } + } + + if(count > 0){ + (segue.destinationViewController as! ListingPreviewViewController).setDictionary(self.networksDictionary, itemdictionary: self.itemListingDictionary) + (segue.destinationViewController as! ListingPreviewViewController).setManagers(self.graphManager, fireManager: self.firManager, ebayManager: self.ebayManager, etsyManager: self.etsyManager) + }else{ + let alert = UIAlertController(title: "No Networks Selected", message: "You have not selected any networks to publish on. At least 1 network must be selected to continue.", preferredStyle: .Alert) + alert.addAction(UIAlertAction(title: "OK", style: .Default, handler:{(action: UIAlertAction!) in alert.dismissViewControllerAnimated(true, completion: nil)})) + + self.presentViewController(alert, animated: true, completion: nil) + } + + }else{ + let alert = UIAlertController(title: "No Networks Authorized", message: "You currently have no authorized networks to post on. You will not be able to publish this listing until at least 1 network has been authorized and selected for publishing.", preferredStyle: .Alert) + alert.addAction(UIAlertAction(title: "OK", style: .Default, handler:{(action: UIAlertAction!) in alert.dismissViewControllerAnimated(true, completion: nil)})) + + self.presentViewController(alert, animated: true, completion: nil) + } - (segue.destinationViewController as! ListingPreviewViewController).setDictionary(self.networksDictionary, itemdictionary: self.itemListingDictionary) - (segue.destinationViewController as! ListingPreviewViewController).setManagers(self.graphManager, fireManager: self.firManager, ebayManager: self.ebayManager, etsyManager: self.etsyManager) } if(segue.identifier == "EbaySettingsSegue") { diff --git a/Vendoo/SignUpViewController.swift b/Vendoo/SignUpViewController.swift index 3de1cc9..1d58474 100644 --- a/Vendoo/SignUpViewController.swift +++ b/Vendoo/SignUpViewController.swift @@ -61,13 +61,11 @@ extension SignUpViewController { return } 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")