From 9861802bb501896c4d5122d4b5c9a9fa95fd4ad5 Mon Sep 17 00:00:00 2001 From: Okechi Onyeje Date: Thu, 10 Nov 2016 09:15:43 -0500 Subject: [PATCH] Reimplemented notifications for facebook --- .DS_Store | Bin 10244 -> 10244 bytes Vendoo.xcodeproj/project.pbxproj | 18 +- .../UserInterfaceState.xcuserstate | Bin 26103 -> 30436 bytes .../xcdebugger/Breakpoints_v2.xcbkptlist | 673 +++++++++++++++++- Vendoo/.DS_Store | Bin 10244 -> 10244 bytes Vendoo/FacebookGraphAPIManager.swift | 14 + Vendoo/HomeViewController.swift | 85 ++- Vendoo/Main.storyboard | 60 +- Vendoo/NotificationTableViewCell.swift | 2 + Vendoo/NotificationsViewController.swift | 91 ++- Vendoo/ServiceNotificationManager.swift | 54 +- 11 files changed, 924 insertions(+), 73 deletions(-) diff --git a/.DS_Store b/.DS_Store index 59fbdbdfacd210a0c3c9fd8a64b64e93fed19cc8..74928256efb371dd287124e2b9d0c5baa6e80ffb 100644 GIT binary patch delta 81 zcmZn(XbG6$&nUMsU^hRb+-4pDekKWHa|;~>BSV8)9ffLha|0a(6JxX5T7k)%jfG}0 j@;2;X009mGMr8+y&9{V2SvI>$9Acl?V78fE;V(M?WknUW delta 114 zcmZn(XbG6$&nUk!U^hRb{AL~jekKVMGcz3pBV(gl9ffLha|0a(6JxX5T7j0$#zM0g zc|#i*K!8JlQQ5(8^DSXh7G)NOa)x4t6owqnoc!dZoctu9yZ{3OV-OH?{0D>0f)ZER KH?u4JWd{IqogZZY diff --git a/Vendoo.xcodeproj/project.pbxproj b/Vendoo.xcodeproj/project.pbxproj index a00d28c..e5b1b72 100644 --- a/Vendoo.xcodeproj/project.pbxproj +++ b/Vendoo.xcodeproj/project.pbxproj @@ -41,6 +41,8 @@ 3EC3252F1CF894E500626C48 /* AVFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3EC3252E1CF894E500626C48 /* AVFoundation.framework */; }; 3ECEDB871CF9C722003566B3 /* ListingPreviewViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3ECEDB861CF9C722003566B3 /* ListingPreviewViewController.swift */; }; 3EDE75AE1D67B92F00BC3472 /* CategoryPopUpController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3EDE75AD1D67B92F00BC3472 /* CategoryPopUpController.swift */; }; + 3EE734E61DCD34AE00F771AE /* NotificationsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3EE734E51DCD34AE00F771AE /* NotificationsViewController.swift */; }; + 3EE734E81DCD34B900F771AE /* NotificationTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3EE734E71DCD34B900F771AE /* NotificationTableViewCell.swift */; }; 3EF422B21D73262000B9A3EB /* UserCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3EF422B11D73262000B9A3EB /* UserCell.swift */; }; 3EFB0E331D0B968300A05D7A /* SideMenuView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3EFB0E321D0B968300A05D7A /* SideMenuView.swift */; }; 3F8E0464700649BDD8B552B1 /* Pods_Vendoo_VendooTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B876489113F498AF1D2FD7E9 /* Pods_Vendoo_VendooTests.framework */; }; @@ -108,6 +110,8 @@ 3EC3252E1CF894E500626C48 /* AVFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AVFoundation.framework; path = System/Library/Frameworks/AVFoundation.framework; sourceTree = SDKROOT; }; 3ECEDB861CF9C722003566B3 /* ListingPreviewViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ListingPreviewViewController.swift; sourceTree = ""; }; 3EDE75AD1D67B92F00BC3472 /* CategoryPopUpController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CategoryPopUpController.swift; sourceTree = ""; }; + 3EE734E51DCD34AE00F771AE /* NotificationsViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NotificationsViewController.swift; sourceTree = ""; }; + 3EE734E71DCD34B900F771AE /* NotificationTableViewCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NotificationTableViewCell.swift; sourceTree = ""; }; 3EF422B11D73262000B9A3EB /* UserCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UserCell.swift; sourceTree = ""; }; 3EFB0E321D0B968300A05D7A /* SideMenuView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SideMenuView.swift; sourceTree = ""; }; 7D1FC6F6278B48A7BA9A9E03 /* Pods_Vendoo_VendooUITests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Vendoo_VendooUITests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -173,11 +177,11 @@ 3E4897CE1D0062860069F742 /* Services */ = { isa = PBXGroup; children = ( + 3E3A00491D76680E00A3A5B6 /* ServiceNotificationManager.swift */, 3EA668941D026E2A00EE57A8 /* EbayServices */, 3E4897CF1D00629B0069F742 /* FirebaseServices */, 3E7CF3FF1CF6363200F486B2 /* EtsyServices */, 3EC325241CF7E6B300626C48 /* FacebookServices */, - 3E3A00491D76680E00A3A5B6 /* ServiceNotificationManager.swift */, ); name = Services; sourceTree = ""; @@ -327,9 +331,19 @@ name = NewItemPostingSession; sourceTree = ""; }; + 3EE734E41DCD347900F771AE /* Notifications */ = { + isa = PBXGroup; + children = ( + 3EE734E71DCD34B900F771AE /* NotificationTableViewCell.swift */, + 3EE734E51DCD34AE00F771AE /* NotificationsViewController.swift */, + ); + name = Notifications; + sourceTree = ""; + }; 3EFB0E2F1D0B95B200A05D7A /* Menu */ = { isa = PBXGroup; children = ( + 3EE734E41DCD347900F771AE /* Notifications */, 3E1AA4331D0DD0B2005FCCBB /* Settings */, 3EFB0E321D0B968300A05D7A /* SideMenuView.swift */, 3E1AA4311D0DA071005FCCBB /* MenuPanelViewController.swift */, @@ -744,6 +758,7 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + 3EE734E81DCD34B900F771AE /* NotificationTableViewCell.swift in Sources */, 3E6CC35B1CF2A94B00E00A70 /* SignUpViewController.swift in Sources */, 3E1AA4321D0DA071005FCCBB /* MenuPanelViewController.swift in Sources */, 3E4897D11D0067030069F742 /* FirebaseManager.swift in Sources */, @@ -762,6 +777,7 @@ 3ECEDB871CF9C722003566B3 /* ListingPreviewViewController.swift in Sources */, 3E1B1F0B1D2493EE00DBCF08 /* EtsySettingsViewController.swift in Sources */, 3EC325231CF7DA5500626C48 /* HomeViewController.swift in Sources */, + 3EE734E61DCD34AE00F771AE /* NotificationsViewController.swift in Sources */, 3EC3252D1CF894C400626C48 /* ItemImagePickerViewController.swift in Sources */, 3E1DC3CD1D4232490091BC60 /* CategoriesTableViewController.swift in Sources */, 3E7CF4011CF6366300F486B2 /* EtsyRESTAPIManager.swift in Sources */, diff --git a/Vendoo.xcworkspace/xcuserdata/okechi.xcuserdatad/UserInterfaceState.xcuserstate b/Vendoo.xcworkspace/xcuserdata/okechi.xcuserdatad/UserInterfaceState.xcuserstate index 8169c3e037faba4c77173dda7d493d976868e296..d191c9fd6e5fa3388e857d5eaefaff8bf8ebb566 100644 GIT binary patch literal 30436 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 BN?!l~ delta 13926 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 @@ -26,11 +26,11 @@ ignoreCount = "0" continueAfterRunningActions = "No" filePath = "Vendoo/HomeViewController.swift" - timestampString = "497362780.635053" + timestampString = "500473804.952967" startingColumnNumber = "9223372036854775807" endingColumnNumber = "9223372036854775807" - startingLineNumber = "238" - endingLineNumber = "238" + startingLineNumber = "293" + endingLineNumber = "293" landmarkName = "listingHasEnded(_:ebayInfo:amazonInfo:etsyInfo:)" landmarkType = "5"> @@ -90,11 +90,183 @@ ignoreCount = "0" continueAfterRunningActions = "No" filePath = "Vendoo/ServiceNotificationManager.swift" - timestampString = "498402552.569625" + timestampString = "500473804.952967" startingColumnNumber = "9223372036854775807" endingColumnNumber = "9223372036854775807" - startingLineNumber = "124" - endingLineNumber = "124" + startingLineNumber = "236" + endingLineNumber = "236"> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -106,12 +278,248 @@ ignoreCount = "0" continueAfterRunningActions = "No" filePath = "Vendoo/HomeViewController.swift" - timestampString = "499579562.452493" + timestampString = "500475450.307316" startingColumnNumber = "9223372036854775807" endingColumnNumber = "9223372036854775807" - startingLineNumber = "256" - endingLineNumber = "256" - landmarkName = "listingHasEnded(_:ebayInfo:amazonInfo:etsyInfo:)" + startingLineNumber = "403" + endingLineNumber = "403"> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -122,12 +530,44 @@ ignoreCount = "0" continueAfterRunningActions = "No" filePath = "Vendoo/HomeViewController.swift" - timestampString = "499579731.915475" + timestampString = "500473804.952967" startingColumnNumber = "9223372036854775807" endingColumnNumber = "9223372036854775807" - startingLineNumber = "273" - endingLineNumber = "273" - landmarkName = "listingHasEnded(_:ebayInfo:amazonInfo:etsyInfo:)" + startingLineNumber = "151" + endingLineNumber = "151" + landmarkName = "viewDidLoad()" + landmarkType = "5"> + + + + + + + + @@ -138,12 +578,203 @@ ignoreCount = "0" continueAfterRunningActions = "No" filePath = "Vendoo/HomeViewController.swift" - timestampString = "499579805.922963" + timestampString = "500473804.952967" startingColumnNumber = "9223372036854775807" endingColumnNumber = "9223372036854775807" - startingLineNumber = "275" - endingLineNumber = "275" - landmarkName = "listingHasEnded(_:ebayInfo:amazonInfo:etsyInfo:)" + startingLineNumber = "310" + endingLineNumber = "310" + landmarkName = "listingHasNewNotifications(_:ebayInfo:amazonInfo:etsyInfo:)" + landmarkType = "5"> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Vendoo/.DS_Store b/Vendoo/.DS_Store index 0929a6a70474837e767a959c18c880fdbe29939d..2f7f9558dd0b20504d3804079c295f93900cf652 100644 GIT binary patch delta 135 zcmZn(XbG6$&uFkQU^hRb!Db$TcWkUT7#Nr>HvbnBWRX;4@MFklC}GHCNCV8cKl@S2n93SNX delta 52 zcmZn(XbG6$RCU^hRb-ew+wcWjfSSr|Ds{}&Tv*?d9ToMmFefz9j+pW(u+i~!QI B5fA_X diff --git a/Vendoo/FacebookGraphAPIManager.swift b/Vendoo/FacebookGraphAPIManager.swift index d86b931..2948775 100644 --- a/Vendoo/FacebookGraphAPIManager.swift +++ b/Vendoo/FacebookGraphAPIManager.swift @@ -238,4 +238,18 @@ extension FacebookGraphAPIManager { return boolResult } + func getListingInfo(requestPath: String!, onCompletion: ServiceResponse!){ + let graphRequest:FBSDKGraphRequest = FBSDKGraphRequest(graphPath: requestPath, parameters: nil, HTTPMethod: "GET") + dispatch_async(dispatch_get_main_queue(), { + graphRequest.startWithCompletionHandler({ + (id, result, error) -> Void in + if error == nil { + onCompletion((result as! [String : AnyObject])["data"] as! [[String:AnyObject]],nil) + } + + + }) + }) + } + } diff --git a/Vendoo/HomeViewController.swift b/Vendoo/HomeViewController.swift index 4d3c1a3..f296422 100644 --- a/Vendoo/HomeViewController.swift +++ b/Vendoo/HomeViewController.swift @@ -19,7 +19,7 @@ class HomeViewController: UITabBarController { var endedListings: [Listing] = [] var soldListings: [Listing] = [] var notificationsManager = ServiceNotificationManager() - var notifications: [Dictionary] = (NSUserDefaults.standardUserDefaults().objectForKey("notifications") == nil ? [] : (NSUserDefaults.standardUserDefaults().objectForKey("notifications") as! [Dictionary])) + var notifications: [Dictionary] = (NSUserDefaults.standardUserDefaults().objectForKey("notifications") == nil ? [] : (NSUserDefaults.standardUserDefaults().objectForKey("notifications") as! [Dictionary])) override func viewDidLoad() { @@ -37,6 +37,18 @@ class HomeViewController: UITabBarController { let listingDict = userDict!["user_Listings"] as? [String : AnyObject] + //sync notifications + /*if userDict!["notifications"] != nil { + self.notifications = [] + for (_, v) in userDict!["notifications"] as! [String : AnyObject] { + if v["seen"] as! Bool == false { + self.notifications.append(v as! Dictionary) + } + } + + NSUserDefaults.standardUserDefaults().setObject(self.notifications, forKey: "notifications") + }*/ + NSUserDefaults.standardUserDefaults().setObject(userDict!["name"] as? String, forKey: "name") if listingDict != nil { @@ -204,12 +216,15 @@ extension HomeViewController: ServiceNotificationManagerDelegate { } func listingHasEnded(fbInfo: AnyObject?, ebayInfo: AnyObject?, amazonInfo: AnyObject?, etsyInfo: AnyObject?) { + var notificationArray: [[String: AnyObject]] = self.notifications + if (fbInfo != nil) { - self.notifications.append( + notificationArray.append( [ "network": "facebook", "message": (ebayInfo as! [String : AnyObject])["notification"] as! String, "type": "ended", + "seen":false, "key": (ebayInfo as! [String : AnyObject])["listingKey"] as! String, "UUID": NSUUID().UUIDString ] @@ -217,11 +232,12 @@ extension HomeViewController: ServiceNotificationManagerDelegate { } if (ebayInfo != nil) { - self.notifications.append( + notificationArray.append( [ "network": "ebay", "message": (ebayInfo as! [String : AnyObject])["notification"] as! String, "type": (ebayInfo as! [String : AnyObject])["type"] as! String, + "seen":false, "key": (ebayInfo as! [String : AnyObject])["listingKey"] as! String, "UUID": NSUUID().UUIDString ] @@ -242,11 +258,12 @@ extension HomeViewController: ServiceNotificationManagerDelegate { } if (amazonInfo != nil) { - self.notifications.append( + notificationArray.append( [ "network": "amazon", "message": (ebayInfo as! [String : AnyObject])["notification"] as! String, "type": (ebayInfo as! [String : AnyObject])["type"] as! String, + "seen":false, "key": (ebayInfo as! [String : AnyObject])["listingKey"] as! String, "UUID": NSUUID().UUIDString ] @@ -254,11 +271,12 @@ extension HomeViewController: ServiceNotificationManagerDelegate { } if (etsyInfo != nil) { - self.notifications.append( + notificationArray.append( [ "network": "etsy", "message": (etsyInfo as! [String : AnyObject])["notification"] as! String, "type": "ended", + "seen":false, "key": (etsyInfo as! [String : AnyObject])["listingKey"] as! String, "UUID": NSUUID().UUIDString ] @@ -274,6 +292,10 @@ extension HomeViewController: ServiceNotificationManagerDelegate { listingDict!["listingStatus"] = "Ended" self.firebaseManager.ref.child("Users/\(self.firebaseManager.user_email)/user_Listings/\(((etsyInfo as! [String : AnyObject])["listingKey"] as! String))").setValue(listingDict) + + + //reload data for notifications + NSUserDefaults.standardUserDefaults().setObject(notificationArray, forKey: "notifications") itemsView.itemTable.reloadData() }) } @@ -282,21 +304,47 @@ extension HomeViewController: ServiceNotificationManagerDelegate { func listingHasNewNotifications(fbInfo: AnyObject?, ebayInfo: AnyObject?, amazonInfo: AnyObject?, etsyInfo: AnyObject?) { + var notificationArray: [Dictionary] = self.notifications if (fbInfo != nil) { - self.notifications.append( - [ - "network": "facebook", - "message": (ebayInfo as! [String : AnyObject])["notification"] as! String, - "type": (ebayInfo as! [String : AnyObject])["type"] as! String, - "key": (ebayInfo as! [String : AnyObject])["listingKey"] as! String, - "UUID": NSUUID().UUIDString - ] - ) + notificationArray.append(fbInfo as! [String : AnyObject]) + + self.firebaseManager.ref.child("Users/\(self.firebaseManager.user_email)").observeSingleEventOfType(.Value, withBlock: { + (snapshot) -> Void in + + var userDict = snapshot.value as? [String : AnyObject] + + if (userDict!["notifications"] != nil) { + var notificationsFir = userDict!["notifications"] as! [String : AnyObject] + notificationsFir[fbInfo!["UUID"] as! String] = fbInfo + + self.firebaseManager.ref.child("Users/\(self.firebaseManager.user_email)/notifications").setValue(notificationsFir, withCompletionBlock: { + (error, reference) -> Void in + + if error == nil { + NSUserDefaults.standardUserDefaults().setObject(notificationArray, forKey: "notifications") + } + + }) + }else { + let id = (fbInfo!["UUID"] as! String) + print(id) + userDict!["notifications"] = ([ id : fbInfo as! [String:AnyObject]]) + self.firebaseManager.ref.child("Users/\(self.firebaseManager.user_email)").setValue(userDict, withCompletionBlock: { + (error, reference) -> Void in + + if error == nil { + NSUserDefaults.standardUserDefaults().setObject(notificationArray, forKey: "notifications") + } + }) + } + }) + + } if (ebayInfo != nil) { - self.notifications.append( + notificationArray.append( [ "network": "ebay", "message": (ebayInfo as! [String : AnyObject])["notification"] as! String, @@ -308,7 +356,7 @@ extension HomeViewController: ServiceNotificationManagerDelegate { } if (amazonInfo != nil) { - self.notifications.append( + notificationArray.append( [ "network": "amazon", "message": (ebayInfo as! [String : AnyObject])["notification"] as! String, @@ -320,7 +368,7 @@ extension HomeViewController: ServiceNotificationManagerDelegate { } if (etsyInfo != nil) { - self.notifications.append( + notificationArray.append( [ "network": "etsy", "message": (etsyInfo as! [String : AnyObject])["notification"] as! String, @@ -332,6 +380,7 @@ extension HomeViewController: ServiceNotificationManagerDelegate { } //@TODO: add firbase logic to add notifications and delete already viewed notifications - + //reload data for notifications + } } diff --git a/Vendoo/Main.storyboard b/Vendoo/Main.storyboard index a2f6b1f..b105bf2 100755 --- a/Vendoo/Main.storyboard +++ b/Vendoo/Main.storyboard @@ -1641,49 +1641,40 @@ - + - + - - + + - + - - - - - - - - - - - - + + + + + + + + + + + + @@ -1691,9 +1682,16 @@ - + + + + + + + + @@ -1730,7 +1728,7 @@ - + @@ -1747,7 +1745,7 @@ - + diff --git a/Vendoo/NotificationTableViewCell.swift b/Vendoo/NotificationTableViewCell.swift index 05e6389..9a02e29 100644 --- a/Vendoo/NotificationTableViewCell.swift +++ b/Vendoo/NotificationTableViewCell.swift @@ -10,6 +10,8 @@ import UIKit class NotificationTableViewCell: UITableViewCell { + @IBOutlet weak var message: UITextView! + @IBOutlet weak var network: UIImageView! override func awakeFromNib() { super.awakeFromNib() // Initialization code diff --git a/Vendoo/NotificationsViewController.swift b/Vendoo/NotificationsViewController.swift index 3dbecdb..2f14ca2 100644 --- a/Vendoo/NotificationsViewController.swift +++ b/Vendoo/NotificationsViewController.swift @@ -9,9 +9,15 @@ import UIKit class NotificationsViewController: UIViewController { - + var notifications: [Dictionary]! = (NSUserDefaults.standardUserDefaults().objectForKey("notifications") == nil ? [] : (NSUserDefaults.standardUserDefaults().objectForKey("notifications") as! [Dictionary])) + var fireBase = FirebaseManager() + + @IBOutlet weak var notificationTable: UITableView! + override func viewDidLoad() { super.viewDidLoad() + self.notificationTable.dataSource = self + self.notificationTable.delegate = self // Do any additional setup after loading the view. } @@ -33,3 +39,86 @@ class NotificationsViewController: UIViewController { */ } + +extension NotificationsViewController: UITableViewDelegate { + func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { + var notification = self.notifications[indexPath.row] + + switch ( notification["network"] as! String) { + case "facebook": + let alert = UIAlertController(title: "New Comment from \(notification["senderName"] as! String)", message: (notification["commentMessage"] as! String), preferredStyle: .Alert) + alert.addAction(UIAlertAction(title: "Mark as Dismissed", style: .Default, handler: { + (action) -> Void in + + notification["seen"] = true + self.notifications[indexPath.row] = notification + self.fireBase.ref.child("Users/\(self.fireBase.user_email)/notifications/\(notification["UUID"] as! String)").setValue(notification, withCompletionBlock: { + (error, reference) -> Void in + + if error == nil { + self.notifications = self.notifications.filter({$0["seen"] as! Bool == false}) + NSUserDefaults.standardUserDefaults().setObject(self.notifications, forKey: "notifications") + self.notificationTable.reloadData() + alert.dismissViewControllerAnimated(true, completion: nil) + } + }) + + })) + alert.addAction(UIAlertAction(title: "OK", style: .Cancel, handler: {(action) -> Void in})) + self.presentViewController(alert, animated: true, completion: nil) + break + case "ebay": + break + case "etsy": + break + case "amazon": + break + + default: + break + } + } +} + +extension NotificationsViewController: UITableViewDataSource { + + func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { + let cell: NotificationTableViewCell! = self.notificationTable.dequeueReusableCellWithIdentifier("notification_cell") as! NotificationTableViewCell + let notification = self.notifications[indexPath.row] + cell.message.text = notification["notification"] as! String + + switch ( notification["network"] as! String) { + case "facebook": + cell.network.image = UIImage(named: "facebook_icon") + break + case "ebay": + cell.network.image = UIImage(named: "ebay_icon") + break + case "etsy": + cell.network.image = UIImage(named: "etsy_icon") + break + case "amazon": + break + + default: + break + } + + + + return cell + } + + func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { + return self.notifications.count + } + +} + +extension NotificationsViewController /*IBoutlets*/ { + @IBAction func dismissNotifications(sender: AnyObject){ + let vc = self.storyboard?.instantiateViewControllerWithIdentifier("Reveal View Controller") + + self.presentViewController(vc!, animated: false, completion: nil) + } +} diff --git a/Vendoo/ServiceNotificationManager.swift b/Vendoo/ServiceNotificationManager.swift index a59fee3..8e94bd3 100644 --- a/Vendoo/ServiceNotificationManager.swift +++ b/Vendoo/ServiceNotificationManager.swift @@ -111,7 +111,59 @@ class ServiceNotificationManager: NSObject { } } if(facebookID != nil){ - + if(self.fbGraphManager.isAuthorized) { + self.fbGraphManager.getListingInfo ("/\(facebookID!)/comments", onCompletion: { + (listingNotificationInfo, error) -> Void in + + dispatch_async(dispatch_get_main_queue(), { + self.firebaseManager.ref.child("Users/\(self.firebaseManager.user_email)").observeEventType(.Value, withBlock: { + (snapshot) -> Void in + + let notifications = ((snapshot.value as? [String : AnyObject])!["notifications"]) as? [String : AnyObject] + + + for commentInfo in (listingNotificationInfo as! [[String: AnyObject]]) { + let fromInfo = commentInfo["from"] as! [String : AnyObject] + if notifications != nil { + if notifications![(commentInfo["id"] as! String)] == nil { + let commentDict = [ + "UUID":(commentInfo["id"] as! String), + "commentMessage":(commentInfo["message"] as! String), + "network":"facebook", + "notification": "Your item \"\(listingDict!["listingTitle"] as! String)\" has a new comment.", + "key": listing.key, + "seen":false, + "senderID":(fromInfo["id"]! as! String), + "senderName":(fromInfo["name"]! as! String), + "type":"FBComment" + ] + ServiceNotificationManager.delegate?.listingHasNewNotifications(commentDict, ebayInfo: nil, amazonInfo: nil, etsyInfo: nil) + } + + }else{ + let commentDict = [ + "UUID":(commentInfo["id"] as! String), + "commentMessage":(commentInfo["message"] as! String), + "network":"facebook", + "notification": "Your item \"\(listingDict!["listingTitle"] as! String)\" has a new comment.", + "key": listing.key, + "seen":false, + "senderID":(fromInfo["id"]! as! String), + "senderName":(fromInfo["name"]! as! String), + "type":"FBComment" + ] + ServiceNotificationManager.delegate?.listingHasNewNotifications(commentDict, ebayInfo: nil, amazonInfo: nil, etsyInfo: nil) + } + + } + + + }) + }) + + }) + + } } if(etsyID != nil){ if (self.etsyManager.isAuthorized) {