Merged branch master into Seller-Networks-Settings

This commit is contained in:
Okechi Onyeje 2016-08-01 04:46:40 -04:00
commit b3e38fb0ca
14 changed files with 1817 additions and 849 deletions

BIN
.DS_Store vendored

Binary file not shown.

View File

@ -14,6 +14,8 @@
3E1AA4351D0DD173005FCCBB /* SettingsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3E1AA4341D0DD173005FCCBB /* SettingsViewController.swift */; };
3E1B1F091D24926C00DBCF08 /* EbaySettingsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3E1B1F081D24926C00DBCF08 /* EbaySettingsViewController.swift */; };
3E1B1F0B1D2493EE00DBCF08 /* EtsySettingsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3E1B1F0A1D2493EE00DBCF08 /* EtsySettingsViewController.swift */; };
3E1DC3CD1D4232490091BC60 /* CategoriesTableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3E1DC3CC1D4232490091BC60 /* CategoriesTableViewController.swift */; };
3E1DC3CF1D42328C0091BC60 /* CategoryCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3E1DC3CE1D42328C0091BC60 /* CategoryCell.swift */; };
3E4897D11D0067030069F742 /* FirebaseManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3E4897D01D0067030069F742 /* FirebaseManager.swift */; };
3E6CC3571CF2A94B00E00A70 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3E6CC3561CF2A94B00E00A70 /* AppDelegate.swift */; };
3E6CC3591CF2A94B00E00A70 /* SignInViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3E6CC3581CF2A94B00E00A70 /* SignInViewController.swift */; };
@ -71,6 +73,8 @@
3E1AA4341D0DD173005FCCBB /* SettingsViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SettingsViewController.swift; sourceTree = "<group>"; };
3E1B1F081D24926C00DBCF08 /* EbaySettingsViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = EbaySettingsViewController.swift; sourceTree = "<group>"; };
3E1B1F0A1D2493EE00DBCF08 /* EtsySettingsViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = EtsySettingsViewController.swift; sourceTree = "<group>"; };
3E1DC3CC1D4232490091BC60 /* CategoriesTableViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CategoriesTableViewController.swift; sourceTree = "<group>"; };
3E1DC3CE1D42328C0091BC60 /* CategoryCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CategoryCell.swift; sourceTree = "<group>"; };
3E4897D01D0067030069F742 /* FirebaseManager.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FirebaseManager.swift; sourceTree = "<group>"; };
3E6CC3531CF2A94B00E00A70 /* Vendoo.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Vendoo.app; sourceTree = BUILT_PRODUCTS_DIR; };
3E6CC3561CF2A94B00E00A70 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
@ -316,6 +320,8 @@
3EC3252B1CF8944800626C48 /* NewItemPostingSession */ = {
isa = PBXGroup;
children = (
3E1DC3CE1D42328C0091BC60 /* CategoryCell.swift */,
3E1DC3CC1D4232490091BC60 /* CategoriesTableViewController.swift */,
3EC3252C1CF894C400626C48 /* ItemImagePickerViewController.swift */,
3ECEDB861CF9C722003566B3 /* ListingPreviewViewController.swift */,
);
@ -634,12 +640,14 @@
3EC325201CF7C3AB00626C48 /* NetworkTableViewCell.swift in Sources */,
3EC325261CF7E90000626C48 /* FacebookGraphAPIManager.swift in Sources */,
3E7CF3FC1CF5FE9400F486B2 /* RecoverPasswordViewController.swift in Sources */,
3E1DC3CF1D42328C0091BC60 /* CategoryCell.swift in Sources */,
3EC325111CF703A600626C48 /* ItemCell.swift in Sources */,
3EA668A11D02836C00EE57A8 /* EbayWebServiceManager.swift in Sources */,
3ECEDB871CF9C722003566B3 /* ListingPreviewViewController.swift in Sources */,
3E1B1F0B1D2493EE00DBCF08 /* EtsySettingsViewController.swift in Sources */,
3EC325231CF7DA5500626C48 /* HomeViewController.swift in Sources */,
3EC3252D1CF894C400626C48 /* ItemImagePickerViewController.swift in Sources */,
3E1DC3CD1D4232490091BC60 /* CategoriesTableViewController.swift in Sources */,
3E7CF4011CF6366300F486B2 /* EtsyRESTAPIManager.swift in Sources */,
3EC325151CF7104300626C48 /* ItemTableViewController.swift in Sources */,
3EFB0E331D0B968300A05D7A /* SideMenuView.swift in Sources */,

BIN
Vendoo/.DS_Store vendored

Binary file not shown.

View File

@ -0,0 +1,195 @@
//
// CategoriesTableViewController.swift
// Vendoo
//
// Created by Okechi Onyeje on 7/16/16.
// Copyright © 2016 Okechi Onyeje. All rights reserved.
//
import UIKit
class CategoriesTableViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
private var itemListingDictionary: Dictionary<String, AnyObject>! = Dictionary<String, AnyObject>()
private var graphManager: FacebookGraphAPIManager! = nil
private var firManager: FirebaseManager! = nil
private var etsyManager: EtsyRESTAPIManager! = nil
private var ebayManager: EbayWebServiceManager! = EbayWebServiceManager()
private var selectedCategory: String!
private var categories = ["Accessories",
"Art",
"Bath & Beauty",
"Bags & Purses",
"Books",
"Candles",
"Ceramics & Pottery",
"Children",
"Clothing",
"Crochet",
"Dolls & Miniatures",
"Everything Else",
"Furniture",
"Geekery",
"Glass",
"Holidays",
"Houseware",
"Jewelry",
"Knitting",
"Music",
"Needlecraft",
"Paper Goods",
"Patterns",
"Plants and Edibles",
"Quilts",
"Supplies",
"Toys",
"Vintage",
"Wedding",
"Woodworking"]
@IBOutlet weak var table: UITableView!
override func viewDidLoad() {
super.viewDidLoad()
self.table.delegate = self
self.table.dataSource = self
// Uncomment the following line to preserve selection between presentations
// self.clearsSelectionOnViewWillAppear = false
// Uncomment the following line to display an Edit button in the navigation bar for this view controller.
// self.navigationItem.rightBarButtonItem = self.editButtonItem()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
// MARK: - Table view data source
func numberOfSectionsInTableView(tableView: UITableView) -> Int {
// #warning Incomplete implementation, return the number of sections
return 1
}
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
// #warning Incomplete implementation, return the number of rows
return self.categories.count
}
func setListingDictionary(listingDictionary: Dictionary<String, AnyObject>){
self.itemListingDictionary = listingDictionary
}
func setManagers(fbManager: FacebookGraphAPIManager, fireManager: FirebaseManager, ebayManager: EbayWebServiceManager, etsyManager: EtsyRESTAPIManager){
self.graphManager = fbManager
self.firManager = fireManager
self.ebayManager = ebayManager
self.etsyManager = etsyManager
}
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell: CategoryCell! = tableView.dequeueReusableCellWithIdentifier("CategoryCell", forIndexPath: indexPath) as? CategoryCell
// Configure the cell...
dispatch_async(dispatch_get_main_queue(), {
cell.categoryName.text = self.categories[indexPath.row]
//ebay
if(true){
cell.networks.cellForItemAtIndexPath(NSIndexPath(forRow: 0, inSection: 0))?.hidden = true
}
//amazon
if(true){
cell.networks.cellForItemAtIndexPath(NSIndexPath(forRow: 1, inSection: 0))?.hidden = true
}
//etsy
if(false){
cell.networks.cellForItemAtIndexPath(NSIndexPath(forRow: 2, inSection: 0))?.hidden = true
}
//facebook
if(false){
cell.networks.cellForItemAtIndexPath(NSIndexPath(forRow: 3, inSection: 0))?.hidden = true
}
})
return cell
}
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
self.selectedCategory = self.categories[indexPath.row]
self.performSegueWithIdentifier("NetworkSelectionSegue", sender: self)
}
/*
// Override to support conditional editing of the table view.
override func tableView(tableView: UITableView, canEditRowAtIndexPath indexPath: NSIndexPath) -> Bool {
// Return false if you do not want the specified item to be editable.
return true
}
*/
/*
// Override to support editing the table view.
override func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) {
if editingStyle == .Delete {
// Delete the row from the data source
tableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: .Fade)
} else if editingStyle == .Insert {
// Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view
}
}
*/
/*
// Override to support rearranging the table view.
override func tableView(tableView: UITableView, moveRowAtIndexPath fromIndexPath: NSIndexPath, toIndexPath: NSIndexPath) {
}
*/
/*
// Override to support conditional rearranging of the table view.
override func tableView(tableView: UITableView, canMoveRowAtIndexPath indexPath: NSIndexPath) -> Bool {
// Return false if you do not want the item to be re-orderable.
return true
}
*/
// 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 == "NetworkSelectionSegue") {
self.itemListingDictionary["category"] = self.selectedCategory
(segue.destinationViewController as! NetworksTableViewController).setListingDictionary(self.itemListingDictionary)
(segue.destinationViewController as! NetworksTableViewController).setManagers(self.graphManager,
fireManager: self.firManager, ebayManager: self.ebayManager, etsyManager: self.etsyManager )
(segue.destinationViewController as! NetworksTableViewController).setNetworkSelectFunctionality(true)
//print(self.categoryPicker.selectedRowInComponent(0))
}
}
@IBAction func cancelCategorySelection(sender: AnyObject) {
self.dismissViewControllerAnimated(true, completion: nil)
}
}

