diff --git a/Vendoo.xcodeproj/project.pbxproj b/Vendoo.xcodeproj/project.pbxproj index 5715c21..ef1a544 100644 --- a/Vendoo.xcodeproj/project.pbxproj +++ b/Vendoo.xcodeproj/project.pbxproj @@ -16,6 +16,7 @@ 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 */; }; + 3E3A004A1D76680E00A3A5B6 /* ServiceNotificationManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3E3A00491D76680E00A3A5B6 /* ServiceNotificationManager.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 */; }; @@ -74,6 +75,7 @@ 3E1B1F0A1D2493EE00DBCF08 /* EtsySettingsViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = EtsySettingsViewController.swift; sourceTree = ""; }; 3E1DC3CC1D4232490091BC60 /* CategoriesTableViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CategoriesTableViewController.swift; sourceTree = ""; }; 3E1DC3CE1D42328C0091BC60 /* CategoryCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CategoryCell.swift; sourceTree = ""; }; + 3E3A00491D76680E00A3A5B6 /* ServiceNotificationManager.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ServiceNotificationManager.swift; sourceTree = ""; }; 3E4897D01D0067030069F742 /* FirebaseManager.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FirebaseManager.swift; sourceTree = ""; }; 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 = ""; }; @@ -175,6 +177,7 @@ 3E4897CF1D00629B0069F742 /* FirebaseServices */, 3E7CF3FF1CF6363200F486B2 /* EtsyServices */, 3EC325241CF7E6B300626C48 /* FacebookServices */, + 3E3A00491D76680E00A3A5B6 /* ServiceNotificationManager.swift */, ); name = Services; sourceTree = ""; @@ -753,6 +756,7 @@ 3E7CF3FC1CF5FE9400F486B2 /* RecoverPasswordViewController.swift in Sources */, 3E1DC3CF1D42328C0091BC60 /* CategoryCell.swift in Sources */, 3EC325111CF703A600626C48 /* ItemCell.swift in Sources */, + 3E3A004A1D76680E00A3A5B6 /* ServiceNotificationManager.swift in Sources */, 3EA668A11D02836C00EE57A8 /* EbayWebServiceManager.swift in Sources */, 3EF422B21D73262000B9A3EB /* UserCell.swift in Sources */, 3ECEDB871CF9C722003566B3 /* ListingPreviewViewController.swift in Sources */, diff --git a/Vendoo.xcworkspace/xcuserdata/okechi.xcuserdatad/UserInterfaceState.xcuserstate b/Vendoo.xcworkspace/xcuserdata/okechi.xcuserdatad/UserInterfaceState.xcuserstate index f1866ac..cd76185 100644 Binary files a/Vendoo.xcworkspace/xcuserdata/okechi.xcuserdatad/UserInterfaceState.xcuserstate and b/Vendoo.xcworkspace/xcuserdata/okechi.xcuserdatad/UserInterfaceState.xcuserstate differ diff --git a/Vendoo.xcworkspace/xcuserdata/okechi.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist b/Vendoo.xcworkspace/xcuserdata/okechi.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist index bd35679..6af231b 100644 --- a/Vendoo.xcworkspace/xcuserdata/okechi.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist +++ b/Vendoo.xcworkspace/xcuserdata/okechi.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist @@ -198,7 +198,7 @@ moduleName = "Vendoo" usesParentBreakpointCondition = "Yes" urlString = "file:///Users/okechi/Documents/iOs%20Practice/Vendoo/Vendoo_bb/Vendoo/Vendoo/ListingPreviewViewController.swift" - timestampString = "494297335.911172" + timestampString = "494341261.945578" startingColumnNumber = "9223372036854775807" endingColumnNumber = "9223372036854775807" startingLineNumber = "385" @@ -213,7 +213,7 @@ moduleName = "Vendoo" usesParentBreakpointCondition = "Yes" urlString = "file:///Users/okechi/Documents/iOs%20Practice/Vendoo/Vendoo_bb/Vendoo/Vendoo/ListingPreviewViewController.swift" - timestampString = "494297335.911317" + timestampString = "494341261.945674" startingColumnNumber = "9223372036854775807" endingColumnNumber = "9223372036854775807" startingLineNumber = "385" @@ -246,7 +246,7 @@ moduleName = "Vendoo" usesParentBreakpointCondition = "Yes" urlString = "file:///Users/okechi/Documents/iOs%20Practice/Vendoo/Vendoo_bb/Vendoo/Vendoo/ListingPreviewViewController.swift" - timestampString = "494297335.91226" + timestampString = "494341261.946415" startingColumnNumber = "9223372036854775807" endingColumnNumber = "9223372036854775807" startingLineNumber = "404" @@ -261,7 +261,7 @@ moduleName = "Vendoo" usesParentBreakpointCondition = "Yes" urlString = "file:///Users/okechi/Documents/iOs%20Practice/Vendoo/Vendoo_bb/Vendoo/Vendoo/ListingPreviewViewController.swift" - timestampString = "494297335.912365" + timestampString = "494341261.946515" startingColumnNumber = "9223372036854775807" endingColumnNumber = "9223372036854775807" startingLineNumber = "406" @@ -310,7 +310,7 @@ moduleName = "Vendoo" usesParentBreakpointCondition = "Yes" urlString = "file:///Users/okechi/Documents/iOs%20Practice/Vendoo/Vendoo_bb/Vendoo/Vendoo/ListingPreviewViewController.swift" - timestampString = "494297335.91396" + timestampString = "494341261.947602" startingColumnNumber = "9223372036854775807" endingColumnNumber = "9223372036854775807" startingLineNumber = "423" @@ -325,7 +325,7 @@ moduleName = "Vendoo" usesParentBreakpointCondition = "Yes" urlString = "file:///Users/okechi/Documents/iOs%20Practice/Vendoo/Vendoo_bb/Vendoo/Vendoo/ListingPreviewViewController.swift" - timestampString = "494297335.914116" + timestampString = "494341261.947696" startingColumnNumber = "9223372036854775807" endingColumnNumber = "9223372036854775807" startingLineNumber = "423" @@ -340,7 +340,7 @@ moduleName = "Vendoo" usesParentBreakpointCondition = "Yes" urlString = "file:///Users/okechi/Documents/iOs%20Practice/Vendoo/Vendoo_bb/Vendoo/Vendoo/ListingPreviewViewController.swift" - timestampString = "494297335.914278" + timestampString = "494341261.947779" startingColumnNumber = "9223372036854775807" endingColumnNumber = "9223372036854775807" startingLineNumber = "425" @@ -589,11 +589,11 @@ ignoreCount = "0" continueAfterRunningActions = "No" filePath = "Vendoo/HomeViewController.swift" - timestampString = "494087787.593663" + timestampString = "494337640.582836" startingColumnNumber = "9223372036854775807" endingColumnNumber = "9223372036854775807" - startingLineNumber = "33" - endingLineNumber = "33" + startingLineNumber = "35" + endingLineNumber = "35" landmarkName = "viewDidLoad()" landmarkType = "5"> @@ -685,7 +685,7 @@ moduleName = "Vendoo" usesParentBreakpointCondition = "Yes" urlString = "file:///Users/okechi/Documents/iOs%20Practice/Vendoo/Vendoo_bb/Vendoo/Vendoo/MenuPanelViewController.swift" - timestampString = "494297335.923076" + timestampString = "494341261.956102" startingColumnNumber = "9223372036854775807" endingColumnNumber = "9223372036854775807" startingLineNumber = "137" @@ -700,7 +700,7 @@ moduleName = "Vendoo" usesParentBreakpointCondition = "Yes" urlString = "file:///Users/okechi/Documents/iOs%20Practice/Vendoo/Vendoo_bb/Vendoo/Vendoo/MenuPanelViewController.swift" - timestampString = "494297335.923177" + timestampString = "494341261.956207" startingColumnNumber = "9223372036854775807" endingColumnNumber = "9223372036854775807" startingLineNumber = "137" @@ -781,7 +781,7 @@ moduleName = "Vendoo" usesParentBreakpointCondition = "Yes" urlString = "file:///Users/okechi/Documents/iOs%20Practice/Vendoo/Vendoo_bb/Vendoo/Vendoo/ItemImagePickerViewController.swift" - timestampString = "494297335.925585" + timestampString = "494341261.959326" startingColumnNumber = "9223372036854775807" endingColumnNumber = "9223372036854775807" startingLineNumber = "67" @@ -796,7 +796,7 @@ moduleName = "Vendoo" usesParentBreakpointCondition = "Yes" urlString = "file:///Users/okechi/Documents/iOs%20Practice/Vendoo/Vendoo_bb/Vendoo/Vendoo/ItemImagePickerViewController.swift" - timestampString = "494297335.925882" + timestampString = "494341261.959485" startingColumnNumber = "9223372036854775807" endingColumnNumber = "9223372036854775807" startingLineNumber = "68" @@ -820,6 +820,38 @@ endingLineNumber = "197" landmarkName = "tableView(_:didSelectRowAtIndexPath:)" landmarkType = "5"> + + + + + + + startingLineNumber = "195" + endingLineNumber = "195" + offsetFromSymbolStart = "2972"> + startingLineNumber = "198" + endingLineNumber = "198" + offsetFromSymbolStart = "27"> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Vendoo/.DS_Store b/Vendoo/.DS_Store index 661de9b..0929a6a 100644 Binary files a/Vendoo/.DS_Store and b/Vendoo/.DS_Store differ diff --git a/Vendoo/HomeViewController.swift b/Vendoo/HomeViewController.swift index 05d5b51..e744738 100644 --- a/Vendoo/HomeViewController.swift +++ b/Vendoo/HomeViewController.swift @@ -16,11 +16,13 @@ class HomeViewController: UITabBarController { let firebaseManager = FirebaseManager() let ebayGraphManager = EbayWebServiceManager() var userListings: [Listing] = [] + var notificationsManager = ServiceNotificationManager() override func viewDidLoad() { super.viewDidLoad() + self.notificationsManager.setManagers(fbGraphManager, fireManager: firebaseManager, ebayManager: ebayGraphManager, etsyManager: etsyManager) // Do any additional setup after loading the view. dispatch_async(dispatch_get_main_queue(), { @@ -35,11 +37,12 @@ class HomeViewController: UITabBarController { NSUserDefaults.standardUserDefaults().setObject(userDict!["name"] as? String, forKey: "name") if listingDict != nil { + var notificationStartTracker = 0 dispatch_async(dispatch_get_main_queue(), { - - + //let notificationStartGroup = dispatch_group_create() for (key, values) in listingDict! { let serviceGroup: dispatch_group_t = dispatch_group_create() + //dispatch_group_enter(notificationStartGroup) self.firebaseManager.ref.observeSingleEventOfType(.Value, withBlock: { snapshot in let databaseDict = snapshot.value as! [String : AnyObject] @@ -54,6 +57,7 @@ class HomeViewController: UITabBarController { if(error != nil){ print("problem retrieving items") + notificationStartTracker += 1 }else{ let mainImage = UIImage(data: dataMain!) @@ -74,6 +78,9 @@ class HomeViewController: UITabBarController { count+=1 if(count == 4){ dispatch_group_leave(serviceGroup) + notificationStartTracker += 1 + //dispatch_group_enter(notificationStartGroup) + //dispatch_group_leave(notificationStartGroup) } }) @@ -93,9 +100,17 @@ class HomeViewController: UITabBarController { itemKey: key, networksSellingOn: (listingInfo!["networks"] as? Dictionary)! )) + print(notificationStartTracker) + if(notificationStartTracker == listingDict?.count){ + NSNotificationCenter.defaultCenter().postNotificationName("finished_fetching_listings", object: nil) + self.notificationsManager.setListings(self.userListings) + self.notificationsManager.startServicePolling() + } + + - NSNotificationCenter.defaultCenter().postNotificationName("finished_fetching_listings", object: nil) }) + @@ -107,6 +122,11 @@ class HomeViewController: UITabBarController { } + /* + dispatch_group_notify(notificationStartGroup, dispatch_get_main_queue(), { + + + })*/ diff --git a/Vendoo/ServiceNotificationManager.swift b/Vendoo/ServiceNotificationManager.swift new file mode 100644 index 0000000..4e6de8a --- /dev/null +++ b/Vendoo/ServiceNotificationManager.swift @@ -0,0 +1,101 @@ +// +// ServiceNotificationManager.swift +// Vendoo +// +// Created by Okechi Onyeje on 8/30/16. +// Copyright © 2016 Okechi Onyeje. All rights reserved. +// + +import Foundation + +protocol ServiceNotificationManagerDelegate { + func listingHasEnded(fbInfo: AnyObject?, ebayInfo: AnyObject?, amazonInfo: AnyObject?, etsyInfo: AnyObject?) + func listingHasNewNotifications(fbInfo: AnyObject?, ebayInfo: AnyObject?, amazonInfo: AnyObject?, etsyInfo: AnyObject?) +} + +class ServiceNotificationManager: NSObject { + + var etsyManager: EtsyRESTAPIManager! + var fbGraphManager: FacebookGraphAPIManager! + var firebaseManager: FirebaseManager! + var ebayGraphManager: EbayWebServiceManager! + var userListings: [Listing] = [] + var timer: NSTimer! + var delegate: ServiceNotificationManagerDelegate? + + override init() { + super.init() + + + } + + func startServicePolling() { + timer = NSTimer.scheduledTimerWithTimeInterval(10.0, target: self, selector: #selector(ServiceNotificationManager.pollServices), userInfo: nil, repeats: true) + } + + func stopServicePolling() { + timer.invalidate() + } + + func setManagers(fbManager: FacebookGraphAPIManager, fireManager: FirebaseManager, ebayManager: EbayWebServiceManager, etsyManager: EtsyRESTAPIManager){ + self.fbGraphManager = fbManager + self.firebaseManager = fireManager + self.ebayGraphManager = ebayManager + self.etsyManager = etsyManager + } + + func setListings(listings: [Listing]) { + self.userListings = listings + } + + func pollServices(){ + let notificationGroup = dispatch_group_create() + for listing in userListings { + dispatch_group_enter(notificationGroup) + + self.firebaseManager.ref.child("Users/\(self.firebaseManager.user_email)/user_Listings/\(listing.key)").observeSingleEventOfType( .Value, withBlock: { + (snapshot) -> Void in + + let listingDict = snapshot.value as? [String : AnyObject] + + if !(listingDict!["isListingDraft"] as! Bool) { + if let networksDict = listingDict!["networkIDs"] as? [String : AnyObject] { + let ebayID = (networksDict["ebay"] as? String) + let facebookID = (networksDict["facebook"] as? String) + let etsyID = (networksDict["etsy"] as? Int) + let amazonID = (networksDict["amazon"] as? String) + + //@TODO: Skeleton for Notfications Manager is set up. Need to implement listing request for each listing to retrieve relevant notifications for user such as if listing has ended + if(ebayID != nil){ + + } + if(facebookID != nil){ + + } + if(etsyID != nil){ + + } + if(amazonID != nil){ + + } + //dispatch_group_leave(notificationGroup) + }else { + dispatch_group_leave(notificationGroup) + } + + + }else { + dispatch_group_leave(notificationGroup) + } + }) + } + + dispatch_group_notify(notificationGroup, dispatch_get_main_queue(), { + self.delegate?.listingHasEnded(nil, ebayInfo: nil, amazonInfo: nil, etsyInfo: nil) + self.delegate?.listingHasNewNotifications(nil, ebayInfo: nil, amazonInfo: nil, etsyInfo: nil) + }) + + } + +} +