mirror of
https://bitbucket.org/vendoo/vendoo_v1.0.git
synced 2025-12-25 11:47:40 +00:00
Merged branch Rapid-Dev-Branch into master
This commit is contained in:
commit
1dad88464f
@ -40,6 +40,7 @@
|
|||||||
3EC3252F1CF894E500626C48 /* AVFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3EC3252E1CF894E500626C48 /* AVFoundation.framework */; };
|
3EC3252F1CF894E500626C48 /* AVFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3EC3252E1CF894E500626C48 /* AVFoundation.framework */; };
|
||||||
3ECEDB871CF9C722003566B3 /* ListingPreviewViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3ECEDB861CF9C722003566B3 /* ListingPreviewViewController.swift */; };
|
3ECEDB871CF9C722003566B3 /* ListingPreviewViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3ECEDB861CF9C722003566B3 /* ListingPreviewViewController.swift */; };
|
||||||
3EDE75AE1D67B92F00BC3472 /* CategoryPopUpController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3EDE75AD1D67B92F00BC3472 /* CategoryPopUpController.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 */; };
|
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 */; };
|
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 */; };
|
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; };
|
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 = "<group>"; };
|
3ECEDB861CF9C722003566B3 /* ListingPreviewViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ListingPreviewViewController.swift; sourceTree = "<group>"; };
|
||||||
3EDE75AD1D67B92F00BC3472 /* CategoryPopUpController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CategoryPopUpController.swift; sourceTree = "<group>"; };
|
3EDE75AD1D67B92F00BC3472 /* CategoryPopUpController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CategoryPopUpController.swift; sourceTree = "<group>"; };
|
||||||
|
3EF422B11D73262000B9A3EB /* UserCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UserCell.swift; sourceTree = "<group>"; };
|
||||||
3EFB0E321D0B968300A05D7A /* SideMenuView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SideMenuView.swift; sourceTree = "<group>"; };
|
3EFB0E321D0B968300A05D7A /* SideMenuView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SideMenuView.swift; sourceTree = "<group>"; };
|
||||||
7D1FC6F6278B48A7BA9A9E03 /* Pods_Vendoo_VendooUITests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Vendoo_VendooUITests.framework; sourceTree = BUILT_PRODUCTS_DIR; };
|
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 = "<group>"; };
|
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 = "<group>"; };
|
||||||
@ -328,6 +330,7 @@
|
|||||||
3E1AA4331D0DD0B2005FCCBB /* Settings */,
|
3E1AA4331D0DD0B2005FCCBB /* Settings */,
|
||||||
3EFB0E321D0B968300A05D7A /* SideMenuView.swift */,
|
3EFB0E321D0B968300A05D7A /* SideMenuView.swift */,
|
||||||
3E1AA4311D0DA071005FCCBB /* MenuPanelViewController.swift */,
|
3E1AA4311D0DA071005FCCBB /* MenuPanelViewController.swift */,
|
||||||
|
3EF422B11D73262000B9A3EB /* UserCell.swift */,
|
||||||
);
|
);
|
||||||
name = Menu;
|
name = Menu;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
@ -751,6 +754,7 @@
|
|||||||
3E1DC3CF1D42328C0091BC60 /* CategoryCell.swift in Sources */,
|
3E1DC3CF1D42328C0091BC60 /* CategoryCell.swift in Sources */,
|
||||||
3EC325111CF703A600626C48 /* ItemCell.swift in Sources */,
|
3EC325111CF703A600626C48 /* ItemCell.swift in Sources */,
|
||||||
3EA668A11D02836C00EE57A8 /* EbayWebServiceManager.swift in Sources */,
|
3EA668A11D02836C00EE57A8 /* EbayWebServiceManager.swift in Sources */,
|
||||||
|
3EF422B21D73262000B9A3EB /* UserCell.swift in Sources */,
|
||||||
3ECEDB871CF9C722003566B3 /* ListingPreviewViewController.swift in Sources */,
|
3ECEDB871CF9C722003566B3 /* ListingPreviewViewController.swift in Sources */,
|
||||||
3E1B1F0B1D2493EE00DBCF08 /* EtsySettingsViewController.swift in Sources */,
|
3E1B1F0B1D2493EE00DBCF08 /* EtsySettingsViewController.swift in Sources */,
|
||||||
3EC325231CF7DA5500626C48 /* HomeViewController.swift in Sources */,
|
3EC325231CF7DA5500626C48 /* HomeViewController.swift in Sources */,
|
||||||
|
|||||||
Binary file not shown.
File diff suppressed because it is too large
Load Diff
BIN
Vendoo/.DS_Store
vendored
BIN
Vendoo/.DS_Store
vendored
Binary file not shown.
@ -17,6 +17,9 @@ class CategoriesTableViewController: UIViewController, UITableViewDelegate, UITa
|
|||||||
private var ebayManager: EbayWebServiceManager! = EbayWebServiceManager()
|
private var ebayManager: EbayWebServiceManager! = EbayWebServiceManager()
|
||||||
private var selectedCategory: String!
|
private var selectedCategory: String!
|
||||||
private var selectedSub: String!
|
private var selectedSub: String!
|
||||||
|
private var potentialEbay = false
|
||||||
|
private var potentialEtsy = false
|
||||||
|
private var potentialAmazon = false
|
||||||
|
|
||||||
private var categories = ["Accessories",
|
private var categories = ["Accessories",
|
||||||
"Antiques",
|
"Antiques",
|
||||||
@ -124,9 +127,17 @@ class CategoriesTableViewController: UIViewController, UITableViewDelegate, UITa
|
|||||||
|
|
||||||
// Configure the cell...
|
// Configure the cell...
|
||||||
|
|
||||||
dispatch_async(dispatch_get_main_queue(), {
|
|
||||||
cell.categoryName.text = self.categories[indexPath.row]
|
|
||||||
|
|
||||||
|
dispatch_async(dispatch_get_main_queue(), {
|
||||||
|
|
||||||
|
cell.categoryName.text = self.categories[indexPath.row]
|
||||||
|
cell.networks.cellForItemAtIndexPath(NSIndexPath(forRow: 3, inSection: 0))?.hidden = true //facebook
|
||||||
|
cell.networks.cellForItemAtIndexPath(NSIndexPath(forRow: 2, inSection: 0))?.hidden = true //etsy
|
||||||
|
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!) {
|
switch (cell.categoryName.text!) {
|
||||||
case ("Accessories") :
|
case ("Accessories") :
|
||||||
cell.networks.cellForItemAtIndexPath(NSIndexPath(forRow: 3, inSection: 0))?.hidden = false //facebook
|
cell.networks.cellForItemAtIndexPath(NSIndexPath(forRow: 3, inSection: 0))?.hidden = false //facebook
|
||||||
@ -514,7 +525,7 @@ class CategoriesTableViewController: UIViewController, UITableViewDelegate, UITa
|
|||||||
break
|
break
|
||||||
default:
|
default:
|
||||||
break
|
break
|
||||||
}
|
}*/
|
||||||
|
|
||||||
/*//ebay
|
/*//ebay
|
||||||
if(true){
|
if(true){
|
||||||
@ -569,22 +580,132 @@ class CategoriesTableViewController: UIViewController, UITableViewDelegate, UITa
|
|||||||
}
|
}
|
||||||
|
|
||||||
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
|
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
|
||||||
|
|
||||||
|
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.selectedCategory = self.categories[indexPath.row]
|
||||||
|
self.potentialEtsy = true
|
||||||
|
break
|
||||||
|
}
|
||||||
|
|
||||||
let cell: CategoryCell! = tableView.cellForRowAtIndexPath(indexPath) as! CategoryCell//tableView.dequeueReusableCellWithIdentifier("CategoryCell", forIndexPath: indexPath) as? CategoryCell
|
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)
|
|
||||||
|
|
||||||
alert.addAction(UIAlertAction(title: "Yes", style: .Default, handler: {(action: UIAlertAction!) in
|
if(self.ebayManager.isAuthorized ) {
|
||||||
|
var dict: Dictionary<String, Dictionary<String, AnyObject>> = (EbayWebServiceManager.settingsDictionary["categories"]!) as! Dictionary<String, Dictionary<String, AnyObject>>
|
||||||
|
|
||||||
|
let catDict = dict[self.selectedCategory]
|
||||||
|
if (catDict != nil && !(catDict!["isLeaf"] as! Bool)){
|
||||||
|
self.potentialEbay = true
|
||||||
self.navigateCategories()
|
self.navigateCategories()
|
||||||
}))
|
}
|
||||||
|
else{
|
||||||
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.performSegueWithIdentifier("NetworkSelectionSegue", sender: self)
|
||||||
}))
|
}
|
||||||
self.presentViewController(alert, animated: true, completion: nil)
|
|
||||||
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
self.performSegueWithIdentifier("NetworkSelectionSegue", sender: self)
|
self.performSegueWithIdentifier("NetworkSelectionSegue", sender: self)
|
||||||
@ -642,6 +763,20 @@ class CategoriesTableViewController: UIViewController, UITableViewDelegate, UITa
|
|||||||
fireManager: self.firManager, ebayManager: self.ebayManager, etsyManager: self.etsyManager )
|
fireManager: self.firManager, ebayManager: self.ebayManager, etsyManager: self.etsyManager )
|
||||||
|
|
||||||
(segue.destinationViewController as! NetworksTableViewController).setNetworkSelectFunctionality(true)
|
(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))
|
//print(self.categoryPicker.selectedRowInComponent(0))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -59,6 +59,7 @@ class CategoryPopUpController: UIViewController {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
self.categoryList = Dictionary<Int, AnyObject>()
|
||||||
self.ebayManager.getSubCategories(selectedCategory, detailLevel: self.parentCategory.count + 1, catCode: catCode, onCompletion: {
|
self.ebayManager.getSubCategories(selectedCategory, detailLevel: self.parentCategory.count + 1, catCode: catCode, onCompletion: {
|
||||||
(dict, error) -> Void in
|
(dict, error) -> Void in
|
||||||
var index = 0
|
var index = 0
|
||||||
|
|||||||
@ -40,6 +40,7 @@ class EbayWebServiceManager: NSObject {
|
|||||||
private var completion: ServiceResponse!
|
private var completion: ServiceResponse!
|
||||||
private var isGettingSubCategories: Bool = false
|
private var isGettingSubCategories: Bool = false
|
||||||
private var isRevisingListing: 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 = "<?xml version=\"1.0\" encoding=\"utf-8\"?>" +
|
let soapMessage = "<?xml version=\"1.0\" encoding=\"utf-8\"?>" +
|
||||||
"<GetSessionIDRequest xmlns=\"urn:ebay:apis:eBLBaseComponents\">" +
|
"<GetSessionIDRequest xmlns=\"urn:ebay:apis:eBLBaseComponents\">" +
|
||||||
@ -133,18 +134,21 @@ extension EbayWebServiceManager {
|
|||||||
let url = NSURL(string: self.baseURL)
|
let url = NSURL(string: self.baseURL)
|
||||||
let theRequest = NSMutableURLRequest(URL: url!)
|
let theRequest = NSMutableURLRequest(URL: url!)
|
||||||
theRequest.addValue("GetSessionID", forHTTPHeaderField: "X-EBAY-API-CALL-NAME")
|
theRequest.addValue("GetSessionID", forHTTPHeaderField: "X-EBAY-API-CALL-NAME")
|
||||||
|
self.completion = onComplete
|
||||||
self.requestMaker(soapMessage, theRequest: theRequest)
|
self.requestMaker(soapMessage, theRequest: theRequest)
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func deauthorizeApp(){
|
func deauthorizeApp(){
|
||||||
let soapMessage = "<?xml version=\"1.0\" encoding=\"utf-8\"?>" +
|
//@TODO: Add an alert to let user know if their account has not been deauthorized and keep them logged in.
|
||||||
|
var soapMessage = "<?xml version=\"1.0\" encoding=\"utf-8\"?>" +
|
||||||
"<RevokeTokenRequest xmlns=\"urn:ebay:apis:eBLBaseComponents\">" +
|
"<RevokeTokenRequest xmlns=\"urn:ebay:apis:eBLBaseComponents\">" +
|
||||||
"<RequesterCredentials>" +
|
"<RequesterCredentials>" +
|
||||||
"<eBayAuthToken>\(self.xmlResponseDictionary["eBayAuthToken"])</eBayAuthToken>" +
|
"<eBayAuthToken>\(self.xmlResponseDictionary["eBayAuthToken"]!)</eBayAuthToken>" +
|
||||||
"</RequesterCredentials></RevokeTokenRequest>"
|
"</RequesterCredentials>"
|
||||||
|
soapMessage = soapMessage + "<ErrorLanguage>en_US</ErrorLanguage>" +
|
||||||
|
"<WarningLevel>High</WarningLevel></RevokeTokenRequest>"
|
||||||
|
|
||||||
let url = NSURL(string: self.baseURL)
|
let url = NSURL(string: self.baseURL)
|
||||||
let theRequest = NSMutableURLRequest(URL: url!)
|
let theRequest = NSMutableURLRequest(URL: url!)
|
||||||
@ -207,8 +211,10 @@ extension EbayWebServiceManager {
|
|||||||
self.requestMaker(soapMessage, theRequest: theRequest)
|
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 = "<?xml version=\"1.0\" encoding=\"utf-8\"?>" +
|
var soapMessage = "<?xml version=\"1.0\" encoding=\"utf-8\"?>" +
|
||||||
"<ReviseItemRequest xmlns=\"urn:ebay:apis:eBLBaseComponents\">" +
|
"<ReviseItemRequest xmlns=\"urn:ebay:apis:eBLBaseComponents\">" +
|
||||||
"<RequesterCredentials>" +
|
"<RequesterCredentials>" +
|
||||||
@ -217,21 +223,26 @@ extension EbayWebServiceManager {
|
|||||||
|
|
||||||
soapMessage = soapMessage + "<ErrorLanguage>en_US</ErrorLanguage>" +
|
soapMessage = soapMessage + "<ErrorLanguage>en_US</ErrorLanguage>" +
|
||||||
"<Item>" +
|
"<Item>" +
|
||||||
"<ItemID>\(listingID)</ItemID>" +
|
"<ItemID>\(listingID)</ItemID>"
|
||||||
"<PictureDetails>" +
|
|
||||||
"<PictureURL>\(imageURL.stringByReplacingOccurrencesOfString("&", withString: "&"))</PictureURL>" +
|
for i in 0...(imageURLs.count - 1) {
|
||||||
"</PictureDetails>" +
|
soapMessage = soapMessage + "<PictureDetails>" +
|
||||||
"</Item></ReviseItemRequest>"
|
"<PictureURL>\(imageURLs[i].stringByReplacingOccurrencesOfString("&", withString: "&"))</PictureURL>" +
|
||||||
|
"</PictureDetails>"
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
soapMessage = soapMessage + "</Item></ReviseItemRequest>"
|
||||||
|
|
||||||
let url = NSURL(string: self.baseURL)
|
let url = NSURL(string: self.baseURL)
|
||||||
let theRequest = NSMutableURLRequest(URL: url!)
|
let theRequest = NSMutableURLRequest(URL: url!)
|
||||||
theRequest.addValue("ReviseItem", forHTTPHeaderField: "X-EBAY-API-CALL-NAME")
|
theRequest.addValue("ReviseItem", forHTTPHeaderField: "X-EBAY-API-CALL-NAME")
|
||||||
self.completion = onCompletion
|
self.completion = onCompletion
|
||||||
self.requestMaker(soapMessage, theRequest: theRequest)
|
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 dict = EbayWebServiceManager.settingsDictionary
|
||||||
var emailRetrievalGroup = dispatch_group_create()
|
var emailRetrievalGroup = dispatch_group_create()
|
||||||
var soapMessage = "<?xml version=\"1.0\" encoding=\"utf-8\"?>" +
|
var soapMessage = "<?xml version=\"1.0\" encoding=\"utf-8\"?>" +
|
||||||
@ -268,8 +279,15 @@ extension EbayWebServiceManager {
|
|||||||
"<ListingDuration>\(dict["listingDuration"] as! String!)</ListingDuration>" +
|
"<ListingDuration>\(dict["listingDuration"] as! String!)</ListingDuration>" +
|
||||||
"<ListingType>\(dict["listingType"] as! String!)</ListingType>" +
|
"<ListingType>\(dict["listingType"] as! String!)</ListingType>" +
|
||||||
"<PaymentMethods>\(dict["payment"] as! String!)</PaymentMethods>" +
|
"<PaymentMethods>\(dict["payment"] as! String!)</PaymentMethods>" +
|
||||||
"<PayPalEmailAddress>\(dict["paypal_email"] as! String!)</PayPalEmailAddress>" +
|
"<PayPalEmailAddress>\(dict["paypal_email"] as! String!)</PayPalEmailAddress><PictureDetails>"
|
||||||
"<PostalCode>\(dict["postalCode"] as! String!)</PostalCode>" +
|
|
||||||
|
for i in 0...(0/*imageUrls.count - 1*/) { //will replace with actual count once everything is working with images
|
||||||
|
soapMessage = soapMessage +
|
||||||
|
"<PictureURL>\(imageUrls[i].stringByReplacingOccurrencesOfString("&", withString: "&"))</PictureURL>"
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
soapMessage = soapMessage + "</PictureDetails><PostalCode>\(dict["postalCode"] as! String!)</PostalCode>" +
|
||||||
"<Quantity>\(params["quantity"] as String!)</Quantity>" +
|
"<Quantity>\(params["quantity"] as String!)</Quantity>" +
|
||||||
"<ReturnPolicy>" +
|
"<ReturnPolicy>" +
|
||||||
"<ReturnsAcceptedOption>\(dict["return"] as! String!)</ReturnsAcceptedOption>" +
|
"<ReturnsAcceptedOption>\(dict["return"] as! String!)</ReturnsAcceptedOption>" +
|
||||||
@ -285,7 +303,7 @@ extension EbayWebServiceManager {
|
|||||||
"</ShippingDetails>" +
|
"</ShippingDetails>" +
|
||||||
"<Site>US</Site>" +
|
"<Site>US</Site>" +
|
||||||
"</Item></AddItemRequest>"
|
"</Item></AddItemRequest>"
|
||||||
|
print(soapMessage)
|
||||||
let url = NSURL(string: self.baseURL)
|
let url = NSURL(string: self.baseURL)
|
||||||
let theRequest = NSMutableURLRequest(URL: url!)
|
let theRequest = NSMutableURLRequest(URL: url!)
|
||||||
theRequest.addValue("AddItem", forHTTPHeaderField: "X-EBAY-API-CALL-NAME")
|
theRequest.addValue("AddItem", forHTTPHeaderField: "X-EBAY-API-CALL-NAME")
|
||||||
@ -303,7 +321,7 @@ extension EbayWebServiceManager {
|
|||||||
let url = NSURL(string: self.baseURL)
|
let url = NSURL(string: self.baseURL)
|
||||||
let theRequest = NSMutableURLRequest(URL: url!)
|
let theRequest = NSMutableURLRequest(URL: url!)
|
||||||
theRequest.addValue("FetchToken", forHTTPHeaderField: "X-EBAY-API-CALL-NAME")
|
theRequest.addValue("FetchToken", forHTTPHeaderField: "X-EBAY-API-CALL-NAME")
|
||||||
|
//dispatch_group_enter(self.requestGroup)
|
||||||
self.requestMaker(soapMessage, theRequest: theRequest)
|
self.requestMaker(soapMessage, theRequest: theRequest)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -404,6 +422,7 @@ extension EbayWebServiceManager: NSXMLParserDelegate {
|
|||||||
print("account credentials saved")
|
print("account credentials saved")
|
||||||
NSUserDefaults.standardUserDefaults().setBool(true, forKey: "ebayAuthorized")
|
NSUserDefaults.standardUserDefaults().setBool(true, forKey: "ebayAuthorized")
|
||||||
self.isAuthorized = true
|
self.isAuthorized = true
|
||||||
|
//self.completion(nil, nil)
|
||||||
|
|
||||||
//Test authentication
|
//Test authentication
|
||||||
let soapmessage = "<?xml version=\"1.0\" encoding=\"utf-8\"?>" +
|
let soapmessage = "<?xml version=\"1.0\" encoding=\"utf-8\"?>" +
|
||||||
@ -465,7 +484,7 @@ extension EbayWebServiceManager: NSXMLParserDelegate {
|
|||||||
let url = NSURL(string: self.baseURL)
|
let url = NSURL(string: self.baseURL)
|
||||||
let theRequest = NSMutableURLRequest(URL: url!)
|
let theRequest = NSMutableURLRequest(URL: url!)
|
||||||
theRequest.addValue("GetCategories", forHTTPHeaderField: "X-EBAY-API-CALL-NAME")
|
theRequest.addValue("GetCategories", forHTTPHeaderField: "X-EBAY-API-CALL-NAME")
|
||||||
|
self.completion(nil, nil)
|
||||||
self.requestMaker(soapmessage, theRequest: theRequest)
|
self.requestMaker(soapmessage, theRequest: theRequest)
|
||||||
break
|
break
|
||||||
/*
|
/*
|
||||||
@ -487,6 +506,7 @@ extension EbayWebServiceManager: NSXMLParserDelegate {
|
|||||||
dict[string] = ["cat_id": self.catID, "isLeaf": false, "level": self.catLevel]
|
dict[string] = ["cat_id": self.catID, "isLeaf": false, "level": self.catLevel]
|
||||||
EbayWebServiceManager.settingsDictionary["categories"] = dict
|
EbayWebServiceManager.settingsDictionary["categories"] = dict
|
||||||
NSUserDefaults.standardUserDefaults().setObject(EbayWebServiceManager.settingsDictionary, forKey: "ebaySettings")
|
NSUserDefaults.standardUserDefaults().setObject(EbayWebServiceManager.settingsDictionary, forKey: "ebaySettings")
|
||||||
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
if "\(self.catDetailLevel)" == self.catLevel {
|
if "\(self.catDetailLevel)" == self.catLevel {
|
||||||
|
|||||||
@ -52,8 +52,6 @@ class EtsyRESTAPIManager: NSObject {
|
|||||||
"accessTokenUrl": "https://openapi.etsy.com/v2/oauth/access_token?",
|
"accessTokenUrl": "https://openapi.etsy.com/v2/oauth/access_token?",
|
||||||
"responseType": "token"])
|
"responseType": "token"])
|
||||||
|
|
||||||
|
|
||||||
//FIXME: something is wrong when here when logging back in with a diff user
|
|
||||||
if(self.isAuthorized){
|
if(self.isAuthorized){
|
||||||
let dictionary = Locksmith.loadDataForUserAccount(self.userEmail, inService: "vendoo_oauth_etsy")
|
let dictionary = Locksmith.loadDataForUserAccount(self.userEmail, inService: "vendoo_oauth_etsy")
|
||||||
let oauthDictionary = dictionary?["etsy_oauth"] as? Dictionary<String, AnyObject!>
|
let oauthDictionary = dictionary?["etsy_oauth"] as? Dictionary<String, AnyObject!>
|
||||||
|
|||||||
@ -90,6 +90,7 @@ extension FacebookGraphAPIManager {
|
|||||||
print(result.token)
|
print(result.token)
|
||||||
print(result.grantedPermissions)
|
print(result.grantedPermissions)
|
||||||
NSUserDefaults.standardUserDefaults().setBool(true, forKey:"fbAuthorized")
|
NSUserDefaults.standardUserDefaults().setBool(true, forKey:"fbAuthorized")
|
||||||
|
self.isAuthorized = true
|
||||||
|
|
||||||
FBSDKAccessToken.setCurrentAccessToken(result.token)
|
FBSDKAccessToken.setCurrentAccessToken(result.token)
|
||||||
|
|
||||||
@ -103,6 +104,10 @@ extension FacebookGraphAPIManager {
|
|||||||
(result, error) -> Void in
|
(result, error) -> Void in
|
||||||
|
|
||||||
NSLog("Logged in with publish permisions")
|
NSLog("Logged in with publish permisions")
|
||||||
|
NSUserDefaults.standardUserDefaults().setBool(true, forKey:"fbAuthorized")
|
||||||
|
self.isAuthorized = true
|
||||||
|
|
||||||
|
|
||||||
})
|
})
|
||||||
|
|
||||||
})
|
})
|
||||||
|
|||||||
@ -18,24 +18,21 @@ class FirebaseManager: NSObject {
|
|||||||
let ref = FIRDatabase.database().reference()
|
let ref = FIRDatabase.database().reference()
|
||||||
let user_email = ((NSUserDefaults.standardUserDefaults().objectForKey("email") as? String)!).stringByReplacingOccurrencesOfString(".", withString: "_")
|
let user_email = ((NSUserDefaults.standardUserDefaults().objectForKey("email") as? String)!).stringByReplacingOccurrencesOfString(".", withString: "_")
|
||||||
let storage = FIRStorage.storage()
|
let storage = FIRStorage.storage()
|
||||||
let indicator = TYMActivityIndicatorView.init(activityIndicatorStyle: (TYMActivityIndicatorViewStyle.Normal))
|
var indicator = UIActivityIndicatorView(activityIndicatorStyle: UIActivityIndicatorViewStyle.WhiteLarge)
|
||||||
|
|
||||||
//let key: String!
|
//let key: String!
|
||||||
|
|
||||||
override init(){
|
override init(){
|
||||||
super.init()
|
super.init()
|
||||||
|
indicator.color = UIColor.blueColor()
|
||||||
|
|
||||||
|
|
||||||
//check if user has been created
|
//check if user has been created
|
||||||
self.ref.child("Users").observeSingleEventOfType(.Value, withBlock: { snapshot in
|
self.ref.child("Users").observeSingleEventOfType(.Value, withBlock: { snapshot in
|
||||||
// do some stuff once
|
// do some stuff once
|
||||||
|
|
||||||
if(!snapshot.hasChild(self.user_email)){
|
if(!snapshot.hasChild(self.user_email)){
|
||||||
let user = ["user_Listings": "","listing_Keys": "","favorite_listings_keys": ""]
|
let user = ["name": (NSUserDefaults.standardUserDefaults().objectForKey("name") as? String)!, "user_Listings": "", "listing_Keys": "", "favorite_listings_keys": ""]
|
||||||
// let userUpdates = ["/Users/\((NSUserDefaults.standardUserDefaults().objectForKey("email") as? String)!)" : user]
|
|
||||||
self.ref.child("Users").child(self.user_email).setValue(user)
|
self.ref.child("Users").child(self.user_email).setValue(user)
|
||||||
|
|
||||||
//self.ref.child("Users").setValue(["email": (NSUserDefaults.standardUserDefaults().objectForKey("email") as? String)!])
|
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|||||||
@ -23,15 +23,21 @@ class HomeViewController: UITabBarController {
|
|||||||
|
|
||||||
// Do any additional setup after loading the view.
|
// Do any additional setup after loading the view.
|
||||||
dispatch_async(dispatch_get_main_queue(), {
|
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
|
(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 {
|
if listingDict != nil {
|
||||||
dispatch_async(dispatch_get_main_queue(), {
|
dispatch_async(dispatch_get_main_queue(), {
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
for (key, values) in listingDict! {
|
for (key, values) in listingDict! {
|
||||||
let serviceGroup: dispatch_group_t = dispatch_group_create()
|
let serviceGroup: dispatch_group_t = dispatch_group_create()
|
||||||
self.firebaseManager.ref.observeSingleEventOfType(.Value, withBlock: { snapshot in
|
self.firebaseManager.ref.observeSingleEventOfType(.Value, withBlock: { snapshot in
|
||||||
@ -54,13 +60,13 @@ class HomeViewController: UITabBarController {
|
|||||||
var listingImages: [UIImage] = [mainImage!]
|
var listingImages: [UIImage] = [mainImage!]
|
||||||
var count = 0
|
var count = 0
|
||||||
//Get supporting images
|
//Get supporting images
|
||||||
for i in 2...5 {
|
for i in 1...4 {
|
||||||
let supportListingImg1 = storageRef.child("images/\(key)/\(i).jpg")
|
let supportListingImg1 = storageRef.child("images/\(key)/\(i).jpg")
|
||||||
supportListingImg1.dataWithMaxSize(10 * 1024 * 1024, completion: {
|
supportListingImg1.dataWithMaxSize(10 * 1024 * 1024, completion: {
|
||||||
(data1, error) -> Void in
|
(data1, error) -> Void in
|
||||||
|
|
||||||
if(error != nil){
|
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{
|
}else{
|
||||||
listingImages.append(UIImage(data: data1!)!)
|
listingImages.append(UIImage(data: data1!)!)
|
||||||
}
|
}
|
||||||
@ -80,6 +86,7 @@ class HomeViewController: UITabBarController {
|
|||||||
self.userListings.append(
|
self.userListings.append(
|
||||||
Listing(itemTitle: (listingInfo!["listingTitle"] as? String)!,
|
Listing(itemTitle: (listingInfo!["listingTitle"] as? String)!,
|
||||||
itemCategory: listingInfo!["listingCategory"] as? String,
|
itemCategory: listingInfo!["listingCategory"] as? String,
|
||||||
|
itemQuantity: (listingInfo!["listingQuantity"] as? String)!,
|
||||||
itemPrice: listingInfo!["listingPrice"] as? String,
|
itemPrice: listingInfo!["listingPrice"] as? String,
|
||||||
itemDescription: listingInfo!["listingDescription"] as? String,
|
itemDescription: listingInfo!["listingDescription"] as? String,
|
||||||
itemImages: listingImages,
|
itemImages: listingImages,
|
||||||
@ -105,6 +112,8 @@ class HomeViewController: UITabBarController {
|
|||||||
|
|
||||||
|
|
||||||
})
|
})
|
||||||
|
}else {
|
||||||
|
NSNotificationCenter.defaultCenter().postNotificationName("finished_fetching_listings", object: nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -37,6 +37,8 @@ class ItemImagePickerViewController: UIViewController {
|
|||||||
private var currImageSelected: UIImageView!
|
private var currImageSelected: UIImageView!
|
||||||
private var currUILabel: UILabel!
|
private var currUILabel: UILabel!
|
||||||
private var imageIndex: Int!
|
private var imageIndex: Int!
|
||||||
|
private var isEditing: Bool = false
|
||||||
|
private var currentInformation: Dictionary<String, AnyObject>!
|
||||||
override func viewDidLoad() {
|
override func viewDidLoad() {
|
||||||
super.viewDidLoad()
|
super.viewDidLoad()
|
||||||
|
|
||||||
@ -52,19 +54,49 @@ class ItemImagePickerViewController: UIViewController {
|
|||||||
self.itemPrice.delegate = self
|
self.itemPrice.delegate = self
|
||||||
self.picker.delegate = self
|
self.picker.delegate = self
|
||||||
|
|
||||||
// Input data into the Array:
|
|
||||||
pickerData = ["Category 1", "Category 2", "Category 3", "Category 4", "Category 5", "Category 6"]
|
|
||||||
|
|
||||||
let tapGestureMain = UITapGestureRecognizer(target: self, action: #selector(ItemImagePickerViewController.takePicture))
|
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)
|
self.view.addGestureRecognizer(tapGestureMain)
|
||||||
//self.possibleItemImageMain.addGestureRecognizer(tapGestureMain)
|
|
||||||
//self.possibleItemImage2.addGestureRecognizer(tapGesture2)
|
|
||||||
//self.possibleItemImage3.addGestureRecognizer(tapGesture)
|
|
||||||
//self.possibleItemImage4.addGestureRecognizer(tapGesture)
|
|
||||||
//self.possibleItemImage5.addGestureRecognizer(tapGesture)
|
|
||||||
|
|
||||||
|
if(self.isEditing) {
|
||||||
|
self.itemName.text = self.currentInformation["title"] as? String
|
||||||
|
self.itemDescription.text = self.currentInformation["description"] as? String
|
||||||
|
self.itemQuantity.text = self.currentInformation["quantity"] as? String
|
||||||
|
self.itemPrice.text = self.currentInformation["price"] as? String
|
||||||
|
|
||||||
|
//@FIXME: Cancel button not changing to Back button label
|
||||||
|
dispatch_async(dispatch_get_main_queue(), {
|
||||||
|
self.cancelButton.titleLabel?.text = "Back"
|
||||||
|
})
|
||||||
|
|
||||||
|
var images = (self.currentInformation["images"] as? [UIImage])!
|
||||||
|
for i in 0...(images.count - 1) {
|
||||||
|
switch i {
|
||||||
|
case 0:
|
||||||
|
self.possibleItemImageMain.image = images[i]
|
||||||
|
self.itemImagesSelections[i] = true
|
||||||
|
break
|
||||||
|
case 1:
|
||||||
|
self.possibleItemImage2.image = images[i]
|
||||||
|
self.itemImagesSelections[i] = true
|
||||||
|
break
|
||||||
|
case 2:
|
||||||
|
self.possibleItemImage3.image = images[i]
|
||||||
|
self.itemImagesSelections[i] = true
|
||||||
|
break
|
||||||
|
case 3:
|
||||||
|
self.possibleItemImage4.image = images[i]
|
||||||
|
self.itemImagesSelections[i] = true
|
||||||
|
break
|
||||||
|
case 4:
|
||||||
|
self.possibleItemImage5.image = images[i]
|
||||||
|
self.itemImagesSelections[i] = true
|
||||||
|
break
|
||||||
|
default:
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -79,7 +111,12 @@ class ItemImagePickerViewController: UIViewController {
|
|||||||
self.tabBarController?.tabBar.hidden = true
|
self.tabBarController?.tabBar.hidden = true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func toggleEditingMode(dictionary: Dictionary<String, AnyObject>?){
|
||||||
|
if(!self.isEditing) {
|
||||||
|
self.currentInformation = dictionary!
|
||||||
|
}
|
||||||
|
self.isEditing = !self.isEditing
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -126,12 +163,15 @@ extension ItemImagePickerViewController {
|
|||||||
|
|
||||||
dict["pictures"] = images
|
dict["pictures"] = images
|
||||||
(segue.destinationViewController as! CategoriesTableViewController).setListingDictionary(dict)
|
(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)!,
|
(segue.destinationViewController as! CategoriesTableViewController).setManagers(((self.tabBarController as? HomeViewController)?.fbGraphManager)!,
|
||||||
fireManager: ((self.tabBarController as? HomeViewController)?.firebaseManager)!, ebayManager: ((self.tabBarController as? HomeViewController)?.ebayGraphManager)!,
|
fireManager: ((self.tabBarController as? HomeViewController)?.firebaseManager)!, ebayManager: ((self.tabBarController as? HomeViewController)?.ebayGraphManager)!,
|
||||||
etsyManager: ((self.tabBarController as? HomeViewController)?.etsyManager)!)
|
etsyManager: ((self.tabBarController as? HomeViewController)?.etsyManager)!)
|
||||||
|
}
|
||||||
//(segue.destinationViewController as! NetworksTableViewController).setNetworkSelectFunctionality(true)
|
|
||||||
//print(self.categoryPicker.selectedRowInComponent(0))
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -185,7 +225,6 @@ extension ItemImagePickerViewController: UIImagePickerControllerDelegate, UINavi
|
|||||||
|
|
||||||
case 2:
|
case 2:
|
||||||
if(self.itemImagesSelections[0] && self.itemImagesSelections[1]) {
|
if(self.itemImagesSelections[0] && self.itemImagesSelections[1]) {
|
||||||
//self.itemImagesSelections[2] = true
|
|
||||||
viewsWereSaved[0] = true
|
viewsWereSaved[0] = true
|
||||||
|
|
||||||
self.imageIndex = 2
|
self.imageIndex = 2
|
||||||
@ -201,7 +240,6 @@ extension ItemImagePickerViewController: UIImagePickerControllerDelegate, UINavi
|
|||||||
case 3:
|
case 3:
|
||||||
if(self.itemImagesSelections[0] && self.itemImagesSelections[1]
|
if(self.itemImagesSelections[0] && self.itemImagesSelections[1]
|
||||||
&& self.itemImagesSelections[2]) {
|
&& self.itemImagesSelections[2]) {
|
||||||
//self.itemImagesSelections[3] = true
|
|
||||||
viewsWereSaved[0] = true
|
viewsWereSaved[0] = true
|
||||||
|
|
||||||
self.imageIndex = 3
|
self.imageIndex = 3
|
||||||
@ -217,7 +255,6 @@ extension ItemImagePickerViewController: UIImagePickerControllerDelegate, UINavi
|
|||||||
case 4:
|
case 4:
|
||||||
if(self.itemImagesSelections[0] && self.itemImagesSelections[1]
|
if(self.itemImagesSelections[0] && self.itemImagesSelections[1]
|
||||||
&& self.itemImagesSelections[2] && self.itemImagesSelections[3]) {
|
&& self.itemImagesSelections[2] && self.itemImagesSelections[3]) {
|
||||||
//self.itemImagesSelections[4] = true
|
|
||||||
viewsWereSaved[0] = true
|
viewsWereSaved[0] = true
|
||||||
|
|
||||||
self.imageIndex = 4
|
self.imageIndex = 4
|
||||||
@ -244,20 +281,6 @@ extension ItemImagePickerViewController: UIImagePickerControllerDelegate, UINavi
|
|||||||
viewsWereSaved[1] = true
|
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;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -405,7 +428,6 @@ extension ItemImagePickerViewController {
|
|||||||
//save listing to private user path in firebase
|
//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 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
|
var counter = -1
|
||||||
for bool in self.itemImagesSelections {
|
for bool in self.itemImagesSelections {
|
||||||
if bool {
|
if bool {
|
||||||
@ -418,8 +440,8 @@ extension ItemImagePickerViewController {
|
|||||||
"seller email": (NSUserDefaults.standardUserDefaults().objectForKey("email") as? String)!,
|
"seller email": (NSUserDefaults.standardUserDefaults().objectForKey("email") as? String)!,
|
||||||
"listingTitle": self.itemName.text,
|
"listingTitle": self.itemName.text,
|
||||||
"listingPrice": self.itemPrice.text,
|
"listingPrice": self.itemPrice.text,
|
||||||
"listingCategory": category,
|
|
||||||
"listingDescription": self.itemDescription.text,
|
"listingDescription": self.itemDescription.text,
|
||||||
|
"listingQuantity": self.itemQuantity.text!,
|
||||||
"numberOfSupportingImages" : counter,
|
"numberOfSupportingImages" : counter,
|
||||||
"isListingDraft": true,
|
"isListingDraft": true,
|
||||||
"networks": ["areNetworksChosen": false]]
|
"networks": ["areNetworksChosen": false]]
|
||||||
@ -492,9 +514,13 @@ extension ItemImagePickerViewController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@IBAction func cancelNewListing(sender: AnyObject) {
|
@IBAction func cancelNewListing(sender: AnyObject) {
|
||||||
//nil out all data user may have entered so that when they reopen new listing page
|
//@FIXME: nil out all data user may have entered so that when they reopen new listing page it initialized to a fresh screen.
|
||||||
//it initialized to a fresh screen.
|
|
||||||
|
if(!self.isEditing) {
|
||||||
self.tabBarController?.selectedIndex = 0
|
self.tabBarController?.selectedIndex = 0
|
||||||
|
}else{
|
||||||
|
self.presentingViewController?.dismissViewControllerAnimated(true, completion: nil)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -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
|
This class will be used to retrieve and manipulate data seen by the end user for he/she's item listings
|
||||||
*/
|
*/
|
||||||
import UIKit
|
import UIKit
|
||||||
|
import TYMActivityIndicatorView
|
||||||
|
|
||||||
class ItemTableViewController: UIViewController {
|
class ItemTableViewController: UIViewController {
|
||||||
|
|
||||||
@ -19,6 +20,8 @@ class ItemTableViewController: UIViewController {
|
|||||||
|
|
||||||
@IBOutlet weak var menuButton: UIBarButtonItem!
|
@IBOutlet weak var menuButton: UIBarButtonItem!
|
||||||
|
|
||||||
|
var loadingView: UIView!
|
||||||
|
var selectedListing: Listing!
|
||||||
override func viewDidLoad() {
|
override func viewDidLoad() {
|
||||||
super.viewDidLoad()
|
super.viewDidLoad()
|
||||||
|
|
||||||
@ -39,10 +42,18 @@ class ItemTableViewController: UIViewController {
|
|||||||
menuButton.action = "revealToggle:"
|
menuButton.action = "revealToggle:"
|
||||||
self.view.addGestureRecognizer(self.revealViewController().panGestureRecognizer())
|
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()
|
(self.tabBarController as? HomeViewController)?.firebaseManager.indicator.startAnimating()
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -58,6 +69,7 @@ class ItemTableViewController: UIViewController {
|
|||||||
|
|
||||||
func stopIndicator(){
|
func stopIndicator(){
|
||||||
(self.tabBarController as? HomeViewController)?.firebaseManager.indicator.stopAnimating()
|
(self.tabBarController as? HomeViewController)?.firebaseManager.indicator.stopAnimating()
|
||||||
|
self.loadingView.removeFromSuperview()
|
||||||
self.itemTable.reloadData()
|
self.itemTable.reloadData()
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -76,6 +88,35 @@ extension ItemTableViewController {
|
|||||||
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
|
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
|
||||||
// Get the new view controller using segue.destinationViewController.
|
// Get the new view controller using segue.destinationViewController.
|
||||||
// Pass the selected object to the new view controller.
|
// 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"])!){
|
if(!((self.tabBarController as? HomeViewController)!.userListings[indexPath.row].networks["areNetworksChosen"])!){
|
||||||
@ -140,6 +183,11 @@ extension ItemTableViewController: UITableViewDataSource{
|
|||||||
}
|
}
|
||||||
return cell
|
return cell
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
|
||||||
|
self.selectedListing = (self.tabBarController as? HomeViewController)?.userListings[indexPath.row]
|
||||||
|
self.performSegueWithIdentifier("ItemDetailSegue", sender: self)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -15,17 +15,19 @@ class Listing : NSObject {
|
|||||||
var category: String!
|
var category: String!
|
||||||
var price: String!
|
var price: String!
|
||||||
var desc: String!
|
var desc: String!
|
||||||
|
var quantity: String!
|
||||||
var isDraft: Bool!
|
var isDraft: Bool!
|
||||||
var images: [UIImage]!
|
var images: [UIImage]!
|
||||||
var key: String!
|
var key: String!
|
||||||
var networks: Dictionary<String, Bool>!
|
var networks: Dictionary<String, Bool>!
|
||||||
|
|
||||||
init(itemTitle:String, itemCategory: String!, itemPrice: String!, itemDescription: String!, itemImages: [UIImage], isDraftListing: Bool, itemKey: String, networksSellingOn: Dictionary<String, Bool>){
|
init(itemTitle:String, itemCategory: String!, itemQuantity: String!, itemPrice: String!, itemDescription: String!, itemImages: [UIImage], isDraftListing: Bool, itemKey: String, networksSellingOn: Dictionary<String, Bool>){
|
||||||
|
|
||||||
self.title = itemTitle
|
self.title = itemTitle
|
||||||
self.category = itemCategory
|
self.category = itemCategory
|
||||||
self.price = itemPrice
|
self.price = itemPrice
|
||||||
self.desc = itemDescription
|
self.desc = itemDescription
|
||||||
|
self.quantity = itemQuantity
|
||||||
self.isDraft = isDraftListing
|
self.isDraft = isDraftListing
|
||||||
self.images = itemImages
|
self.images = itemImages
|
||||||
self.key = itemKey
|
self.key = itemKey
|
||||||
|
|||||||
@ -14,18 +14,28 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import UIKit
|
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
|
//@TODO: Need to make multiple images work for etsy and facebook and need to implement multiple images saving to firebase
|
||||||
class ListingPreviewViewController: UIViewController {
|
class ListingPreviewViewController: UIViewController {
|
||||||
|
|
||||||
//IBOutlets
|
//IBOutlets
|
||||||
@IBOutlet weak var containerScrollView: UIScrollView!
|
@IBOutlet weak var containerScrollView: UIScrollView!
|
||||||
@IBOutlet weak var itemQuantity: UITextView!
|
@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 itemTitle: UITextView!
|
||||||
@IBOutlet weak var itemDescription: UITextView!
|
@IBOutlet weak var itemDescription: UITextView!
|
||||||
@IBOutlet weak var itemPrice: UITextView!
|
@IBOutlet weak var itemPrice: UITextView!
|
||||||
@IBOutlet weak var itemCategory: UITextView!
|
@IBOutlet weak var itemCategory: UITextView!
|
||||||
@IBOutlet weak var networks: UICollectionView!
|
@IBOutlet weak var networks: UICollectionView!
|
||||||
|
@IBOutlet weak var publishBtn: UIButton!
|
||||||
|
@IBOutlet weak var edit_button: UIButton!
|
||||||
|
@IBOutlet weak var cancel_backBtn: UIButton!
|
||||||
|
|
||||||
//class variables
|
//class variables
|
||||||
private var networksDictionary: Dictionary<String, Bool> = Dictionary<String, Bool>()
|
private var networksDictionary: Dictionary<String, Bool> = Dictionary<String, Bool>()
|
||||||
@ -37,10 +47,30 @@ class ListingPreviewViewController: UIViewController {
|
|||||||
private var alert = UIAlertController(title: "Listing Published", message: "Your listing has been published", preferredStyle: .Alert)
|
private var alert = UIAlertController(title: "Listing Published", message: "Your listing has been published", preferredStyle: .Alert)
|
||||||
private var lastListingKey: String!
|
private var lastListingKey: String!
|
||||||
private var newInProgressListing: Dictionary<String,AnyObject> = Dictionary<String, AnyObject>()
|
private var newInProgressListing: Dictionary<String,AnyObject> = Dictionary<String, AnyObject>()
|
||||||
|
var loadingView: UIView!
|
||||||
|
private var itemViewState = ""
|
||||||
|
|
||||||
override func viewDidLoad() {
|
override func viewDidLoad() {
|
||||||
super.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.
|
// Do any additional setup after loading the view.
|
||||||
|
|
||||||
// Initialization code
|
// Initialization code
|
||||||
@ -62,7 +92,27 @@ class ListingPreviewViewController: UIViewController {
|
|||||||
func setListing(){
|
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.itemTitle.text = self.itemListingDictionary["title"] as! String
|
||||||
self.itemDescription.text = self.itemListingDictionary["description"] as! String
|
self.itemDescription.text = self.itemListingDictionary["description"] as! String
|
||||||
self.itemPrice.text = self.itemListingDictionary["price"] 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
|
self.itemQuantity.text = self.itemListingDictionary["quantity"] as! String
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func setViewState(state: String) {
|
||||||
|
self.itemViewState = state
|
||||||
|
}
|
||||||
|
|
||||||
func setDictionary(netdictionary:Dictionary<String, Bool>, itemdictionary: Dictionary<String, AnyObject!>){
|
func setDictionary(netdictionary:Dictionary<String, Bool>, itemdictionary: Dictionary<String, AnyObject!>){
|
||||||
self.networksDictionary = netdictionary
|
self.networksDictionary = netdictionary
|
||||||
self.itemListingDictionary = itemdictionary
|
self.itemListingDictionary = itemdictionary
|
||||||
@ -82,7 +136,14 @@ class ListingPreviewViewController: UIViewController {
|
|||||||
self.etsyManager = etsyManager
|
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
|
// MARK: - Navigation
|
||||||
|
|
||||||
@ -92,12 +153,23 @@ class ListingPreviewViewController: UIViewController {
|
|||||||
// Pass the selected object to the new view controller.
|
// Pass the selected object to the new view controller.
|
||||||
|
|
||||||
if(segue.identifier == "EditListingSegue"){
|
if(segue.identifier == "EditListingSegue"){
|
||||||
|
var imageData: [UIImage] = []
|
||||||
|
for imageView in (self.itemListingDictionary["pictures"] as? [UIImageView])! {
|
||||||
|
imageData.append(imageView.image!)
|
||||||
|
}
|
||||||
|
|
||||||
|
let dict: Dictionary<String, AnyObject> = ["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)!
|
let vc = (segue.destinationViewController as? ItemImagePickerViewController)!
|
||||||
vc.itemName.text? = self.itemTitle.text
|
vc.toggleEditingMode(dict)
|
||||||
vc.itemPrice.text? = self.itemPrice.text
|
|
||||||
vc.itemDescription.text? = self.itemDescription.text
|
|
||||||
vc.possibleItemImageMain = self.itemPicture
|
|
||||||
vc.itemQuantity.text? = self.itemQuantity.text
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -127,11 +199,30 @@ extension Dictionary {
|
|||||||
|
|
||||||
//MARK: - IBActions
|
//MARK: - IBActions
|
||||||
extension ListingPreviewViewController {
|
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) {
|
@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)
|
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)}))
|
alert.addAction(UIAlertAction(title: "OK", style: .Default, handler:{(action: UIAlertAction!) in alert.dismissViewControllerAnimated(true, completion: nil)}))
|
||||||
|
|
||||||
@ -143,112 +234,14 @@ extension ListingPreviewViewController {
|
|||||||
let newListingRef = self.firManager.ref.child("Users").child("\(self.firManager.user_email)").child("user_Listings").childByAutoId()
|
let newListingRef = self.firManager.ref.child("Users").child("\(self.firManager.user_email)").child("user_Listings").childByAutoId()
|
||||||
let postingGroup: dispatch_group_t = dispatch_group_create()
|
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
|
//post to ebay
|
||||||
if(self.networksDictionary["ebay"]!){
|
/*if(self.networksDictionary["ebay"]!){
|
||||||
dispatch_group_enter(postingGroup)
|
dispatch_group_enter(postingGroup)
|
||||||
var categoryCode: String!
|
|
||||||
var dict = EbayWebServiceManager.settingsDictionary["categories"]!
|
|
||||||
switch self.itemCategory.text {
|
|
||||||
case "Antiques":
|
|
||||||
categoryCode = (dict["Antiques"] as! Dictionary<String, AnyObject>)["cat_id"] as! String
|
|
||||||
break
|
|
||||||
case "Art":
|
|
||||||
categoryCode = (dict["Art"] as! Dictionary<String, AnyObject>)["cat_id"] as! String
|
|
||||||
break
|
|
||||||
case "Baby":
|
|
||||||
categoryCode = (dict["Baby"] as! Dictionary<String, AnyObject>)["cat_id"] as! String
|
|
||||||
break
|
|
||||||
case "Bath, Beauty & Health":
|
|
||||||
categoryCode = (dict["Health and Beauty"] as! Dictionary<String, AnyObject>)["cat_id"] as! String
|
|
||||||
break
|
|
||||||
case "Books":
|
|
||||||
categoryCode = (dict["Books"] as! Dictionary<String, AnyObject>)["cat_id"] as! String
|
|
||||||
break
|
|
||||||
case "Business & Industrial":
|
|
||||||
categoryCode = (dict["Business and Industrial"] as! Dictionary<String, AnyObject>)["cat_id"] as! String
|
|
||||||
break
|
|
||||||
case "Cameras & Photo":
|
|
||||||
categoryCode = (dict["Cameras and Photo"] as! Dictionary<String, AnyObject>)["cat_id"] as! String
|
|
||||||
break
|
|
||||||
case "Cell Phones & Accessories":
|
|
||||||
categoryCode = (dict["Cell Phones and Accessories"] as! Dictionary<String, AnyObject>)["cat_id"] as! String
|
|
||||||
break
|
|
||||||
case "Clothing & Shoes":
|
|
||||||
categoryCode = (dict["Clothing, Shoes and Accessories"] as! Dictionary<String, AnyObject>)["cat_id"] as! String
|
|
||||||
break
|
|
||||||
case "Coins & Paper Money":
|
|
||||||
categoryCode = (dict["Coins and Paper Money"] as! Dictionary<String, AnyObject>)["cat_id"] as! String
|
|
||||||
break
|
|
||||||
case "Collectibles":
|
|
||||||
categoryCode = (dict["Collectibles"] as! Dictionary<String, AnyObject>)["cat_id"] as! String
|
|
||||||
break
|
|
||||||
case "Computers/Tablets and Networking":
|
|
||||||
categoryCode = (dict["Computers/Tablets and Networking"] as! Dictionary<String, AnyObject>)["cat_id"] as! String
|
|
||||||
break
|
|
||||||
case "Consumer Electronics":
|
|
||||||
categoryCode = (dict["Consumer Electronics"] as! Dictionary<String, AnyObject>)["cat_id"] as! String
|
|
||||||
break
|
|
||||||
case "Crafts":
|
|
||||||
categoryCode = (dict["Crafts"] as! Dictionary<String, AnyObject>)["cat_id"] as! String
|
|
||||||
break
|
|
||||||
case "Dolls & Miniatures":
|
|
||||||
categoryCode = (dict["Dolls and Bears"] as! Dictionary<String, AnyObject>)["cat_id"] as! String
|
|
||||||
break
|
|
||||||
case "DVDs & Movies":
|
|
||||||
categoryCode = (dict["DVDs & Movies"] as! Dictionary<String, AnyObject>)["cat_id"] as! String
|
|
||||||
break
|
|
||||||
case "Entertainment Memorabilia":
|
|
||||||
categoryCode = (dict["Entertainment Memorabilia"] as! Dictionary<String, AnyObject>)["cat_id"] as! String
|
|
||||||
break
|
|
||||||
case "Everything Else":
|
|
||||||
categoryCode = (dict["Everything Else"] as! Dictionary<String, AnyObject>)["cat_id"] as! String
|
|
||||||
break
|
|
||||||
case "Gift Cards & Coupons":
|
|
||||||
categoryCode = (dict["Gift Cards and Coupons"] as! Dictionary<String, AnyObject>)["cat_id"] as! String
|
|
||||||
break
|
|
||||||
case "Home/Houseware & Garden":
|
|
||||||
categoryCode = (dict["Coins and Paper Money"] as! Dictionary<String, AnyObject>)["cat_id"] as! String
|
|
||||||
break
|
|
||||||
case "Jewelry & Watches":
|
|
||||||
categoryCode = (dict["Jewelry and Watches"] as! Dictionary<String, AnyObject>)["cat_id"] as! String
|
|
||||||
break
|
|
||||||
case "Musical Instruments & Gear":
|
|
||||||
categoryCode = (dict["Musical Instruments and Gear"] as! Dictionary<String, AnyObject>)["cat_id"] as! String
|
|
||||||
break
|
|
||||||
case "Pet Supplies":
|
|
||||||
categoryCode = (dict["Pet Supplies"] as! Dictionary<String, AnyObject>)["cat_id"] as! String
|
|
||||||
break
|
|
||||||
case "Pottery & Glass":
|
|
||||||
categoryCode = (dict["Pottery and Glass"] as! Dictionary<String, AnyObject>)["cat_id"] as! String
|
|
||||||
break
|
|
||||||
case "Real Estate":
|
|
||||||
categoryCode = (dict["Real Estate"] as! Dictionary<String, AnyObject>)["cat_id"] as! String
|
|
||||||
break
|
|
||||||
case "Specialty Services":
|
|
||||||
categoryCode = (dict["Specialty Services"] as! Dictionary<String, AnyObject>)["cat_id"] as! String
|
|
||||||
break
|
|
||||||
case "Sporting Goods":
|
|
||||||
categoryCode = (dict["Sporting Goods"] as! Dictionary<String, AnyObject>)["cat_id"] as! String
|
|
||||||
break
|
|
||||||
case "Sports Memorabilia & Fan Shop":
|
|
||||||
categoryCode = (dict["Sports Mem, Cards and Fan Shop"] as! Dictionary<String, AnyObject>)["cat_id"] as! String
|
|
||||||
break
|
|
||||||
case "Tickets & Experiences":
|
|
||||||
categoryCode = (dict["Tickets and Experiences"] as! Dictionary<String, AnyObject>)["cat_id"] as! String
|
|
||||||
break
|
|
||||||
case "Toys & Hobbies":
|
|
||||||
categoryCode = (dict["Toys and Hobbies"] as! Dictionary<String, AnyObject>)["cat_id"] as! String
|
|
||||||
break
|
|
||||||
case "Travel":
|
|
||||||
categoryCode = (dict["Travel"] as! Dictionary<String, AnyObject>)["cat_id"] as! String
|
|
||||||
break
|
|
||||||
case "Video Games & Consoles":
|
|
||||||
categoryCode = (dict["Video Games and Consoles"] as! Dictionary<String, AnyObject>)["cat_id"] as! String
|
|
||||||
break
|
|
||||||
default:
|
|
||||||
break
|
|
||||||
}
|
|
||||||
|
|
||||||
let body: [String: String] = [ "title": self.itemTitle.text,
|
let body: [String: String] = [ "title": self.itemTitle.text,
|
||||||
"quantity":self.itemQuantity.text,
|
"quantity":self.itemQuantity.text,
|
||||||
@ -267,7 +260,7 @@ extension ListingPreviewViewController {
|
|||||||
self.newInProgressListing["networkIDs"] = networkIDs
|
self.newInProgressListing["networkIDs"] = networkIDs
|
||||||
dispatch_group_leave(postingGroup)
|
dispatch_group_leave(postingGroup)
|
||||||
})
|
})
|
||||||
}
|
}*/
|
||||||
|
|
||||||
|
|
||||||
//post to amazon
|
//post to amazon
|
||||||
@ -404,7 +397,7 @@ extension ListingPreviewViewController {
|
|||||||
|
|
||||||
let imageBody = ["listing_id": networkIDs["etsy"] as! Int,
|
let imageBody = ["listing_id": networkIDs["etsy"] as! Int,
|
||||||
//"type":"image/jpg",
|
//"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: {
|
self.etsyManager.sendPOSTRequest(("listings/\(networkIDs["etsy"] as! Int)/images"), body: imageBody, onCompletion: {
|
||||||
(dict, error) -> Void in
|
(dict, error) -> Void in
|
||||||
@ -421,26 +414,93 @@ extension ListingPreviewViewController {
|
|||||||
//post to facebook
|
//post to facebook
|
||||||
if(self.networksDictionary["facebook"]!){
|
if(self.networksDictionary["facebook"]!){
|
||||||
dispatch_group_enter(postingGroup)
|
dispatch_group_enter(postingGroup)
|
||||||
|
let fb_group: dispatch_group_t = dispatch_group_create()
|
||||||
|
|
||||||
let tmpDirURL = NSURL.fileURLWithPath(NSTemporaryDirectory(), isDirectory: true)
|
let tmpDirURL = NSURL.fileURLWithPath(NSTemporaryDirectory(), isDirectory: true)
|
||||||
let fileURL = tmpDirURL.URLByAppendingPathComponent("main").URLByAppendingPathExtension("jpg")
|
let fileURL = tmpDirURL.URLByAppendingPathComponent("main").URLByAppendingPathExtension("jpg")
|
||||||
print("FilePath: \(fileURL.path!)")
|
print("FilePath: \(fileURL.path!)")
|
||||||
do {
|
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{
|
}catch{
|
||||||
(error)
|
(error)
|
||||||
print(error)
|
print(error)
|
||||||
}
|
}
|
||||||
|
|
||||||
//let parameters: Dictionary<String, AnyObject> = ["message":("**"+self.itemTitle.text!+"**\n\n"+"Price: "+self.itemPrice.text! + "\n\n"+self.itemDescription.text!)]
|
|
||||||
|
|
||||||
let parameters: Dictionary<String, AnyObject> = ["Source": UIImageJPEGRepresentation(self.itemPicture.image!, 0.45)!, "published":false]
|
|
||||||
|
|
||||||
self.lastListingKey = newListingRef.key
|
self.lastListingKey = newListingRef.key
|
||||||
|
|
||||||
|
var imageIDs: [String] = []
|
||||||
|
|
||||||
|
|
||||||
|
//post multiple images to fb
|
||||||
|
for i in 0...(self.itemListingDictionary["pictures"] as! [UIImageView]).count - 1 {
|
||||||
|
var parameters: Dictionary<String, AnyObject> = Dictionary<String, AnyObject>()
|
||||||
|
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: {
|
self.graphManager.makePOSTResquest("me/photos", params: parameters, onComplete: {
|
||||||
(imageId, error) -> Void in
|
(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<String, AnyObject> = ["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<String, AnyObject> = ["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: {
|
self.graphManager.makePOSTResquest("me/feed", params: listingParams, onComplete: {
|
||||||
(listingId, error) -> Void in
|
(listingId, error) -> Void in
|
||||||
|
|
||||||
@ -454,22 +514,21 @@ extension ListingPreviewViewController {
|
|||||||
|
|
||||||
|
|
||||||
})
|
})
|
||||||
/*
|
|
||||||
|
|
||||||
*/
|
|
||||||
})
|
})
|
||||||
|
|
||||||
//let parameters: Dictionary<String, AnyObject> = ["":""]
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//notifies once all selected networks have been posted to
|
||||||
dispatch_group_notify(postingGroup, dispatch_get_main_queue(), {
|
dispatch_group_notify(postingGroup, dispatch_get_main_queue(), {
|
||||||
|
//self.networksDictionary["areNetworksChosen"] = true
|
||||||
self.newInProgressListing.update(["listingID": newListingRef.key,
|
self.newInProgressListing.update(["listingID": newListingRef.key,
|
||||||
"seller email": (NSUserDefaults.standardUserDefaults().objectForKey("email") as? String)!,
|
"seller email": (NSUserDefaults.standardUserDefaults().objectForKey("email") as? String)!,
|
||||||
"listingTitle": self.itemTitle.text,
|
"listingTitle": self.itemTitle.text,
|
||||||
"listingPrice": self.itemPrice.text,
|
"listingPrice": self.itemPrice.text,
|
||||||
"listingCategory": self.itemCategory.text,
|
"listingCategory": self.itemCategory.text,
|
||||||
|
"listingQuantity": self.itemQuantity.text,
|
||||||
"listingDescription": self.itemDescription.text,
|
"listingDescription": self.itemDescription.text,
|
||||||
"numberOfSupportingImages" : ((self.itemListingDictionary["pictures"] as? [UIImageView])?.count)! - 1,
|
"numberOfSupportingImages" : ((self.itemListingDictionary["pictures"] as? [UIImageView])?.count)! - 1,
|
||||||
"isListingDraft": false,
|
"isListingDraft": false,
|
||||||
@ -482,65 +541,132 @@ extension ListingPreviewViewController {
|
|||||||
|
|
||||||
let storageRef = self.firManager.storage.referenceForURL((databaseDict["image_storage"] as? String)!)
|
let storageRef = self.firManager.storage.referenceForURL((databaseDict["image_storage"] as? String)!)
|
||||||
|
|
||||||
//change code to new multi-image saving
|
var imageURLs: [String] = []
|
||||||
|
let completion: ServiceResponse = {(metadata, error) -> Void in
|
||||||
|
|
||||||
|
|
||||||
let listingImageRef = storageRef.child("images/\(newListingRef.key)"+".jpg")
|
|
||||||
listingImageRef.putData(UIImageJPEGRepresentation(self.itemPicture.image!, 0.8)!, metadata: nil,completion:
|
|
||||||
{(metadata, error) -> Void in
|
|
||||||
|
|
||||||
//for ebay due to its unique posting flow, will use firbase image storage url to add pictures
|
//for ebay due to its unique posting flow, will use firbase image storage url to add pictures
|
||||||
dispatch_group_enter(postingGroup)
|
|
||||||
if (self.networksDictionary["ebay"]!){
|
if (self.networksDictionary["ebay"]!){
|
||||||
var networkIDs = self.newInProgressListing["networkIDs"] as! Dictionary<String, AnyObject>
|
imageURLs.append((metadata?.downloadURL()?.absoluteString)!)
|
||||||
|
|
||||||
self.ebayManager.addImagesToListing(networkIDs["ebay"] as! String, imageURL: (metadata?.downloadURL()?.absoluteString)!, onCompletion: {
|
|
||||||
(_, _) -> Void in
|
|
||||||
dispatch_group_leave(postingGroup)
|
dispatch_group_leave(postingGroup)
|
||||||
})
|
|
||||||
}else{
|
}else{
|
||||||
dispatch_group_leave(postingGroup)
|
dispatch_group_leave(postingGroup)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
//change code to new multi-image saving
|
||||||
|
for i in 0...(self.itemListingDictionary["pictures"] as! [UIImageView]).count - 1 {
|
||||||
|
switch (i) {
|
||||||
|
|
||||||
|
case 0:
|
||||||
|
dispatch_group_enter(postingGroup)
|
||||||
|
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<String, AnyObject>()
|
||||||
|
}
|
||||||
|
var networkIDs = (self.newInProgressListing["networkIDs"] as! Dictionary<String, AnyObject>)
|
||||||
|
networkIDs["ebay"] = listingID as! String
|
||||||
|
self.newInProgressListing["networkIDs"] = networkIDs
|
||||||
|
dispatch_group_leave(postingGroup)
|
||||||
|
}
|
||||||
|
|
||||||
|
/*self.ebayManager.listItem(body, completion: {
|
||||||
|
(listingID, error) -> Void in
|
||||||
|
if((self.newInProgressListing["networkIDs"] == nil)){
|
||||||
|
self.newInProgressListing["networkIDs"] = Dictionary<String, AnyObject>()
|
||||||
|
}
|
||||||
|
var networkIDs = (self.newInProgressListing["networkIDs"] as! Dictionary<String, AnyObject>)
|
||||||
|
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(), {
|
dispatch_group_notify(postingGroup, dispatch_get_main_queue(), {
|
||||||
newListingRef.setValue(self.newInProgressListing)
|
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)}))
|
|
||||||
|
|
||||||
//register new listing id in global path of firebase root'
|
//register new listing id in global path of firebase root'
|
||||||
self.firManager.ref.child("Global_listings").child(newListingRef.key).setValue(newListingRef.key)
|
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) {
|
@IBAction func editListing(sender: AnyObject) {
|
||||||
|
|
||||||
self.performSegueWithIdentifier("EditListingSegue", sender: self)
|
self.performSegueWithIdentifier("EditListingSegue", sender: self)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
extension ListingPreviewViewController: UICollectionViewDelegate {
|
extension ListingPreviewViewController: UICollectionViewDelegate {
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|||||||
@ -1006,7 +1006,7 @@
|
|||||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||||
<state key="normal" title="Edit"/>
|
<state key="normal" title="Edit"/>
|
||||||
<connections>
|
<connections>
|
||||||
<action selector="editListing:" destination="gfQ-Y2-Mqh" eventType="touchUpInside" id="juI-UK-xEA"/>
|
<action selector="editListing:" destination="gfQ-Y2-Mqh" eventType="touchUpInside" id="k1t-H6-5D9"/>
|
||||||
</connections>
|
</connections>
|
||||||
</button>
|
</button>
|
||||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Networks:" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="nDO-rh-gjd">
|
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Networks:" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="nDO-rh-gjd">
|
||||||
@ -1016,6 +1016,16 @@
|
|||||||
<color key="textColor" red="0.10588235294117647" green="0.078431372549019607" blue="0.23921568627450979" alpha="1" colorSpace="calibratedRGB"/>
|
<color key="textColor" red="0.10588235294117647" green="0.078431372549019607" blue="0.23921568627450979" alpha="1" colorSpace="calibratedRGB"/>
|
||||||
<nil key="highlightedColor"/>
|
<nil key="highlightedColor"/>
|
||||||
</label>
|
</label>
|
||||||
|
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" id="EMt-PR-56K">
|
||||||
|
<rect key="frame" x="307" y="8" width="60" height="30"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||||
|
<state key="normal" title="Cancel">
|
||||||
|
<color key="titleColor" red="1" green="0.44538913570442429" blue="0.4193885779602724" alpha="1" colorSpace="calibratedRGB"/>
|
||||||
|
</state>
|
||||||
|
<connections>
|
||||||
|
<action selector="cancel:" destination="gfQ-Y2-Mqh" eventType="touchUpInside" id="fNB-wM-UHJ"/>
|
||||||
|
</connections>
|
||||||
|
</button>
|
||||||
</subviews>
|
</subviews>
|
||||||
</scrollView>
|
</scrollView>
|
||||||
</subviews>
|
</subviews>
|
||||||
@ -1024,14 +1034,21 @@
|
|||||||
<nil key="simulatedTopBarMetrics"/>
|
<nil key="simulatedTopBarMetrics"/>
|
||||||
<simulatedScreenMetrics key="simulatedDestinationMetrics" type="retina47"/>
|
<simulatedScreenMetrics key="simulatedDestinationMetrics" type="retina47"/>
|
||||||
<connections>
|
<connections>
|
||||||
|
<outlet property="cancel_backBtn" destination="EMt-PR-56K" id="q2U-Eg-eO4"/>
|
||||||
<outlet property="containerScrollView" destination="T3U-DI-Ome" id="gad-zv-hsO"/>
|
<outlet property="containerScrollView" destination="T3U-DI-Ome" id="gad-zv-hsO"/>
|
||||||
|
<outlet property="edit_button" destination="yzh-tr-u8D" id="f8q-TT-a2C"/>
|
||||||
<outlet property="itemCategory" destination="ije-TG-4S5" id="XGu-Uw-hLl"/>
|
<outlet property="itemCategory" destination="ije-TG-4S5" id="XGu-Uw-hLl"/>
|
||||||
<outlet property="itemDescription" destination="u7b-0N-xli" id="d1N-lw-6sw"/>
|
<outlet property="itemDescription" destination="u7b-0N-xli" id="d1N-lw-6sw"/>
|
||||||
<outlet property="itemPicture" destination="K0z-pp-hzH" id="6Zm-Ig-Rm3"/>
|
<outlet property="itemPictureMain" destination="K0z-pp-hzH" id="cXG-P9-emv"/>
|
||||||
|
<outlet property="itemPictureSup1" destination="ldz-4W-iID" id="PHY-Nf-9Qv"/>
|
||||||
|
<outlet property="itemPictureSup2" destination="MRj-nD-Hnj" id="KPH-H3-Z5z"/>
|
||||||
|
<outlet property="itemPictureSup3" destination="L24-JN-niQ" id="fyJ-HY-klx"/>
|
||||||
|
<outlet property="itemPictureSup4" destination="LsU-De-laD" id="eBn-7o-WIl"/>
|
||||||
<outlet property="itemPrice" destination="Jh9-KG-0Yt" id="nbh-aq-W0b"/>
|
<outlet property="itemPrice" destination="Jh9-KG-0Yt" id="nbh-aq-W0b"/>
|
||||||
<outlet property="itemQuantity" destination="shU-ew-26O" id="yNg-ov-7q5"/>
|
<outlet property="itemQuantity" destination="shU-ew-26O" id="yNg-ov-7q5"/>
|
||||||
<outlet property="itemTitle" destination="WuZ-2K-lz7" id="EkY-UX-lSj"/>
|
<outlet property="itemTitle" destination="WuZ-2K-lz7" id="EkY-UX-lSj"/>
|
||||||
<outlet property="networks" destination="MS3-nc-8va" id="duP-BL-Qp2"/>
|
<outlet property="networks" destination="MS3-nc-8va" id="duP-BL-Qp2"/>
|
||||||
|
<outlet property="publishBtn" destination="deQ-F0-uVB" id="pL6-Dz-Qqg"/>
|
||||||
<segue destination="0di-oP-cGQ" kind="modal" identifier="EditListingSegue" id="rkZ-c8-XJc"/>
|
<segue destination="0di-oP-cGQ" kind="modal" identifier="EditListingSegue" id="rkZ-c8-XJc"/>
|
||||||
</connections>
|
</connections>
|
||||||
</viewController>
|
</viewController>
|
||||||
@ -1346,6 +1363,7 @@
|
|||||||
<outlet property="itemTable" destination="Thg-pb-lhN" id="u15-xE-hz6"/>
|
<outlet property="itemTable" destination="Thg-pb-lhN" id="u15-xE-hz6"/>
|
||||||
<outlet property="menuButton" destination="WjT-mo-4jm" id="1CT-vV-KLK"/>
|
<outlet property="menuButton" destination="WjT-mo-4jm" id="1CT-vV-KLK"/>
|
||||||
<outlet property="tableSegmentController" destination="X2D-np-ma4" id="DbB-DF-wEF"/>
|
<outlet property="tableSegmentController" destination="X2D-np-ma4" id="DbB-DF-wEF"/>
|
||||||
|
<segue destination="gfQ-Y2-Mqh" kind="modal" identifier="ItemDetailSegue" id="nUj-1v-ftF"/>
|
||||||
</connections>
|
</connections>
|
||||||
</viewController>
|
</viewController>
|
||||||
<placeholder placeholderIdentifier="IBFirstResponder" id="rIQ-Hu-DM0" userLabel="First Responder" sceneMemberID="firstResponder"/>
|
<placeholder placeholderIdentifier="IBFirstResponder" id="rIQ-Hu-DM0" userLabel="First Responder" sceneMemberID="firstResponder"/>
|
||||||
@ -1388,7 +1406,7 @@
|
|||||||
<color key="separatorColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
|
<color key="separatorColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
|
||||||
<color key="sectionIndexBackgroundColor" red="1" green="0.674443664" blue="0.43274429120000002" alpha="1" colorSpace="calibratedRGB"/>
|
<color key="sectionIndexBackgroundColor" red="1" green="0.674443664" blue="0.43274429120000002" alpha="1" colorSpace="calibratedRGB"/>
|
||||||
<prototypes>
|
<prototypes>
|
||||||
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="blue" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" reuseIdentifier="User_Cell" id="hae-qr-YYv">
|
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="blue" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" reuseIdentifier="User_Cell" id="hae-qr-YYv" customClass="UserCell" customModule="Vendoo" customModuleProvider="target">
|
||||||
<rect key="frame" x="0.0" y="1" width="375" height="44"/>
|
<rect key="frame" x="0.0" y="1" width="375" height="44"/>
|
||||||
<autoresizingMask key="autoresizingMask"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="hae-qr-YYv" id="jVD-It-v2S">
|
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="hae-qr-YYv" id="jVD-It-v2S">
|
||||||
@ -1396,14 +1414,14 @@
|
|||||||
<autoresizingMask key="autoresizingMask"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Hi User" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="QxU-Ol-czq">
|
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Hi User" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="QxU-Ol-czq">
|
||||||
<rect key="frame" x="17" y="4" width="66" height="26"/>
|
<rect key="frame" x="17" y="4" width="208" height="26"/>
|
||||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||||
<fontDescription key="fontDescription" type="system" pointSize="14"/>
|
<fontDescription key="fontDescription" type="system" pointSize="14"/>
|
||||||
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
|
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
|
||||||
<nil key="highlightedColor"/>
|
<nil key="highlightedColor"/>
|
||||||
</label>
|
</label>
|
||||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="user@email.com" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="CH5-dW-4wI">
|
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="user@email.com" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="CH5-dW-4wI">
|
||||||
<rect key="frame" x="17" y="20" width="114" height="26"/>
|
<rect key="frame" x="17" y="20" width="208" height="26"/>
|
||||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||||
<fontDescription key="fontDescription" type="system" pointSize="12"/>
|
<fontDescription key="fontDescription" type="system" pointSize="12"/>
|
||||||
<color key="textColor" red="0.43529411759999997" green="0.4431372549" blue="0.47450980390000003" alpha="1" colorSpace="calibratedRGB"/>
|
<color key="textColor" red="0.43529411759999997" green="0.4431372549" blue="0.47450980390000003" alpha="1" colorSpace="calibratedRGB"/>
|
||||||
@ -1418,6 +1436,10 @@
|
|||||||
</button>
|
</button>
|
||||||
</subviews>
|
</subviews>
|
||||||
</tableViewCellContentView>
|
</tableViewCellContentView>
|
||||||
|
<connections>
|
||||||
|
<outlet property="email" destination="CH5-dW-4wI" id="dTu-Qs-a3W"/>
|
||||||
|
<outlet property="name" destination="QxU-Ol-czq" id="GGJ-j1-f1P"/>
|
||||||
|
</connections>
|
||||||
</tableViewCell>
|
</tableViewCell>
|
||||||
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="blue" accessoryType="disclosureIndicator" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" reuseIdentifier="Notifications_Cell" id="TpL-A6-BYb">
|
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="blue" accessoryType="disclosureIndicator" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" reuseIdentifier="Notifications_Cell" id="TpL-A6-BYb">
|
||||||
<rect key="frame" x="0.0" y="45" width="375" height="44"/>
|
<rect key="frame" x="0.0" y="45" width="375" height="44"/>
|
||||||
@ -2446,8 +2468,9 @@
|
|||||||
<image name="start" width="50" height="50"/>
|
<image name="start" width="50" height="50"/>
|
||||||
</resources>
|
</resources>
|
||||||
<inferredMetricsTieBreakers>
|
<inferredMetricsTieBreakers>
|
||||||
<segue reference="Ds4-LY-IRj"/>
|
|
||||||
<segue reference="syc-IR-LNQ"/>
|
<segue reference="syc-IR-LNQ"/>
|
||||||
|
<segue reference="nWA-7e-2Ec"/>
|
||||||
|
<segue reference="nUj-1v-ftF"/>
|
||||||
<segue reference="NOz-ya-avj"/>
|
<segue reference="NOz-ya-avj"/>
|
||||||
<segue reference="rkZ-c8-XJc"/>
|
<segue reference="rkZ-c8-XJc"/>
|
||||||
<segue reference="eaI-bm-1aI"/>
|
<segue reference="eaI-bm-1aI"/>
|
||||||
|
|||||||
@ -8,6 +8,7 @@
|
|||||||
|
|
||||||
import UIKit
|
import UIKit
|
||||||
import FirebaseAuth
|
import FirebaseAuth
|
||||||
|
import Locksmith
|
||||||
|
|
||||||
class MenuPanelViewController: UIViewController{
|
class MenuPanelViewController: UIViewController{
|
||||||
|
|
||||||
@ -99,7 +100,11 @@ extension MenuPanelViewController: UITableViewDataSource
|
|||||||
let cell: UITableViewCell
|
let cell: UITableViewCell
|
||||||
switch(indexPath.row){
|
switch(indexPath.row){
|
||||||
case 0:
|
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
|
break
|
||||||
case 1:
|
case 1:
|
||||||
cell = self.table.dequeueReusableCellWithIdentifier("Notifications_Cell")!
|
cell = self.table.dequeueReusableCellWithIdentifier("Notifications_Cell")!
|
||||||
@ -129,7 +134,32 @@ extension MenuPanelViewController{
|
|||||||
|
|
||||||
do{
|
do{
|
||||||
try FIRAuth.auth()?.signOut()
|
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")
|
let vc = self.storyboard?.instantiateViewControllerWithIdentifier("SignInViewController")
|
||||||
self.presentViewController(vc!, animated: true, completion: nil)
|
self.presentViewController(vc!, animated: true, completion: nil)
|
||||||
|
|||||||
@ -33,6 +33,8 @@ class NetworksTableViewController: UIViewController {
|
|||||||
private var firManager: FirebaseManager! = nil
|
private var firManager: FirebaseManager! = nil
|
||||||
private var etsyManager: EtsyRESTAPIManager! = nil
|
private var etsyManager: EtsyRESTAPIManager! = nil
|
||||||
private var ebayManager: EbayWebServiceManager! = EbayWebServiceManager()
|
private var ebayManager: EbayWebServiceManager! = EbayWebServiceManager()
|
||||||
|
private var shouldShowDictionary: Dictionary<String, Bool> = ["ebay":false, "amazon":false,"etsy":false,"facebook":false]
|
||||||
|
private var networkOrderSelection: [String] = []
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -71,6 +73,23 @@ class NetworksTableViewController: UIViewController {
|
|||||||
self.networkToggleOrSelect = bool
|
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) {
|
override func viewWillAppear(animated: Bool) {
|
||||||
super.viewWillAppear(animated)
|
super.viewWillAppear(animated)
|
||||||
if(!networkToggleOrSelect) {
|
if(!networkToggleOrSelect) {
|
||||||
@ -129,10 +148,22 @@ extension NetworksTableViewController: UITableViewDataSource {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
|
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
|
||||||
|
if(self.networkToggleOrSelect) {
|
||||||
|
var count = 0
|
||||||
// #warning Incomplete implementation, return the number of rows
|
// #warning Incomplete implementation, return the number of rows
|
||||||
|
for (_, visibility) in self.shouldShowDictionary {
|
||||||
|
if visibility {
|
||||||
|
count += 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return count
|
||||||
|
}
|
||||||
|
else {
|
||||||
return 4
|
return 4
|
||||||
}
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
|
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
|
||||||
|
|
||||||
@ -142,7 +173,27 @@ extension NetworksTableViewController: UITableViewDataSource {
|
|||||||
//may hide future networks that don't apply to a listing
|
//may hide future networks that don't apply to a listing
|
||||||
if(self.networkToggleOrSelect){
|
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:
|
case 0:
|
||||||
|
|
||||||
@ -158,11 +209,11 @@ extension NetworksTableViewController: UITableViewDataSource {
|
|||||||
cell = (self.tableView.dequeueReusableCellWithIdentifier("etsy", forIndexPath: indexPath) as! EtsyTableViewCell)
|
cell = (self.tableView.dequeueReusableCellWithIdentifier("etsy", forIndexPath: indexPath) as! EtsyTableViewCell)
|
||||||
break
|
break
|
||||||
default:
|
default:
|
||||||
//loads network cell for ebay
|
//loads network cell for facebook
|
||||||
cell = (self.tableView.dequeueReusableCellWithIdentifier("facebook", forIndexPath: indexPath) as! FBTableViewCell)
|
cell = (self.tableView.dequeueReusableCellWithIdentifier("facebook", forIndexPath: indexPath) as! FBTableViewCell)
|
||||||
|
|
||||||
break
|
break
|
||||||
}
|
}*/
|
||||||
|
|
||||||
}
|
}
|
||||||
else{
|
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
|
//case where class is being used in new item posting workflow to select which network to sell on
|
||||||
if(self.networkToggleOrSelect){
|
if(self.networkToggleOrSelect){
|
||||||
|
|
||||||
switch (indexPath.row){
|
switch (self.networkOrderSelection[indexPath.row]){
|
||||||
case 0:
|
case "ebay":
|
||||||
let cell: EbayTableViewCell!
|
let cell: EbayTableViewCell!
|
||||||
cell = (self.tableView.dequeueReusableCellWithIdentifier("ebay", forIndexPath: indexPath) as! EbayTableViewCell)
|
cell = (self.tableView.dequeueReusableCellWithIdentifier("ebay", forIndexPath: indexPath) as! EbayTableViewCell)
|
||||||
cell.setSelected(false, animated: false)
|
cell.setSelected(false, animated: false)
|
||||||
@ -383,7 +434,7 @@ extension NetworksTableViewController: UITableViewDelegate {
|
|||||||
}
|
}
|
||||||
|
|
||||||
break
|
break
|
||||||
case 1:
|
case "amazon":
|
||||||
let cell: AmazonTableViewCell!
|
let cell: AmazonTableViewCell!
|
||||||
cell = (self.tableView.dequeueReusableCellWithIdentifier("amazon", forIndexPath: indexPath) as! AmazonTableViewCell)
|
cell = (self.tableView.dequeueReusableCellWithIdentifier("amazon", forIndexPath: indexPath) as! AmazonTableViewCell)
|
||||||
cell.setSelected(false, animated: false)
|
cell.setSelected(false, animated: false)
|
||||||
@ -413,7 +464,7 @@ extension NetworksTableViewController: UITableViewDelegate {
|
|||||||
break
|
break
|
||||||
|
|
||||||
|
|
||||||
case 2:
|
case "etsy":
|
||||||
let cell: EtsyTableViewCell!
|
let cell: EtsyTableViewCell!
|
||||||
|
|
||||||
cell = (self.tableView.dequeueReusableCellWithIdentifier("etsy", forIndexPath: indexPath) as! EtsyTableViewCell)
|
cell = (self.tableView.dequeueReusableCellWithIdentifier("etsy", forIndexPath: indexPath) as! EtsyTableViewCell)
|
||||||
@ -451,7 +502,7 @@ extension NetworksTableViewController: UITableViewDelegate {
|
|||||||
|
|
||||||
break
|
break
|
||||||
|
|
||||||
default:
|
case "facebook":
|
||||||
|
|
||||||
let cell: FBTableViewCell!
|
let cell: FBTableViewCell!
|
||||||
|
|
||||||
@ -477,16 +528,9 @@ extension NetworksTableViewController: UITableViewDelegate {
|
|||||||
//code to select network
|
//code to select network
|
||||||
self.networksDictionary["facebook"] = true
|
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
|
break
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -682,10 +726,19 @@ extension NetworksTableViewController: UITableViewDelegate {
|
|||||||
extension NetworksTableViewController: EbayWebServiceManagerDelegate {
|
extension NetworksTableViewController: EbayWebServiceManagerDelegate {
|
||||||
|
|
||||||
func signInUser(signInString : String!) {
|
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.delegate = self
|
||||||
myWebView.loadRequest(NSURLRequest(URL: NSURL(string: signInString)!))
|
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")
|
NSLog("Oauth successful")
|
||||||
((self.tabBarController as? HomeViewController)?.ebayGraphManager)!.fetchToken()
|
((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 {
|
extension NetworksTableViewController {
|
||||||
@ -741,12 +785,16 @@ extension NetworksTableViewController {
|
|||||||
switch (sender.superview?.superview?.classForCoder){
|
switch (sender.superview?.superview?.classForCoder){
|
||||||
case is EbayTableViewCell.Type:
|
case is EbayTableViewCell.Type:
|
||||||
let tabBar = self.tabBarController
|
let tabBar = self.tabBarController
|
||||||
((tabBar as? HomeViewController)?.ebayGraphManager.authorizeApp())!
|
((tabBar as? HomeViewController)?.ebayGraphManager.authorizeApp({
|
||||||
|
something,_ -> Void in
|
||||||
|
// // //
|
||||||
dispatch_async(dispatch_get_main_queue(), {
|
dispatch_async(dispatch_get_main_queue(), {
|
||||||
sender.setTitle("Logout", forState: UIControlState.Normal)
|
sender.setTitle("Logout", forState: UIControlState.Normal)
|
||||||
(sender.superview?.superview as! EbayTableViewCell).settingsBtn.enabled = true
|
(sender.superview?.superview as! EbayTableViewCell).settingsBtn.enabled = true
|
||||||
(sender.superview?.superview as! EbayTableViewCell).settingsBtn.hidden = false
|
(sender.superview?.superview as! EbayTableViewCell).settingsBtn.hidden = false
|
||||||
})
|
})
|
||||||
|
}))!
|
||||||
|
|
||||||
break
|
break
|
||||||
case is AmazonTableViewCell.Type:
|
case is AmazonTableViewCell.Type:
|
||||||
break
|
break
|
||||||
|
|||||||
@ -8,6 +8,7 @@
|
|||||||
|
|
||||||
import UIKit
|
import UIKit
|
||||||
import Locksmith
|
import Locksmith
|
||||||
|
import FirebaseAuth
|
||||||
|
|
||||||
class SettingsViewController: UIViewController {
|
class SettingsViewController: UIViewController {
|
||||||
|
|
||||||
@ -106,7 +107,7 @@ extension SettingsViewController: UITableViewDelegate {
|
|||||||
|
|
||||||
//put in password changing code later
|
//put in password changing code later
|
||||||
print("password accepted please enter new password")
|
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
|
alert2.addTextFieldWithConfigurationHandler({ (textField : UITextField!) -> Void in
|
||||||
|
|
||||||
@ -117,7 +118,24 @@ extension SettingsViewController: UITableViewDelegate {
|
|||||||
alert2.addAction(UIAlertAction(title: "Change Password", style: .Default, handler:{(action: UIAlertAction!) in
|
alert2.addAction(UIAlertAction(title: "Change Password", style: .Default, handler:{(action: UIAlertAction!) in
|
||||||
let textField2 = alert2.textFields![0] as UITextField
|
let textField2 = alert2.textFields![0] as UITextField
|
||||||
|
|
||||||
print("your new password is \(textField2.text!). This will be take out once password change logic is implemented.")
|
FIRAuth.auth()?.currentUser?.updatePassword(textField2.text!, completion: {
|
||||||
|
(error) -> Void in
|
||||||
|
|
||||||
|
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: {})
|
alert.dismissViewControllerAnimated(false, completion: {})
|
||||||
|
|||||||
@ -6,10 +6,11 @@
|
|||||||
// Copyright © 2016 Okechi Onyeje. All rights reserved.
|
// 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 UIKit
|
||||||
import FirebaseAuth
|
import FirebaseAuth
|
||||||
|
import Firebase
|
||||||
import Locksmith
|
import Locksmith
|
||||||
|
|
||||||
class SignUpViewController: UIViewController {
|
class SignUpViewController: UIViewController {
|
||||||
@ -43,10 +44,10 @@ class SignUpViewController: UIViewController {
|
|||||||
extension SignUpViewController {
|
extension SignUpViewController {
|
||||||
|
|
||||||
@IBAction func signUpUser(sender: AnyObject) {
|
@IBAction func signUpUser(sender: AnyObject) {
|
||||||
|
if( (self.email.text != "") && (self.name.text != "") && (self.password.text != "")) {
|
||||||
let finalEmail = email!.text!.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceCharacterSet())
|
let finalEmail = email!.text!.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceCharacterSet())
|
||||||
|
|
||||||
if isValidEmail(finalEmail){
|
if isValidEmail(finalEmail){
|
||||||
|
|
||||||
FIRAuth.auth()?.createUserWithEmail(email.text!, password: password.text!) { (user, error) in
|
FIRAuth.auth()?.createUserWithEmail(email.text!, password: password.text!) { (user, error) in
|
||||||
if error != nil {
|
if error != nil {
|
||||||
/*
|
/*
|
||||||
@ -64,6 +65,8 @@ extension SignUpViewController {
|
|||||||
//save user account
|
//save user account
|
||||||
NSUserDefaults.standardUserDefaults().setBool(true, forKey: "signedIn")
|
NSUserDefaults.standardUserDefaults().setBool(true, forKey: "signedIn")
|
||||||
NSUserDefaults.standardUserDefaults().setObject(self.email.text, forKey: "email")
|
NSUserDefaults.standardUserDefaults().setObject(self.email.text, forKey: "email")
|
||||||
|
NSUserDefaults.standardUserDefaults().setObject(self.name.text, forKey: "name")
|
||||||
|
|
||||||
|
|
||||||
//save user credentials in Keychain
|
//save user credentials in Keychain
|
||||||
do{
|
do{
|
||||||
@ -80,6 +83,17 @@ extension SignUpViewController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
}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)
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
19
Vendoo/UserCell.swift
Normal file
19
Vendoo/UserCell.swift
Normal file
@ -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
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
x
Reference in New Issue
Block a user