113
Vendoo/CategoryCell.swift Normal file
View File

@ -0,0 +1,113 @@
//
// CategoryCell.swift
// Vendoo
//
// Created by Okechi Onyeje on 7/18/16.
// Copyright © 2016 Okechi Onyeje. All rights reserved.
//
import UIKit
class CategoryCell: UITableViewCell, UICollectionViewDelegate {
@IBOutlet weak var categoryName: UILabel!
@IBOutlet weak var networks: UICollectionView!
override func awakeFromNib() {
super.awakeFromNib()
// Initialization code
self.networks.delegate = self
self.networks.dataSource = self
self.networks.backgroundView?.backgroundColor = UIColor.whiteColor()
}
override func setSelected(selected: Bool, animated: Bool) {
super.setSelected(selected, animated: animated)
// Configure the view for the selected state
}
}
// MARK: UICollectionViewDataSource
extension CategoryCell: 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)
break
case 1:
cell = collectionView.dequeueReusableCellWithReuseIdentifier("amazon", forIndexPath: indexPath)
break
case 2:
cell = collectionView.dequeueReusableCellWithReuseIdentifier("etsy", forIndexPath: indexPath)
break
default:
cell = collectionView.dequeueReusableCellWithReuseIdentifier("facebook", forIndexPath: indexPath)
break
}
// Configure the cell (in this case show or hide the cell depending on which network the item is being listed on)
return cell
}
}
// MARK: UICollectionViewDelegate
extension CategoryCell {
/*
// 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?) {
}
*/
}

View File

