mirror of
https://bitbucket.org/vendoo/vendoo_v1.0.git
synced 2025-12-25 03:37:39 +00:00
766 lines
37 KiB
Swift
766 lines
37 KiB
Swift
//
|
|
// ListingPreviewViewController.swift
|
|
// Vendoo
|
|
//
|
|
// Created by Okechi Onyeje on 5/28/16.
|
|
// Copyright © 2016 Okechi Onyeje. All rights reserved.
|
|
//
|
|
|
|
/*
|
|
NOTES:
|
|
|
|
need to display navigation bar so user can navigate back to previous screens if changes need to be made
|
|
|
|
*/
|
|
|
|
import UIKit
|
|
import FirebaseStorage
|
|
import SWRevealViewController
|
|
|
|
//@TODO: Need to make multiple images work for etsy and facebook and need to implement multiple images saving to firebase
|
|
class ListingPreviewViewController: UIViewController {
|
|
|
|
//IBOutlets
|
|
@IBOutlet weak var containerScrollView: UIScrollView!
|
|
@IBOutlet weak var itemQuantity: UITextView!
|
|
@IBOutlet weak var itemPictureMain: UIImageView!
|
|
@IBOutlet weak var itemPictureSup1: UIImageView!
|
|
@IBOutlet weak var itemPictureSup2: UIImageView!
|
|
@IBOutlet weak var itemPictureSup3: UIImageView!
|
|
@IBOutlet weak var itemPictureSup4: UIImageView!
|
|
@IBOutlet weak var itemTitle: UITextView!
|
|
@IBOutlet weak var itemDescription: UITextView!
|
|
@IBOutlet weak var itemPrice: UITextView!
|
|
@IBOutlet weak var itemCategory: UITextView!
|
|
@IBOutlet weak var networks: UICollectionView!
|
|
@IBOutlet weak var publishBtn: UIButton!
|
|
@IBOutlet weak var edit_button: UIButton!
|
|
@IBOutlet weak var cancel_backBtn: UIButton!
|
|
|
|
//class variables
|
|
private var networksDictionary: Dictionary<String, Bool> = Dictionary<String, Bool>()
|
|
private var graphManager: FacebookGraphAPIManager! = nil
|
|
private var firManager: FirebaseManager! = nil
|
|
private var ebayManager: EbayWebServiceManager! = nil
|
|
private var etsyManager: EtsyRESTAPIManager! = nil
|
|
private var itemListingDictionary: Dictionary<String, AnyObject>! = Dictionary<String, AnyObject>()
|
|
private var alert = UIAlertController(title: "Listing Published", message: "Your listing has been published", preferredStyle: .Alert)
|
|
private var lastListingKey: String!
|
|
private var newInProgressListing: Dictionary<String,AnyObject> = Dictionary<String, AnyObject>()
|
|
var loadingView: UIView!
|
|
private var itemViewState = ""
|
|
|
|
override func viewDidLoad() {
|
|
super.viewDidLoad()
|
|
|
|
if (self.itemViewState == "NonEditable") {
|
|
dispatch_async(dispatch_get_main_queue(), {
|
|
//self.cancel_backBtn.titleLabel?.text = "Back"
|
|
self.edit_button.hidden = true
|
|
self.edit_button.enabled = false
|
|
|
|
self.publishBtn.hidden = true
|
|
self.publishBtn.enabled = false
|
|
})
|
|
}
|
|
/*else if (self.itemViewState == "Editable") {
|
|
//self.cancel_backBtn.titleLabel?.text = "Back"
|
|
|
|
}*/
|
|
// Do any additional setup after loading the view.
|
|
|
|
// Initialization code
|
|
self.networks.delegate = self
|
|
self.networks.dataSource = self
|
|
self.networks.backgroundView?.backgroundColor = UIColor.whiteColor()
|
|
//self.graphManager.delegate = self
|
|
}
|
|
|
|
override func viewDidAppear(animated: Bool) {
|
|
self.setListing()
|
|
}
|
|
|
|
override func didReceiveMemoryWarning() {
|
|
super.didReceiveMemoryWarning()
|
|
// Dispose of any resources that can be recreated.
|
|
}
|
|
|
|
func setListing(){
|
|
|
|
|
|
for i in 0...((self.itemListingDictionary["pictures"] as! [UIImageView]).count - 1) {
|
|
switch i {
|
|
case 0:
|
|
self.itemPictureMain.image = (self.itemListingDictionary["pictures"] as? [UIImageView])![i].image
|
|
break
|
|
case 1:
|
|
self.itemPictureSup1.image = (self.itemListingDictionary["pictures"] as? [UIImageView])![i].image
|
|
break
|
|
case 2:
|
|
self.itemPictureSup2.image = (self.itemListingDictionary["pictures"] as? [UIImageView])![i].image
|
|
break
|
|
case 3:
|
|
self.itemPictureSup3.image = (self.itemListingDictionary["pictures"] as? [UIImageView])![i].image
|
|
break
|
|
case 4:
|
|
self.itemPictureSup4.image = (self.itemListingDictionary["pictures"] as? [UIImageView])![i].image
|
|
break
|
|
default:
|
|
break
|
|
}
|
|
}
|
|
self.itemTitle.text = self.itemListingDictionary["title"] as! String
|
|
self.itemDescription.text = self.itemListingDictionary["description"] as! String
|
|
self.itemPrice.text = self.itemListingDictionary["price"] as! String
|
|
self.itemCategory.text = self.itemListingDictionary["category"] 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!>){
|
|
self.networksDictionary = netdictionary
|
|
self.itemListingDictionary = itemdictionary
|
|
}
|
|
|
|
func setManagers(fbManager: FacebookGraphAPIManager, fireManager: FirebaseManager, ebayManager: EbayWebServiceManager, etsyManager: EtsyRESTAPIManager){
|
|
self.graphManager = fbManager
|
|
self.firManager = fireManager
|
|
self.ebayManager = ebayManager
|
|
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
|
|
|
|
// In a storyboard-based application, you will often want to do a little preparation before navigation
|
|
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
|
|
// Get the new view controller using segue.destinationViewController.
|
|
// Pass the selected object to the new view controller.
|
|
|
|
if(segue.identifier == "EditListingSegue"){
|
|
var imageData: [UIImage] = []
|
|
for imageView in (self.itemListingDictionary["pictures"] as? [UIImageView])! {
|
|
imageData.append(imageView.image!)
|
|
}
|
|
|
|
let dict: Dictionary<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)!
|
|
vc.toggleEditingMode(dict)
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
extension Dictionary {
|
|
mutating func update(other:Dictionary) {
|
|
for (key,value) in other {
|
|
self.updateValue(value, forKey:key)
|
|
}
|
|
}
|
|
}
|
|
/*
|
|
//MARK: - FacebookGraphAPIManagerDelegate methods
|
|
extension ListingPreviewViewController: FacebookGraphAPIManagerDelegate {
|
|
func listingUploadedFB(fbID: String) {
|
|
|
|
self.firManager.ref.child("Users").child("\(self.firManager.user_email)").child("user_Listings").child(self.lastListingKey).updateChildValues(["network_listing_IDs":["fbID":fbID]])
|
|
|
|
self.alert.title = "Listing Published"
|
|
self.alert.message = "Your listing has been published to facebook"
|
|
|
|
self.presentViewController(self.alert, animated: true, completion: nil)
|
|
}
|
|
}
|
|
*/
|
|
|
|
//MARK: - IBActions
|
|
extension ListingPreviewViewController {
|
|
@IBAction func cancel(sender: AnyObject) {
|
|
if self.itemViewState == "" {
|
|
let storyboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
|
|
let vc = storyboard.instantiateViewControllerWithIdentifier("Reveal View Controller") as! SWRevealViewController
|
|
self.presentViewController(vc, animated: true, completion: nil)
|
|
}
|
|
else if self.itemViewState == "Editable" || self.itemViewState == "NonEditable"{
|
|
self.presentingViewController?.dismissViewControllerAnimated(true, completion: nil)
|
|
}
|
|
|
|
}
|
|
|
|
@IBAction func publishItem(sender: AnyObject) {
|
|
self.loadingView = UIView(frame: self.view.frame)
|
|
self.loadingView.backgroundColor = UIColor.grayColor()
|
|
self.loadingView.alpha = 0.4
|
|
|
|
self.firManager.indicator.center = self.view.center
|
|
|
|
self.loadingView.addSubview(self.firManager.indicator)
|
|
self.view.addSubview(loadingView)
|
|
self.firManager.indicator.startAnimating()
|
|
|
|
if(self.itemPictureMain.image == nil){
|
|
let alert = UIAlertController(title: "Image Needed", message: "To proceed to choose networks, you must supply at least one picture for your listing", preferredStyle: .Alert)
|
|
alert.addAction(UIAlertAction(title: "OK", style: .Default, handler:{(action: UIAlertAction!) in alert.dismissViewControllerAnimated(true, completion: nil)}))
|
|
|
|
self.presentViewController(alert, animated: true, completion: nil)
|
|
}else{
|
|
self.networksDictionary["areNetworksChosen"] = true
|
|
|
|
//save listing to private user path in firebase
|
|
let newListingRef = self.firManager.ref.child("Users").child("\(self.firManager.user_email)").child("user_Listings").childByAutoId()
|
|
let postingGroup: dispatch_group_t = dispatch_group_create()
|
|
|
|
/*if(!(self.networksDictionary["ebay"]!)&&(!(self.networksDictionary["etsy"]!))&&(!(self.networksDictionary["amazon"]!))&&(!(self.networksDictionary["facebook"]!))) {
|
|
|
|
}else {
|
|
dispatch_g
|
|
}*/
|
|
//post to ebay
|
|
/*if(self.networksDictionary["ebay"]!){
|
|
dispatch_group_enter(postingGroup)
|
|
|
|
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
|
|
]
|
|
|
|
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)
|
|
})
|
|
}*/
|
|
|
|
|
|
//post to amazon
|
|
if(self.networksDictionary["amazon"]!){
|
|
|
|
}
|
|
|
|
|
|
|
|
//post to etsy
|
|
if(self.networksDictionary["etsy"]!){
|
|
|
|
dispatch_group_enter(postingGroup)
|
|
var categoryCode: Int!
|
|
switch self.itemCategory.text {
|
|
case "Accessories":
|
|
categoryCode = EtsyRESTAPIManager.settingsDictionary["categories"]!["accessories"] as! Int
|
|
break
|
|
case "Art":
|
|
categoryCode = EtsyRESTAPIManager.settingsDictionary["categories"]!["art"] as! Int
|
|
break
|
|
case "Bath, Beauty & Health":
|
|
categoryCode = EtsyRESTAPIManager.settingsDictionary["categories"]!["bath_and_beauty"] as! Int
|
|
break
|
|
case "Bags & Purses":
|
|
categoryCode = EtsyRESTAPIManager.settingsDictionary["categories"]!["bags_and_purses"] as! Int
|
|
break
|
|
case "Books":
|
|
categoryCode = EtsyRESTAPIManager.settingsDictionary["categories"]!["books_and_zines"] as! Int
|
|
break
|
|
case "Candles":
|
|
categoryCode = EtsyRESTAPIManager.settingsDictionary["categories"]!["candles"] as! Int
|
|
break
|
|
case "Ceramics & Pottery":
|
|
categoryCode = EtsyRESTAPIManager.settingsDictionary["categories"]!["ceramics_and_pottery"] as! Int
|
|
break
|
|
case "Children":
|
|
categoryCode = EtsyRESTAPIManager.settingsDictionary["categories"]!["children"] as! Int
|
|
break
|
|
case "Clothing & Shoes":
|
|
categoryCode = EtsyRESTAPIManager.settingsDictionary["categories"]!["clothing"] as! Int
|
|
break
|
|
case "Crochet":
|
|
categoryCode = EtsyRESTAPIManager.settingsDictionary["categories"]!["crochet"] as! Int
|
|
break
|
|
case "Dolls & Miniatures":
|
|
categoryCode = EtsyRESTAPIManager.settingsDictionary["categories"]!["dolls_and_miniatures"] as! Int
|
|
break
|
|
case "Everything Else":
|
|
categoryCode = EtsyRESTAPIManager.settingsDictionary["categories"]!["everything_else"] as! Int
|
|
break
|
|
case "Furniture":
|
|
categoryCode = EtsyRESTAPIManager.settingsDictionary["categories"]!["furniture"] as! Int
|
|
break
|
|
case "Geekery":
|
|
categoryCode = EtsyRESTAPIManager.settingsDictionary["categories"]!["geekery"] as! Int
|
|
break
|
|
case "Glass":
|
|
categoryCode = EtsyRESTAPIManager.settingsDictionary["categories"]!["glass"] as! Int
|
|
break
|
|
case "Holidays":
|
|
categoryCode = EtsyRESTAPIManager.settingsDictionary["categories"]!["holidays"] as! Int
|
|
break
|
|
case "Home/Houseware & Garden":
|
|
categoryCode = EtsyRESTAPIManager.settingsDictionary["categories"]!["housewares"] as! Int
|
|
break
|
|
case "Jewelry & Watches":
|
|
categoryCode = EtsyRESTAPIManager.settingsDictionary["categories"]!["jewelry"] as! Int
|
|
break
|
|
case "Knitting":
|
|
categoryCode = EtsyRESTAPIManager.settingsDictionary["categories"]!["knitting"] as! Int
|
|
break
|
|
case "Music":
|
|
categoryCode = EtsyRESTAPIManager.settingsDictionary["categories"]!["music"] as! Int
|
|
break
|
|
case "Needlecraft":
|
|
categoryCode = EtsyRESTAPIManager.settingsDictionary["categories"]!["needlecraft"] as! Int
|
|
break
|
|
case "Paper Goods":
|
|
categoryCode = EtsyRESTAPIManager.settingsDictionary["categories"]!["paper_goods"] as! Int
|
|
break
|
|
case "Patterns":
|
|
categoryCode = EtsyRESTAPIManager.settingsDictionary["categories"]!["patterns"] as! Int
|
|
break
|
|
case "Plants and Edibles":
|
|
categoryCode = EtsyRESTAPIManager.settingsDictionary["categories"]!["plants_and_edibles"] as! Int
|
|
break
|
|
case "Quilts":
|
|
categoryCode = EtsyRESTAPIManager.settingsDictionary["categories"]!["quilts"] as! Int
|
|
break
|
|
case "Supplies":
|
|
categoryCode = EtsyRESTAPIManager.settingsDictionary["categories"]!["supplies"] as! Int
|
|
break
|
|
case "Toys & Hobbies":
|
|
categoryCode = EtsyRESTAPIManager.settingsDictionary["categories"]!["toys"] as! Int
|
|
break
|
|
case "Vintage":
|
|
categoryCode = EtsyRESTAPIManager.settingsDictionary["categories"]!["vintage"] as! Int
|
|
break
|
|
case "Wedding":
|
|
categoryCode = EtsyRESTAPIManager.settingsDictionary["categories"]!["weddings"] as! Int
|
|
break
|
|
case "Woodworking":
|
|
categoryCode = EtsyRESTAPIManager.settingsDictionary["categories"]!["woodworking"] as! Int
|
|
break
|
|
default:
|
|
break
|
|
}
|
|
|
|
let body: [String: AnyObject] = [ "title": self.itemTitle.text,
|
|
"quantity":self.itemQuantity.text,
|
|
"description":self.itemDescription.text,
|
|
"price":self.itemPrice.text,
|
|
"category_id":categoryCode,
|
|
"who_made": EtsyRESTAPIManager.settingsDictionary["who_made"] as! String,
|
|
"is_supply": EtsyRESTAPIManager.settingsDictionary["is_supply"]!,
|
|
"when_made": EtsyRESTAPIManager.settingsDictionary["when_made"] as! String,
|
|
"shipping_template_id": EtsyRESTAPIManager.settingsDictionary["shipping_template_id"] as! Int,
|
|
"state":"draft"
|
|
|
|
]
|
|
|
|
self.etsyManager.sendPOSTRequest("/listings", body: body, onCompletion: {
|
|
(dict, error) -> Void in
|
|
|
|
var results = (dict as! [[String : AnyObject]])[0]
|
|
|
|
if((self.newInProgressListing["networkIDs"] == nil)){
|
|
self.newInProgressListing["networkIDs"] = Dictionary<String, AnyObject>()
|
|
}
|
|
var networkIDs = (self.newInProgressListing["networkIDs"] as! Dictionary<String, AnyObject>)
|
|
networkIDs["etsy"] = results["listing_id"] as? Int
|
|
self.newInProgressListing["networkIDs"] = networkIDs
|
|
|
|
let imageBody = ["listing_id": networkIDs["etsy"] as! Int,
|
|
//"type":"image/jpg",
|
|
"image": UIImageJPEGRepresentation(self.itemPictureMain.image!, 0.45)!]
|
|
|
|
self.etsyManager.sendPOSTRequest(("listings/\(networkIDs["etsy"] as! Int)/images"), body: imageBody, onCompletion: {
|
|
(dict, error) -> Void in
|
|
|
|
dispatch_group_leave(postingGroup)
|
|
})
|
|
|
|
|
|
})
|
|
|
|
}
|
|
|
|
|
|
//post to facebook
|
|
if(self.networksDictionary["facebook"]!){
|
|
dispatch_group_enter(postingGroup)
|
|
let fb_group: dispatch_group_t = dispatch_group_create()
|
|
|
|
let tmpDirURL = NSURL.fileURLWithPath(NSTemporaryDirectory(), isDirectory: true)
|
|
let fileURL = tmpDirURL.URLByAppendingPathComponent("main").URLByAppendingPathExtension("jpg")
|
|
print("FilePath: \(fileURL.path!)")
|
|
do {
|
|
try UIImageJPEGRepresentation(self.itemPictureMain.image!, 0.45)!.writeToFile(fileURL.path!, options: NSDataWritingOptions.AtomicWrite)
|
|
}catch{
|
|
(error)
|
|
print(error)
|
|
}
|
|
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: {
|
|
(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])\"}"
|
|
}
|
|
|
|
|
|
self.graphManager.makePOSTResquest("me/feed", params: listingParams, onComplete: {
|
|
(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["facebook"] = listingId as! String
|
|
self.newInProgressListing["networkIDs"] = networkIDs
|
|
dispatch_group_leave(postingGroup)
|
|
|
|
|
|
})
|
|
|
|
})
|
|
|
|
}
|
|
|
|
|
|
//notifies once all selected networks have been posted to
|
|
dispatch_group_notify(postingGroup, dispatch_get_main_queue(), {
|
|
self.newInProgressListing.update(["listingID": newListingRef.key,
|
|
"seller email": (NSUserDefaults.standardUserDefaults().objectForKey("email") as? String)!,
|
|
"listingTitle": self.itemTitle.text,
|
|
"listingPrice": self.itemPrice.text,
|
|
"listingCategory": self.itemCategory.text,
|
|
"listingQuantity": self.itemQuantity.text,
|
|
"listingDescription": self.itemDescription.text,
|
|
"numberOfSupportingImages" : ((self.itemListingDictionary["pictures"] as? [UIImageView])?.count)! - 1,
|
|
"isListingDraft": false,
|
|
"networks": self.networksDictionary])
|
|
|
|
|
|
self.firManager.ref.observeSingleEventOfType(.Value, withBlock: { snapshot in
|
|
|
|
let databaseDict = snapshot.value as! [String : AnyObject]
|
|
|
|
let storageRef = self.firManager.storage.referenceForURL((databaseDict["image_storage"] as? String)!)
|
|
|
|
var imageURLs: [String] = []
|
|
let completion: ServiceResponse = {(metadata, error) -> Void in
|
|
|
|
//for ebay due to its unique posting flow, will use firbase image storage url to add pictures
|
|
if (self.networksDictionary["ebay"]!){
|
|
imageURLs.append((metadata?.downloadURL()?.absoluteString)!)
|
|
dispatch_group_leave(postingGroup)
|
|
}else{
|
|
dispatch_group_leave(postingGroup)
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
//change code to new multi-image saving
|
|
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(), {
|
|
newListingRef.setValue(self.newInProgressListing)
|
|
|
|
//register new listing id in global path of firebase root'
|
|
self.firManager.ref.child("Global_listings").child(newListingRef.key).setValue(newListingRef.key)
|
|
self.firManager.indicator.stopAnimating()
|
|
|
|
let alert = UIAlertController(title: "Listing Posted Successfully", message: "Your listing was submitted to all networks successfully", preferredStyle: .Alert)
|
|
|
|
alert.addAction(UIAlertAction(title: "OK", style: .Default, handler:{(action: UIAlertAction!) in
|
|
|
|
self.cancel(self)
|
|
alert.dismissViewControllerAnimated(true, completion: nil)
|
|
}))
|
|
|
|
self.presentViewController(alert, animated: true, completion: nil)
|
|
})
|
|
|
|
})
|
|
|
|
})
|
|
|
|
})
|
|
|
|
}
|
|
}
|
|
|
|
@IBAction func editListing(sender: AnyObject) {
|
|
|
|
self.performSegueWithIdentifier("EditListingSegue", sender: self)
|
|
}
|
|
}
|
|
extension ListingPreviewViewController: UICollectionViewDelegate {
|
|
|
|
/*
|
|
// Uncomment this method to specify if the specified item should be highlighted during tracking
|
|
override func collectionView(collectionView: UICollectionView, shouldHighlightItemAtIndexPath indexPath: NSIndexPath) -> Bool {
|
|
return true
|
|
}
|
|
*/
|
|
|
|
/*
|
|
// Uncomment this method to specify if the specified item should be selected
|
|
override func collectionView(collectionView: UICollectionView, shouldSelectItemAtIndexPath indexPath: NSIndexPath) -> Bool {
|
|
return true
|
|
}
|
|
*/
|
|
|
|
/*
|
|
// Uncomment these methods to specify if an action menu should be displayed for the specified item, and react to actions performed on the item
|
|
override func collectionView(collectionView: UICollectionView, shouldShowMenuForItemAtIndexPath indexPath: NSIndexPath) -> Bool {
|
|
return false
|
|
}
|
|
|
|
override func collectionView(collectionView: UICollectionView, canPerformAction action: Selector, forItemAtIndexPath indexPath: NSIndexPath, withSender sender: AnyObject?) -> Bool {
|
|
return false
|
|
}
|
|
|
|
override func collectionView(collectionView: UICollectionView, performAction action: Selector, forItemAtIndexPath indexPath: NSIndexPath, withSender sender: AnyObject?) {
|
|
|
|
}
|
|
*/
|
|
|
|
}
|
|
|
|
//Mark: - UICollectionViewDataSource methods
|
|
//need to dynamically show, hide, and rearrange the network cells based on users choice of networks
|
|
extension ListingPreviewViewController: UICollectionViewDataSource {
|
|
func numberOfSectionsInCollectionView(collectionView: UICollectionView) -> Int {
|
|
// #warning Incomplete implementation, return the number of sections
|
|
return 1
|
|
}
|
|
|
|
|
|
func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
|
|
// #warning Incomplete implementation, return the number of items
|
|
return 4
|
|
}
|
|
|
|
func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
|
|
|
|
let cell: UICollectionViewCell!
|
|
|
|
switch (indexPath.row){
|
|
case 0:
|
|
cell = collectionView.dequeueReusableCellWithReuseIdentifier("ebay", forIndexPath: indexPath)
|
|
|
|
if(self.networksDictionary["ebay"] == false){
|
|
cell.hidden = true
|
|
}
|
|
else{
|
|
cell.hidden = false
|
|
}
|
|
break
|
|
|
|
case 1:
|
|
cell = collectionView.dequeueReusableCellWithReuseIdentifier("amazon", forIndexPath: indexPath)
|
|
|
|
if(self.networksDictionary["amazon"] == false){
|
|
cell.hidden = true
|
|
}
|
|
else{
|
|
cell.hidden = false
|
|
}
|
|
break
|
|
case 2:
|
|
cell = collectionView.dequeueReusableCellWithReuseIdentifier("etsy", forIndexPath: indexPath)
|
|
|
|
if(self.networksDictionary["etsy"] == false){
|
|
cell.hidden = true
|
|
}
|
|
else{
|
|
cell.hidden = false
|
|
}
|
|
break
|
|
default:
|
|
cell = collectionView.dequeueReusableCellWithReuseIdentifier("facebook", forIndexPath: indexPath)
|
|
|
|
if(self.networksDictionary["facebook"] == false){
|
|
cell.hidden = true
|
|
}
|
|
else{
|
|
cell.hidden = false
|
|
}
|
|
break
|
|
}
|
|
|
|
|
|
return cell
|
|
}
|
|
|
|
}
|
|
|