@ -15,7 +15,7 @@ import Locksmith
import AFNetworking
typealias ServiceResponse = (JSON, NSError?) -> Void
typealias ServiceResponse = (AnyObject?, NSError?) -> Void
class EtsyRESTAPIManager: NSObject {
@ -73,7 +73,7 @@ class EtsyRESTAPIManager: NSObject {
EtsyRESTAPIManager.settingsDictionary = ([
"who_made":"i_did",
"is_supply":"true",
"is_supply":true,
"when_made":"made_to_order"
] as Dictionary<String, AnyObject>)
@ -213,6 +213,13 @@ extension EtsyRESTAPIManager {
EtsyRESTAPIManager.settingsDictionary["userID"] = dict2[0]["login_name"]!
NSUserDefaults.standardUserDefaults().setObject(EtsyRESTAPIManager.settingsDictionary, forKey: "etsySettings")
self.sendGETRequest("/shops/__SELF__/payment_templates", onCompletion: {
(data, error) -> Void in
self.sendGETRequest("/users/__SELF__/shipping/templates", onCompletion: nil)
})
}
, failure: { error in
print(error)
@ -392,8 +399,8 @@ extension EtsyRESTAPIManager {
}
//sends the pregenerated url as a request to api service
func sendGETRequest(request: String, onCompletion: ServiceResponse) {
let request = NSMutableURLRequest(URL: NSURL(string: request)!)
func sendGETRequest(request: String, onCompletion: ServiceResponse?) {
/* let request = NSMutableURLRequest(URL: NSURL(string: request)!)
let session = NSURLSession.sharedSession()
@ -405,12 +412,93 @@ extension EtsyRESTAPIManager {
onCompletion(nil, error)
}
})
task.resume()
task.resume()*/
self.oauthswift.client.get(self.baseURL + request,
success: {
(data, response) -> Void in
let dataString = NSString(data: data, encoding: NSUTF8StringEncoding)
let dict = self.convertStringToDictionary(dataString! as String)
print(dict)
print(response)
switch (request) {
case "/shops/__SELF__/payment_templates" :
if ((dict!["results"]!.isKindOfClass(NSNull.classForCoder()))) {
//@TODO: Put payment template parameters in function call
self.oauthswift.client.post(self.baseURL + "/shops/__SELF__/payment_templates",
parameters: [
"shop_id":"__SELF__",
],
headers: nil,
success: {
(data, response) -> Void in
let dataString = NSString(data: data, encoding: NSUTF8StringEncoding)
let dict = self.convertStringToDictionary(dataString! as String)
print(dict)
print(response)
onCompletion!(nil,nil)
},
failure: {
(error) -> Void in
print(error)
}
)
}
break
case "/users/__SELF__/shipping/templates" :
var dict2 = (dict!["results"] as! [[String : AnyObject]])
if ((dict!["results"]!.isKindOfClass(NSNull.classForCoder()))) {
//@TODO: Put payment template parameters in function call
self.oauthswift.client.post(self.baseURL + "/shipping/templates",
parameters: [
"title":"vendoo_default",
"origin_country_id":209,
"primary_cost":2.00,
"secondary_cost":1.00
],
headers: nil,
success: {
(data, response) -> Void in
let dataString = NSString(data: data, encoding: NSUTF8StringEncoding)
let dict = self.convertStringToDictionary(dataString! as String)
print(dict)
print(response)
},
failure: {
(error) -> Void in
print(error)
}
)
}else {
EtsyRESTAPIManager.settingsDictionary["shipping_template_id"] = dict2[0]["shipping_template_id"]!
NSUserDefaults.standardUserDefaults().setObject(EtsyRESTAPIManager.settingsDictionary, forKey: "etsySettings")
}
break
default:
break
}
},
failure: {
(error) -> Void in
print(error)
}
)
}
//sends the pregenerated url as a request to api service
func sendPOSTRequest(request: String, body: [String: AnyObject], onCompletion: ServiceResponse) {
let request = NSMutableURLRequest(URL: NSURL(string: request)!)
func sendPOSTRequest(request: String, var body: [String: AnyObject], onCompletion: ServiceResponse?) {
/* let request = NSMutableURLRequest(URL: NSURL(string: request)!)
// Set the method to POST
request.HTTPMethod = "POST"
@ -433,8 +521,196 @@ extension EtsyRESTAPIManager {
} catch {
// Create your personal error
onCompletion(nil, nil)
}*/
if(request.containsString("listings/") && request.containsString("/images")){
let url = NSURL(string: self.baseURL + request)!
let requested = NSMutableURLRequest(URL: url)
requested.HTTPMethod = "POST"
let boundary = "Boundary-\(NSUUID().UUIDString)"
/*var headers = oauthswift.client.credential.makeHeaders(url, method: OAuthSwiftHTTPRequest.Method.POST, parameters: ["Content-Type":"multipart/form-dataheader"]) // here with create the authentification headers
requested.addValue(self.apiKey, forHTTPHeaderField: "Authorization" )
//define the multipart request type
requested.addValue("\((body["image"] as! NSData).length)", forHTTPHeaderField: "Content-Length")
requested.addValue("bytes", forHTTPHeaderField: "Content-Transfer-Encoding")
requested.setValue("multipart/form-data; boundary=\(boundary)", forHTTPHeaderField: "Content-Type")
//requested.addValue(self.apiKey, forHTTPHeaderField: "API-KEY")
requested.HTTPBody = self.oauthswift.client.multiPartBodyFromParams(body, boundary: boundary)
/*let body1 = NSMutableData()
let fname = "main.jpg"
let mimetype = "image/jpg"
//define the data post parameter
body1.appendData("--\(boundary)\r\n".dataUsingEncoding(NSUTF8StringEncoding)!)
body1.appendData("Content-Disposition:form-data; name=\"listing_id\"\r\n\r\n".dataUsingEncoding(NSUTF8StringEncoding)!)
body1.appendData("\(body["listing_id"] as! Int)\r\n".dataUsingEncoding(NSUTF8StringEncoding)!)
body1.appendData("--\(boundary)\r\n".dataUsingEncoding(NSUTF8StringEncoding)!)
body1.appendData("Content-Disposition:form-data; name=\"image\"; filename=\"\(fname)\"\r\n".dataUsingEncoding(NSUTF8StringEncoding)!)
body1.appendData("Content-Type: \(mimetype)\r\n\r\n".dataUsingEncoding(NSUTF8StringEncoding)!)
body1.appendData((body["image"] as! NSData))
body1.appendData("\r\n".dataUsingEncoding(NSUTF8StringEncoding)!)
body1.appendData("--\(boundary)--\r\n".dataUsingEncoding(NSUTF8StringEncoding)!)
requested.HTTPBody = body1*/
let session = NSURLSession.sharedSession()
let task = session.dataTaskWithRequest(requested) { data, response, error in
if nil != error {
// something went wrong
print(error)
onCompletion!(nil,nil)
switch (request) {
default:
break
}
}
else {
let dataString = NSString(data: data!, encoding: NSUTF8StringEncoding)
let dict = self.convertStringToDictionary(dataString! as String)
print(dict)
print(response)
onCompletion!(nil, nil)
switch (request) {
default:
break
}
}
}
task.resume()*/
/*
//var headers = oauthswift.client.credential.makeHeaders(url, method: OAuthSwiftHTTPRequest.Method.POST, parameters: ["Content-Type":"multipart/form-dataheader"]) // here with create the authentification headers
// here add additional headers "Content-type", etc..
requested.addValue("multipart/form-data; boundary=\(boundary)", forHTTPHeaderField: "Content-Type")
requested.addValue("\((body["image"] as! NSData).length)", forHTTPHeaderField: "Content-Length")
requested.addValue("bytes", forHTTPHeaderField: "Content-Transfer-Encoding")
//requested.addValue("form-data; name='Main Image'; filename='mainImage.jpg'", forHTTPHeaderField: "Content-Disposition")
requested.HTTPBody = self.oauthswift.client.multiPartBodyFromParams(body, boundary: "-XXX--")
let session = NSURLSession.sharedSession()
let task = session.dataTaskWithRequest(requested) { data, response, error in
if nil != error {
// something went wrong
print(error)
onCompletion!(nil,nil)
switch (request) {
default:
break
}
}
else {
let dataString = NSString(data: data!, encoding: NSUTF8StringEncoding)
let dict = self.convertStringToDictionary(dataString! as String)
print(dict)
print(response)
onCompletion!(nil, nil)
switch (request) {
default:
break
}
}
}
task.resume()
*/
//body["oauth_verifier"] = (self.oauthswift.client.credential.oauth_verifier)
//@FIXME: multipart post request is returning with oauth signature invalid for uploading image in etsy
self.oauthswift.client.postMultiPartRequest(self.baseURL + request, method: OAuthSwiftHTTPRequest.Method.POST, parameters: body, success: {
(data, response) -> Void in
let dataString = NSString(data: data, encoding: NSUTF8StringEncoding)
let dict = self.convertStringToDictionary(dataString! as String)
print(dict)
print(response)
onCompletion!(nil, nil)
switch (request) {
default:
break
}
},
failure: {
(error) -> Void in
print(error)
onCompletion!(nil,nil)
switch (request) {
default:
break
}
}
)
}else {
self.oauthswift.client.post(self.baseURL + request, parameters: body, headers: nil,
success: {
(data, response) -> Void in
let dataString = NSString(data: data, encoding: NSUTF8StringEncoding)
let dict = self.convertStringToDictionary(dataString! as String)
print(dict)
print(response)
switch (request) {
case "/shipping/templates":
break
case "/listings":
var dict2 = (dict!["results"] as! [[String : AnyObject]])
print(((dict2[0]["listing_id"])!))
onCompletion!(dict2, nil)
break
default:
break
}
},
failure: {
(error) -> Void in
print(error)
switch (request) {
case "/shipping/templates":
break
case "/listings":
print(error.userInfo["Response-Body"])
if((error.userInfo["Response-Body"]!.isEqualToString("price is below listing fee."))) {
//@TODO: add alert to let user know that the price they have given is too low for etsy
}
break
default:
break
}
}
)
}
}
}

View File

@ -21,7 +21,7 @@ protocol FacebookGraphAPIManagerDelegate {
}
/*
NOTES:
NOTE:
I am able to authorize application for use with facebook and deauthorize it while showing the toggle button switching back and forth, but during the last step of the process, for some reason NSUserDefault key for fbauthorized is not being called, in response handler, may need to run in a different thread
NEED to figure out how to post picture and text as the same timeline post current can only upload item title, price and description.
@ -173,12 +173,13 @@ extension FacebookGraphAPIManager {
}
//used to post to users timeline, path must start with '/'
func makePOSTResquest(requestPath: String!, params: [NSObject: AnyObject]!){
func makePOSTResquest(requestPath: String!, var params: [NSObject: AnyObject]!, onComplete: ServiceResponse){
/*if(FBSDKAccessToken.currentAccessToken() != nil && FBSDKAccessToken.currentAccessToken().hasGranted("pubish_actions")){*/
if(FBSDKAccessToken.currentAccessToken() != nil && FBSDKAccessToken.currentAccessToken().hasGranted("publish_actions")){
params["access_token"] = self.apiKey + "|" + self.apiSecret
let graphRequest: FBSDKGraphRequest = FBSDKGraphRequest(graphPath: requestPath, parameters: params, HTTPMethod: "POST")
let graphRequest: FBSDKGraphRequest = FBSDKGraphRequest(graphPath: requestPath + "?access_token=" + FBSDKAccessToken.currentAccessToken().tokenString, parameters: params, HTTPMethod: "POST")
graphRequest.startWithCompletionHandler({
(id, result, error) -> Void in
@ -186,22 +187,23 @@ extension FacebookGraphAPIManager {
if(error == nil){
print(result["id"])
self.delegate?.listingUploadedFB((result["id"] as? String)!)
//self.delegate?.listingUploadedFB((result["id"] as? String)!)
print(result)
onComplete((result["id"] as? String)!, nil)
}
else{
print(error)
}
//save id in firebase so retrieval can be done later
})
//}
}
/*else{
print("must reauthenticate facebook")
}*/
}
*/}
//used to delete permissions and listings from users timeline, path must start with '/'
func makeDELETIONResquest(requestPath: String!, params: [NSObject: AnyObject]!) -> Bool{

View File

@ -34,16 +34,6 @@ class HomeViewController: UITabBarController {
for (key, values) in listingDict! {
let serviceGroup: dispatch_group_t = dispatch_group_create()
//@TODO: this is now getting all images but it is only displaying the last retrieved listings's set of images
/*dispatch_group_notify(countGroup, dispatch_get_main_queue(), {
print(HomeViewController.completionCount)
HomeViewController.completionCount += 1
if(HomeViewController.completionCount == 4){
HomeViewController.completionCount = 0
dispatch_group_leave(serviceGroup)
}
})*/
self.firebaseManager.ref.observeSingleEventOfType(.Value, withBlock: { snapshot in
let databaseDict = snapshot.value as! [String : AnyObject]
@ -52,7 +42,6 @@ class HomeViewController: UITabBarController {
let mainListingImage = storageRef.child("images/\(key)/main.jpg")
//@TODO: add in logic to programmatically retrieve each stored image and store in listing object as a way to display each image
dispatch_group_enter(serviceGroup)
mainListingImage.dataWithMaxSize(10 * 1024 * 1024, completion: {
(dataMain, error) -> Void in

View File

@ -23,7 +23,7 @@ class ItemImagePickerViewController: UIViewController {
@IBOutlet weak var possibleItemImage3: UIImageView!
@IBOutlet weak var possibleItemImage4: UIImageView!
@IBOutlet weak var possibleItemImage5: UIImageView!
@IBOutlet weak var itemQuantity: UITextField!
@IBOutlet weak var itemName: UITextField!
@IBOutlet weak var itemDescription: UITextView!
@IBOutlet weak var itemPrice: UITextField!
@ -48,6 +48,7 @@ class ItemImagePickerViewController: UIViewController {
self.categoryPicker.dataSource = self
self.itemDescription.delegate = self
self.itemName.delegate = self
self.itemQuantity.delegate = self
self.itemPrice.delegate = self
self.picker.delegate = self
@ -91,13 +92,13 @@ extension ItemImagePickerViewController {
// Get the new view controller using segue.destinationViewController.
// Pass the selected object to the new view controller.
if(segue.identifier == "SelectNetworkSegue"){
if(segue.identifier == "CategoriesSegue"){
print(self.itemName.text!)
print(self.itemDescription.text!)
print(self.possibleItemImageMain.image)
print(self.itemPrice.text!)
var dict: Dictionary<String, AnyObject!> = ["title":self.itemName.text!, "description":self.itemDescription.text!, "price":self.itemPrice.text!, "category":self.pickerData[self.categoryPicker.selectedRowInComponent(0)]]
var dict: Dictionary<String, AnyObject!> = ["title":self.itemName.text!, "description":self.itemDescription.text!, "price":self.itemPrice.text!, "quantity":self.itemQuantity.text!]
var counter = 0
var images: [UIImageView] = []
for bool in self.itemImagesSelections {
@ -124,12 +125,13 @@ extension ItemImagePickerViewController {
}
dict["pictures"] = images
(segue.destinationViewController as! NetworksTableViewController).setListingDictionary(dict)
(segue.destinationViewController as! NetworksTableViewController).setManagers(((self.tabBarController as? HomeViewController)?.fbGraphManager)!,
fireManager: ((self.tabBarController as? HomeViewController)?.firebaseManager)!, ebayManager: ((self.tabBarController as? HomeViewController)?.ebayGraphManager)! )
(segue.destinationViewController as! CategoriesTableViewController).setListingDictionary(dict)
(segue.destinationViewController as! CategoriesTableViewController).setManagers(((self.tabBarController as? HomeViewController)?.fbGraphManager)!,
fireManager: ((self.tabBarController as? HomeViewController)?.firebaseManager)!, ebayManager: ((self.tabBarController as? HomeViewController)?.ebayGraphManager)!,
etsyManager: ((self.tabBarController as? HomeViewController)?.etsyManager)!)
(segue.destinationViewController as! NetworksTableViewController).setNetworkSelectFunctionality(true)
print(self.categoryPicker.selectedRowInComponent(0))
//(segue.destinationViewController as! NetworksTableViewController).setNetworkSelectFunctionality(true)
//print(self.categoryPicker.selectedRowInComponent(0))
}

View File

@ -14,11 +14,12 @@
*/
import UIKit
//@TODO: Need to make multiple images work for etsy and facebook and need to implement multiple images saving to firebase
class ListingPreviewViewController: UIViewController {
//IBOutlets
@IBOutlet weak var containerScrollView: UIScrollView!
@IBOutlet weak var itemQuantity: UITextView!
@IBOutlet weak var itemPicture: UIImageView!
@IBOutlet weak var itemTitle: UITextView!
@IBOutlet weak var itemDescription: UITextView!
@ -31,9 +32,11 @@ class ListingPreviewViewController: UIViewController {
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>()
override func viewDidLoad() {
super.viewDidLoad()
@ -44,7 +47,7 @@ class ListingPreviewViewController: UIViewController {
self.networks.delegate = self
self.networks.dataSource = self
self.networks.backgroundView?.backgroundColor = UIColor.whiteColor()
self.graphManager.delegate = self
//self.graphManager.delegate = self
}
override func viewDidAppear(animated: Bool) {
@ -64,6 +67,7 @@ class ListingPreviewViewController: UIViewController {
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 setDictionary(netdictionary:Dictionary<String, Bool>, itemdictionary: Dictionary<String, AnyObject!>){
@ -71,10 +75,11 @@ class ListingPreviewViewController: UIViewController {
self.itemListingDictionary = itemdictionary
}
func setManagers(fbManager: FacebookGraphAPIManager, fireManager: FirebaseManager, ebayManager: EbayWebServiceManager){
func setManagers(fbManager: FacebookGraphAPIManager, fireManager: FirebaseManager, ebayManager: EbayWebServiceManager, etsyManager: EtsyRESTAPIManager){
self.graphManager = fbManager
self.firManager = fireManager
self.ebayManager = ebayManager
self.etsyManager = etsyManager
}
@ -92,15 +97,22 @@ class ListingPreviewViewController: UIViewController {
vc.itemPrice.text? = self.itemPrice.text
vc.itemDescription.text? = self.itemDescription.text
vc.possibleItemImageMain = self.itemPicture
vc.itemQuantity.text? = self.itemQuantity.text
}
}
}
//MARK: - FacebookGraphAPIManagerDelegate methods
extension ListingPreviewViewController: FacebookGraphAPIManagerDelegate {
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]])
@ -110,8 +122,8 @@ extension ListingPreviewViewController: FacebookGraphAPIManagerDelegate {
self.presentViewController(self.alert, animated: true, completion: nil)
}
}
}
*/
//MARK: - IBActions
extension ListingPreviewViewController {
@ -125,6 +137,11 @@ extension ListingPreviewViewController {
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()
//post to ebay
if(self.networksDictionary["ebay"]!){
@ -138,17 +155,196 @@ extension ListingPreviewViewController {
}
//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":
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":
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 "Houseware":
categoryCode = EtsyRESTAPIManager.settingsDictionary["categories"]!["housewares"] as! Int
break
case "Jewelry":
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":
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.itemPicture.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)
//save listing to private user path in firebase
let newListingRef = self.firManager.ref.child("Users").child("\(self.firManager.user_email)").child("user_Listings").childByAutoId()
self.networksDictionary["areNetworksChosen"] = true
let listing: Dictionary<String,AnyObject> = ["listingID": newListingRef.key,
let tmpDirURL = NSURL.fileURLWithPath(NSTemporaryDirectory(), isDirectory: true)
let fileURL = tmpDirURL.URLByAppendingPathComponent("main").URLByAppendingPathExtension("jpg")
print("FilePath: \(fileURL.path!)")
do {
try UIImageJPEGRepresentation(self.itemPicture.image!, 0.45)!.writeToFile(fileURL.path!, options: NSDataWritingOptions.AtomicWrite)
}catch{
(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.graphManager.makePOSTResquest("me/photos", params: parameters, onComplete: {
(imageId, error) -> Void in
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: {
(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)
})
/*
*/
})
//let parameters: Dictionary<String, AnyObject> = ["":""]
}
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,
@ -156,7 +352,8 @@ extension ListingPreviewViewController {
"listingDescription": self.itemDescription.text,
"numberOfSupportingImages" : ((self.itemListingDictionary["pictures"] as? [UIImageView])?.count)! - 1,
"isListingDraft": false,
"networks": self.networksDictionary]
"networks": self.networksDictionary])
self.firManager.ref.observeSingleEventOfType(.Value, withBlock: { snapshot in
@ -172,36 +369,15 @@ extension ListingPreviewViewController {
listingImageRef.putData(UIImageJPEGRepresentation(self.itemPicture.image!, 0.8)!, metadata: nil,completion:
{(metadata, error) -> Void in
newListingRef.setValue(listing)
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"
// 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)}))
let parameters: Dictionary<String, AnyObject> = ["message":("**"+self.itemTitle.text!+"**\n\n"+"Price: "+self.itemPrice.text! + "\n\n"+self.itemDescription.text!)]
//post to facebook
if(self.networksDictionary["facebook"]!){
//need to reverse process and upload to firebase last so that all network listing id's can be saved to firebase for notification access.
self.lastListingKey = newListingRef.key
self.graphManager.makePOSTResquest("me/feed", params: parameters)
//let parameters: Dictionary<String, AnyObject> = ["":""]
}
// 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'
self.firManager.ref.child("Global_listings").child(newListingRef.key).setValue(newListingRef.key)
@ -213,7 +389,7 @@ extension ListingPreviewViewController {
})
})
}

View File

@ -377,7 +377,7 @@
<color key="textColor" white="0.33333333333333331" alpha="1" colorSpace="calibratedWhite"/>
<nil key="highlightedColor"/>
</label>
<textField opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" placeholder="1" minimumFontSize="17" id="otX-Vg-NmH" userLabel="price">
<textField opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" placeholder="1" minimumFontSize="17" id="otX-Vg-NmH" userLabel="quantity">
<rect key="frame" x="136" y="81" width="88" height="21"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<color key="backgroundColor" red="0.93725490199999995" green="0.93725490199999995" blue="0.95686274510000002" alpha="1" colorSpace="calibratedRGB"/>
@ -418,6 +418,9 @@
<state key="normal" title="Choose Category">
<color key="titleColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
</state>
<connections>
<segue destination="dll-3G-IQL" kind="modal" identifier="CategoriesSegue" id="IJp-Zc-nNh"/>
</connections>
</button>
</subviews>
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
@ -437,6 +440,7 @@
<outlet property="itemDescription" destination="osz-kc-aer" id="qN7-31-UDs"/>
<outlet property="itemName" destination="QIK-Tn-AHX" id="YsY-i0-9oR"/>
<outlet property="itemPrice" destination="PQC-e5-VHo" id="2Xi-s1-i8r"/>
<outlet property="itemQuantity" destination="otX-Vg-NmH" id="NAV-nK-usy"/>
<outlet property="possibleItemImage2" destination="smo-O2-fSf" id="3sX-Jr-S82"/>
<outlet property="possibleItemImage3" destination="ZfH-0j-qER" id="VGg-RB-whX"/>
<outlet property="possibleItemImage4" destination="Krl-yM-1dX" id="21h-RC-hKj"/>
@ -1025,6 +1029,7 @@
<outlet property="itemDescription" destination="u7b-0N-xli" id="d1N-lw-6sw"/>
<outlet property="itemPicture" destination="K0z-pp-hzH" id="6Zm-Ig-Rm3"/>
<outlet property="itemPrice" destination="Jh9-KG-0Yt" id="nbh-aq-W0b"/>
<outlet property="itemQuantity" destination="shU-ew-26O" id="yNg-ov-7q5"/>
<outlet property="itemTitle" destination="WuZ-2K-lz7" id="EkY-UX-lSj"/>
<outlet property="networks" destination="MS3-nc-8va" id="duP-BL-Qp2"/>
<segue destination="0di-oP-cGQ" kind="modal" identifier="EditListingSegue" id="rkZ-c8-XJc"/>
@ -1995,7 +2000,7 @@
<!--categories-->
<scene sceneID="e5k-kQ-o33">
<objects>
<viewController title="categories" id="dll-3G-IQL" sceneMemberID="viewController">
<viewController title="categories" id="dll-3G-IQL" customClass="CategoriesTableViewController" customModule="Vendoo" customModuleProvider="target" sceneMemberID="viewController">
<view key="view" contentMode="scaleToFill" id="S0F-gj-Dpz">
<rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
@ -2005,549 +2010,100 @@
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
<prototypes>
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="blue" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" id="NVz-An-tWd">
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="blue" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" reuseIdentifier="CategoryCell" id="NVz-An-tWd" customClass="CategoryCell" customModule="Vendoo" customModuleProvider="target">
<rect key="frame" x="0.0" y="28" width="375" height="44"/>
<autoresizingMask key="autoresizingMask"/>
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="NVz-An-tWd" id="YDe-Pd-Fu2">
<rect key="frame" x="0.0" y="0.0" width="375" height="43.5"/>
<autoresizingMask key="autoresizingMask"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Antiques" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="pKO-dl-Ggb">
<rect key="frame" x="8" y="11" width="359" height="21"/>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="pKO-dl-Ggb">
<rect key="frame" x="8" y="11" width="175" height="21"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
</label>
</subviews>
</tableViewCellContentView>
</tableViewCell>
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="blue" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" id="Ntj-Ll-Fxf">
<rect key="frame" x="0.0" y="72" width="375" height="44"/>
<autoresizingMask key="autoresizingMask"/>
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="Ntj-Ll-Fxf" id="rhn-SZ-asL">
<rect key="frame" x="0.0" y="0.0" width="375" height="43.5"/>
<collectionView opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" dataMode="prototypes" id="7Xh-YZ-bvC">
<rect key="frame" x="191" y="-9" width="176" height="61"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
<collectionViewFlowLayout key="collectionViewLayout" scrollDirection="horizontal" minimumLineSpacing="5" minimumInteritemSpacing="5" id="eY7-Fs-6Kn">
<size key="itemSize" width="40" height="40"/>
<size key="headerReferenceSize" width="0.0" height="0.0"/>
<size key="footerReferenceSize" width="0.0" height="0.0"/>
<inset key="sectionInset" minX="0.0" minY="0.0" maxX="0.0" maxY="0.0"/>
</collectionViewFlowLayout>
<cells>
<collectionViewCell opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" reuseIdentifier="ebay" id="mCV-zx-xeL">
<rect key="frame" x="0.0" y="10.5" width="40" height="40"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<view key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center">
<rect key="frame" x="0.0" y="0.0" width="40" height="40"/>
<autoresizingMask key="autoresizingMask"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Art" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="TcO-R4-RNm">
<rect key="frame" x="8" y="11" width="359" height="21"/>
<imageView userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="ebay_icon" id="lUG-4k-oqy">
<rect key="frame" x="0.0" y="0.0" width="40" height="40"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
</label>
</imageView>
</subviews>
</tableViewCellContentView>
</tableViewCell>
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="blue" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" id="40E-Ix-HeI">
<rect key="frame" x="0.0" y="116" width="375" height="44"/>
<autoresizingMask key="autoresizingMask"/>
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="40E-Ix-HeI" id="mS4-Gf-voB">
<rect key="frame" x="0.0" y="0.0" width="375" height="43.5"/>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
</view>
<size key="customSize" width="40" height="40"/>
</collectionViewCell>
<collectionViewCell opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" tag="1" contentMode="center" reuseIdentifier="amazon" id="LkM-kC-Zpp">
<rect key="frame" x="45" y="10.5" width="40" height="40"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<view key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center">
<rect key="frame" x="0.0" y="0.0" width="40" height="40"/>
<autoresizingMask key="autoresizingMask"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Baby" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="ixK-Y9-Gez">
<rect key="frame" x="8" y="11" width="359" height="21"/>
<imageView userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="amazon_icon" id="BDv-y8-P6w">
<rect key="frame" x="0.0" y="0.0" width="40" height="40"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
</label>
</imageView>
</subviews>
</tableViewCellContentView>
</tableViewCell>
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="blue" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" id="ccy-c5-GEb">
<rect key="frame" x="0.0" y="160" width="375" height="44"/>
<autoresizingMask key="autoresizingMask"/>
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="ccy-c5-GEb" id="JJB-uf-Y7r">
<rect key="frame" x="0.0" y="0.0" width="375" height="43.5"/>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
</view>
</collectionViewCell>
<collectionViewCell opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" tag="2" contentMode="center" reuseIdentifier="etsy" id="LmS-RK-wqT">
<rect key="frame" x="90" y="10.5" width="40" height="40"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<view key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center">
<rect key="frame" x="0.0" y="0.0" width="40" height="40"/>
<autoresizingMask key="autoresizingMask"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Books" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="Th8-iJ-Hfh">
<rect key="frame" x="8" y="11" width="359" height="21"/>
<imageView userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="etsy_icon" id="Ic1-xd-4Oc">
<rect key="frame" x="0.0" y="0.0" width="40" height="40"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
</label>
</imageView>
</subviews>
</tableViewCellContentView>
</tableViewCell>
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="blue" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" id="xaT-7C-dIj">
<rect key="frame" x="0.0" y="204" width="375" height="44"/>
<autoresizingMask key="autoresizingMask"/>
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="xaT-7C-dIj" id="C70-VY-weq">
<rect key="frame" x="0.0" y="0.0" width="375" height="43.5"/>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
</view>
</collectionViewCell>
<collectionViewCell opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" tag="3" contentMode="center" reuseIdentifier="facebook" id="E6f-Dd-zq3">
<rect key="frame" x="135" y="10.5" width="40" height="40"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<view key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center">
<rect key="frame" x="0.0" y="0.0" width="40" height="40"/>
<autoresizingMask key="autoresizingMask"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Business &amp; Industrial" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="jBx-Pm-q17">
<rect key="frame" x="8" y="11" width="359" height="21"/>
<imageView userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="facebook_icon" id="aKc-GO-v8c">
<rect key="frame" x="0.0" y="0.0" width="40" height="40"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
</label>
</subviews>
</tableViewCellContentView>
</tableViewCell>
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="blue" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" id="3D5-Dr-Pdi">
<rect key="frame" x="0.0" y="248" width="375" height="44"/>
<autoresizingMask key="autoresizingMask"/>
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="3D5-Dr-Pdi" id="jCw-pG-d4H">
<rect key="frame" x="0.0" y="0.0" width="375" height="43.5"/>
<autoresizingMask key="autoresizingMask"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Cameras &amp; Photo" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="C0r-MH-nLQ">
<rect key="frame" x="8" y="11" width="359" height="21"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
</label>
</subviews>
</tableViewCellContentView>
</tableViewCell>
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="blue" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" id="mUF-mg-8kA">
<rect key="frame" x="0.0" y="292" width="375" height="44"/>
<autoresizingMask key="autoresizingMask"/>
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="mUF-mg-8kA" id="Rcd-Mo-ed4">
<rect key="frame" x="0.0" y="0.0" width="375" height="43.5"/>
<autoresizingMask key="autoresizingMask"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Cell Phones &amp; Accessories" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="src-qw-4pB">
<rect key="frame" x="8" y="11" width="359" height="21"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
</label>
</subviews>
</tableViewCellContentView>
</tableViewCell>
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="blue" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" id="PaM-CM-bCs">
<rect key="frame" x="0.0" y="336" width="375" height="44"/>
<autoresizingMask key="autoresizingMask"/>
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="PaM-CM-bCs" id="cTH-g8-bJj">
<rect key="frame" x="0.0" y="0.0" width="375" height="43.5"/>
<autoresizingMask key="autoresizingMask"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Clothing, Shoes, and Accessories" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="J1P-lX-Zrf">
<rect key="frame" x="8" y="11" width="359" height="21"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
</label>
</subviews>
</tableViewCellContentView>
</tableViewCell>
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="blue" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" id="YUW-83-PU9">
<rect key="frame" x="0.0" y="380" width="375" height="44"/>
<autoresizingMask key="autoresizingMask"/>
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="YUW-83-PU9" id="Aau-3T-boW">
<rect key="frame" x="0.0" y="0.0" width="375" height="43.5"/>
<autoresizingMask key="autoresizingMask"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Coins &amp; Money" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="hgs-FM-mQi">
<rect key="frame" x="8" y="11" width="359" height="21"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
</label>
</subviews>
</tableViewCellContentView>
</tableViewCell>
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="blue" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" id="039-O5-LjA">
<rect key="frame" x="0.0" y="424" width="375" height="44"/>
<autoresizingMask key="autoresizingMask"/>
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="039-O5-LjA" id="wiW-Zm-908">
<rect key="frame" x="0.0" y="0.0" width="375" height="43.5"/>
<autoresizingMask key="autoresizingMask"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Collectibles" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="AQp-kB-3sa">
<rect key="frame" x="8" y="11" width="359" height="21"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
</label>
</subviews>
</tableViewCellContentView>
</tableViewCell>
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="blue" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" id="kMZ-gc-Lx7">
<rect key="frame" x="0.0" y="468" width="375" height="44"/>
<autoresizingMask key="autoresizingMask"/>
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="kMZ-gc-Lx7" id="lQk-Rd-HtY">
<rect key="frame" x="0.0" y="0.0" width="375" height="43.5"/>
<autoresizingMask key="autoresizingMask"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Computers/Tablets" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="xhi-9e-TFE">
<rect key="frame" x="8" y="11" width="359" height="21"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
</label>
</subviews>
</tableViewCellContentView>
</tableViewCell>
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="blue" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" id="Jqw-Vp-w7a">
<rect key="frame" x="0.0" y="512" width="375" height="44"/>
<autoresizingMask key="autoresizingMask"/>
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="Jqw-Vp-w7a" id="gW8-nd-qgd">
<rect key="frame" x="0.0" y="0.0" width="375" height="43.5"/>
<autoresizingMask key="autoresizingMask"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Electronics" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="M4u-u2-Vsf">
<rect key="frame" x="8" y="11" width="359" height="21"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
</label>
</subviews>
</tableViewCellContentView>
</tableViewCell>
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="blue" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" id="eQS-uV-OJz">
<rect key="frame" x="0.0" y="556" width="375" height="44"/>
<autoresizingMask key="autoresizingMask"/>
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="eQS-uV-OJz" id="kA8-Uk-ntR">
<rect key="frame" x="0.0" y="0.0" width="375" height="43.5"/>
<autoresizingMask key="autoresizingMask"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Crafts" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="ysv-UF-n07">
<rect key="frame" x="8" y="11" width="359" height="21"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
</label>
</subviews>
</tableViewCellContentView>
</tableViewCell>
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="blue" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" id="7uP-rh-iva">
<rect key="frame" x="0.0" y="600" width="375" height="44"/>
<autoresizingMask key="autoresizingMask"/>
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="7uP-rh-iva" id="h9x-3M-sDz">
<rect key="frame" x="0.0" y="0.0" width="375" height="43.5"/>
<autoresizingMask key="autoresizingMask"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Dolls &amp; Bears" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="7U9-tC-28N">
<rect key="frame" x="8" y="11" width="359" height="21"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
</label>
</subviews>
</tableViewCellContentView>
</tableViewCell>
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="blue" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" id="BfI-jN-aeW">
<rect key="frame" x="0.0" y="644" width="375" height="44"/>
<autoresizingMask key="autoresizingMask"/>
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="BfI-jN-aeW" id="PdD-og-7ea">
<rect key="frame" x="0.0" y="0.0" width="375" height="43.5"/>
<autoresizingMask key="autoresizingMask"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Movies" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="ZbO-Cu-3qE">
<rect key="frame" x="8" y="11" width="359" height="21"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
</label>
</subviews>
</tableViewCellContentView>
</tableViewCell>
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="blue" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" id="ivF-Jg-tnw">
<rect key="frame" x="0.0" y="688" width="375" height="44"/>
<autoresizingMask key="autoresizingMask"/>
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="ivF-Jg-tnw" id="MfN-Sf-7E1">
<rect key="frame" x="0.0" y="0.0" width="375" height="43.5"/>
<autoresizingMask key="autoresizingMask"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Automototive" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="kjO-sz-XAD">
<rect key="frame" x="8" y="11" width="359" height="21"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
</label>
</subviews>
</tableViewCellContentView>
</tableViewCell>
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="blue" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" id="OuQ-it-xcA">
<rect key="frame" x="0.0" y="732" width="375" height="44"/>
<autoresizingMask key="autoresizingMask"/>
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="OuQ-it-xcA" id="vug-eG-R4W">
<rect key="frame" x="0.0" y="0.0" width="375" height="43.5"/>
<autoresizingMask key="autoresizingMask"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Entertainment" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="rvs-yt-mTa">
<rect key="frame" x="8" y="11" width="359" height="21"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
</label>
</subviews>
</tableViewCellContentView>
</tableViewCell>
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="blue" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" id="BYm-Yu-DYN">
<rect key="frame" x="0.0" y="776" width="375" height="44"/>
<autoresizingMask key="autoresizingMask"/>
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="BYm-Yu-DYN" id="TXn-0h-UFJ">
<rect key="frame" x="0.0" y="0.0" width="375" height="43.5"/>
<autoresizingMask key="autoresizingMask"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Gift Cards &amp; Coupons" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="8nh-ka-9TH">
<rect key="frame" x="8" y="11" width="359" height="21"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
</label>
</subviews>
</tableViewCellContentView>
</tableViewCell>
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="blue" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" id="pqh-fT-I3x">
<rect key="frame" x="0.0" y="820" width="375" height="44"/>
<autoresizingMask key="autoresizingMask"/>
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="pqh-fT-I3x" id="o8K-hY-yFT">
<rect key="frame" x="0.0" y="0.0" width="375" height="43.5"/>
<autoresizingMask key="autoresizingMask"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Health &amp; Beauty" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="lcH-u5-BVT">
<rect key="frame" x="8" y="11" width="359" height="21"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
</label>
</subviews>
</tableViewCellContentView>
</tableViewCell>
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="blue" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" id="9Ci-T0-1PW">
<rect key="frame" x="0.0" y="864" width="375" height="44"/>
<autoresizingMask key="autoresizingMask"/>
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="9Ci-T0-1PW" id="XvS-TS-bXw">
<rect key="frame" x="0.0" y="0.0" width="375" height="43.5"/>
<autoresizingMask key="autoresizingMask"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Home &amp; Garden" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="an8-tQ-ENC">
<rect key="frame" x="8" y="11" width="359" height="21"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
</label>
</subviews>
</tableViewCellContentView>
</tableViewCell>
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="blue" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" id="24Q-ao-tWX">
<rect key="frame" x="0.0" y="908" width="375" height="44"/>
<autoresizingMask key="autoresizingMask"/>
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="24Q-ao-tWX" id="Sih-n9-qyZ">
<rect key="frame" x="0.0" y="0.0" width="375" height="43.5"/>
<autoresizingMask key="autoresizingMask"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Jewelry &amp; Watches" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="Yib-P7-lg5">
<rect key="frame" x="8" y="11" width="359" height="21"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
</label>
</subviews>
</tableViewCellContentView>
</tableViewCell>
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="blue" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" id="SyD-fV-5BY">
<rect key="frame" x="0.0" y="952" width="375" height="44"/>
<autoresizingMask key="autoresizingMask"/>
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="SyD-fV-5BY" id="LVY-tt-iyV">
<rect key="frame" x="0.0" y="0.0" width="375" height="43.5"/>
<autoresizingMask key="autoresizingMask"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Music" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="8Cy-hd-ZXl">
<rect key="frame" x="8" y="11" width="359" height="21"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
</label>
</subviews>
</tableViewCellContentView>
</tableViewCell>
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="blue" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" id="Qro-iK-T2O">
<rect key="frame" x="0.0" y="996" width="375" height="44"/>
<autoresizingMask key="autoresizingMask"/>
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="Qro-iK-T2O" id="uQZ-3g-BL2">
<rect key="frame" x="0.0" y="0.0" width="375" height="43.5"/>
<autoresizingMask key="autoresizingMask"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Musical Instruments" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="5eM-1H-kcL">
<rect key="frame" x="8" y="11" width="359" height="21"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
</label>
</subviews>
</tableViewCellContentView>
</tableViewCell>
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="blue" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" id="JVp-9P-ose">
<rect key="frame" x="0.0" y="1040" width="375" height="44"/>
<autoresizingMask key="autoresizingMask"/>
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="JVp-9P-ose" id="g6N-ps-fnQ">
<rect key="frame" x="0.0" y="0.0" width="375" height="43.5"/>
<autoresizingMask key="autoresizingMask"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Pet Supplies" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="OWu-Ji-Y5N">
<rect key="frame" x="8" y="11" width="359" height="21"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
</label>
</subviews>
</tableViewCellContentView>
</tableViewCell>
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="blue" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" id="485-8x-Vo7">
<rect key="frame" x="0.0" y="1084" width="375" height="44"/>
<autoresizingMask key="autoresizingMask"/>
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="485-8x-Vo7" id="N9K-FS-v1M">
<rect key="frame" x="0.0" y="0.0" width="375" height="43.5"/>
<autoresizingMask key="autoresizingMask"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Pottery &amp; Glass" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="Ylh-YR-XaL">
<rect key="frame" x="8" y="11" width="359" height="21"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
</label>
</subviews>
</tableViewCellContentView>
</tableViewCell>
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="blue" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" id="ip7-np-iYl">
<rect key="frame" x="0.0" y="1128" width="375" height="44"/>
<autoresizingMask key="autoresizingMask"/>
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="ip7-np-iYl" id="wiG-Ep-epk">
<rect key="frame" x="0.0" y="0.0" width="375" height="43.5"/>
<autoresizingMask key="autoresizingMask"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Sporting Goods" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="Ew9-xO-S3Y">
<rect key="frame" x="8" y="11" width="359" height="21"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
</label>
</subviews>
</tableViewCellContentView>
</tableViewCell>
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="blue" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" id="fVV-go-DzF">
<rect key="frame" x="0.0" y="1172" width="375" height="44"/>
<autoresizingMask key="autoresizingMask"/>
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="fVV-go-DzF" id="Mu3-U9-SNV">
<rect key="frame" x="0.0" y="0.0" width="375" height="43.5"/>
<autoresizingMask key="autoresizingMask"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Sports Memorabelia" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="U0h-90-uxc">
<rect key="frame" x="8" y="11" width="359" height="21"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
</label>
</subviews>
</tableViewCellContentView>
</tableViewCell>
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="blue" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" id="MJX-2n-HmR">
<rect key="frame" x="0.0" y="1216" width="375" height="44"/>
<autoresizingMask key="autoresizingMask"/>
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="MJX-2n-HmR" id="wcK-uX-HS6">
<rect key="frame" x="0.0" y="0.0" width="375" height="43.5"/>
<autoresizingMask key="autoresizingMask"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Stamps" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="vxc-EW-57O">
<rect key="frame" x="8" y="11" width="359" height="21"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
</label>
</subviews>
</tableViewCellContentView>
</tableViewCell>
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="blue" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" id="UrK-h3-wHG">
<rect key="frame" x="0.0" y="1260" width="375" height="44"/>
<autoresizingMask key="autoresizingMask"/>
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="UrK-h3-wHG" id="iBb-nL-AbE">
<rect key="frame" x="0.0" y="0.0" width="375" height="43.5"/>
<autoresizingMask key="autoresizingMask"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Tickets" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="9Lm-Qe-XzR">
<rect key="frame" x="8" y="11" width="359" height="21"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
</label>
</subviews>
</tableViewCellContentView>
</tableViewCell>
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="blue" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" id="8aZ-II-Ynw">
<rect key="frame" x="0.0" y="1304" width="375" height="44"/>
<autoresizingMask key="autoresizingMask"/>
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="8aZ-II-Ynw" id="75o-Oz-GXZ">
<rect key="frame" x="0.0" y="0.0" width="375" height="43.5"/>
<autoresizingMask key="autoresizingMask"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Toys &amp; Hobbies" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="v8v-qT-40j">
<rect key="frame" x="8" y="11" width="359" height="21"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
</label>
</subviews>
</tableViewCellContentView>
</tableViewCell>
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="blue" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" id="IHn-XQ-FhV">
<rect key="frame" x="0.0" y="1348" width="375" height="44"/>
<autoresizingMask key="autoresizingMask"/>
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="IHn-XQ-FhV" id="z5Y-M0-UmJ">
<rect key="frame" x="0.0" y="0.0" width="375" height="43.5"/>
<autoresizingMask key="autoresizingMask"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Travel" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="s3T-E7-WHS">
<rect key="frame" x="8" y="11" width="359" height="21"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
</label>
</subviews>
</tableViewCellContentView>
</tableViewCell>
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="blue" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" id="Kbi-d3-J0i">
<rect key="frame" x="0.0" y="1392" width="375" height="44"/>
<autoresizingMask key="autoresizingMask"/>
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="Kbi-d3-J0i" id="CKR-T9-qAa">
<rect key="frame" x="0.0" y="0.0" width="375" height="43.5"/>
<autoresizingMask key="autoresizingMask"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Video Games" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="uO3-Tf-f4J">
<rect key="frame" x="8" y="11" width="359" height="21"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
</label>
</imageView>
</subviews>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
</view>
</collectionViewCell>
</cells>
</collectionView>
</subviews>
</tableViewCellContentView>
<connections>
<outlet property="categoryName" destination="pKO-dl-Ggb" id="dlI-42-CEd"/>
<outlet property="networks" destination="7Xh-YZ-bvC" id="cYh-sp-kVZ"/>
</connections>
</tableViewCell>
</prototypes>
<sections/>
@ -2560,6 +2116,9 @@
<rect key="frame" x="8" y="16" width="46" height="30"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<state key="normal" title="Back"/>
<connections>
<action selector="cancelCategorySelection:" destination="dll-3G-IQL" eventType="touchUpInside" id="k0I-oY-cmp"/>
</connections>
</button>
</subviews>
<color key="backgroundColor" red="0.2784313725" green="0.80392156859999997" blue="0.68235294120000001" alpha="1" colorSpace="calibratedRGB"/>
@ -2568,10 +2127,14 @@
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
</view>
<simulatedScreenMetrics key="simulatedDestinationMetrics" type="retina47"/>
<connections>
<outlet property="table" destination="z3N-JL-tlL" id="jcH-lJ-Fw3"/>
<segue destination="7B0-PA-tjd" kind="modal" identifier="NetworkSelectionSegue" id="eaI-bm-1aI"/>
</connections>
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="VhZ-aP-JDs" userLabel="First Responder" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="1680.5" y="-624.5"/>
<point key="canvasLocation" x="1654.5" y="-649.5"/>
</scene>
<!--Ebay Settings-->
<scene sceneID="bc4-4H-BM8">
@ -2813,8 +2376,9 @@
<inferredMetricsTieBreakers>
<segue reference="Ds4-LY-IRj"/>
<segue reference="syc-IR-LNQ"/>
<segue reference="Gnt-iE-cW9"/>
<segue reference="vCG-jU-HYF"/>
<segue reference="NOz-ya-avj"/>
<segue reference="KKl-Gj-ZVc"/>
<segue reference="rkZ-c8-XJc"/>
</inferredMetricsTieBreakers>
<color key="tintColor" red="0.2784313725" green="0.80392156859999997" blue="0.68235294120000001" alpha="1" colorSpace="calibratedRGB"/>
</document>

View File

@ -88,10 +88,11 @@ extension NetworksTableViewController {
}
func setManagers(fbManager: FacebookGraphAPIManager, fireManager: FirebaseManager, ebayManager: EbayWebServiceManager){
func setManagers(fbManager: FacebookGraphAPIManager, fireManager: FirebaseManager, ebayManager: EbayWebServiceManager, etsyManager: EtsyRESTAPIManager){
self.graphManager = fbManager
self.firManager = fireManager
self.ebayManager = ebayManager
self.etsyManager = etsyManager
}
}
@ -108,7 +109,7 @@ extension NetworksTableViewController {
if(segue.identifier == "ItemPreviewSegue"){
(segue.destinationViewController as! ListingPreviewViewController).setDictionary(self.networksDictionary, itemdictionary: self.itemListingDictionary)
(segue.destinationViewController as! ListingPreviewViewController).setManagers(self.graphManager, fireManager: self.firManager, ebayManager: self.ebayManager)
(segue.destinationViewController as! ListingPreviewViewController).setManagers(self.graphManager, fireManager: self.firManager, ebayManager: self.ebayManager, etsyManager: self.etsyManager)
}
if(segue.identifier == "EtsySettingsSegue") {
@ -415,12 +416,12 @@ extension NetworksTableViewController: UITableViewDelegate {
cell = (self.tableView.dequeueReusableCellWithIdentifier("etsy", forIndexPath: indexPath) as! EtsyTableViewCell)
cell.setSelected(false, animated: false)
//selection code for etsy
if(cell.networkToggle.on == true){
dispatch_async(dispatch_get_main_queue(), { () -> Void in
cell.networkToggle.setOn(false, animated: true)
cell.networkToggle.on = false
})
//code to deselect network
@ -430,6 +431,7 @@ extension NetworksTableViewController: UITableViewDelegate {
dispatch_async(dispatch_get_main_queue(), { () -> Void in
cell.networkToggle.setOn(true, animated: true)
cell.networkToggle.on = true
})
//code to select network
self.networksDictionary["etsy"] = true
@ -489,7 +491,7 @@ extension NetworksTableViewController: UITableViewDelegate {
}
else{
/*
//case where class is being used to authorize a network for the app to post on
switch (indexPath.row){
case 0:
@ -630,7 +632,7 @@ extension NetworksTableViewController: UITableViewDelegate {
break
}
*/
}
@ -753,6 +755,14 @@ extension NetworksTableViewController {
})
break
case is FBTableViewCell.Type:
let tabBar = self.tabBarController
((tabBar as? HomeViewController)?.fbGraphManager.authorizeApp(self))!
dispatch_async(dispatch_get_main_queue(), {
sender.setTitle("Logout", forState: UIControlState.Normal)
(sender.superview?.superview as! FBTableViewCell).settingsBtn.enabled = true
(sender.superview?.superview as! FBTableViewCell).settingsBtn.hidden = false
})
break
default:
break
@ -783,6 +793,13 @@ extension NetworksTableViewController {
})
break
case is FBTableViewCell.Type:
let tabBar = self.tabBarController
((tabBar as? HomeViewController)?.fbGraphManager.deAuthorizeApp(self))!
dispatch_async(dispatch_get_main_queue(), {
sender.setTitle("Login", forState: UIControlState.Normal)
(sender.superview?.superview as! FBTableViewCell).settingsBtn.enabled = false
(sender.superview?.superview as! FBTableViewCell).settingsBtn.hidden = true
})
break
default:
break