diff --git a/GetHip.xcodeproj/project.pbxproj b/GetHip.xcodeproj/project.pbxproj index 3083304..8f8acc1 100644 --- a/GetHip.xcodeproj/project.pbxproj +++ b/GetHip.xcodeproj/project.pbxproj @@ -121,6 +121,7 @@ 3E7D37D71C75D80F002E682F /* Lower@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 3E7D37D61C75D80F002E682F /* Lower@2x.png */; }; 3E7D37D91C75D882002E682F /* B2P Icon@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 3E7D37D81C75D882002E682F /* B2P Icon@2x.png */; }; 3E7D37DB1C75D899002E682F /* B2P Button@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 3E7D37DA1C75D899002E682F /* B2P Button@2x.png */; }; + 3EB6B39B1C87B8AE006B674D /* JoiningPartyViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3EB6B39A1C87B8AE006B674D /* JoiningPartyViewController.swift */; }; 3EB8845D1C6C647700CCDCCE /* Add More@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 3EB8845B1C6C647700CCDCCE /* Add More@2x.png */; }; 3EB8845E1C6C647700CCDCCE /* Leave Party@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 3EB8845C1C6C647700CCDCCE /* Leave Party@2x.png */; }; 3EBE97661C53CEDA0079B54A /* Send Invites Button.png in Resources */ = {isa = PBXBuildFile; fileRef = 3EBE97651C53CEDA0079B54A /* Send Invites Button.png */; }; @@ -284,6 +285,7 @@ 3E7D37D61C75D80F002E682F /* Lower@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "Lower@2x.png"; path = "../../../Dropbox/Gethip/For final/Volume/i5 Volume/Lower@2x.png"; sourceTree = ""; }; 3E7D37D81C75D882002E682F /* B2P Icon@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "B2P Icon@2x.png"; path = "../../../Dropbox/Gethip/For final/Back To Party/i5/B2P Icon@2x.png"; sourceTree = ""; }; 3E7D37DA1C75D899002E682F /* B2P Button@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "B2P Button@2x.png"; path = "../../../Dropbox/Gethip/For final/Back To Party/i5/B2P Button@2x.png"; sourceTree = ""; }; + 3EB6B39A1C87B8AE006B674D /* JoiningPartyViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = JoiningPartyViewController.swift; sourceTree = ""; }; 3EB8845B1C6C647700CCDCCE /* Add More@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "Add More@2x.png"; path = "../../../Dropbox/Gethip/Screens/iPhone 5 Party Screens/Party Screen/Assets/Add More@2x.png"; sourceTree = ""; }; 3EB8845C1C6C647700CCDCCE /* Leave Party@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "Leave Party@2x.png"; path = "../../../Dropbox/Gethip/Screens/iPhone 5 Party Screens/Party Screen/Assets/Leave Party@2x.png"; sourceTree = ""; }; 3EBE97651C53CEDA0079B54A /* Send Invites Button.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "Send Invites Button.png"; path = "../../../Dropbox/Gethip/Screens/Friends + Invite Screens/i6/Invite Friends/Send Invites Button.png"; sourceTree = ""; }; @@ -698,6 +700,7 @@ isa = PBXGroup; children = ( 3E6D43881C7831B100CA805F /* InvitedToPartyViewController.swift */, + 3EB6B39A1C87B8AE006B674D /* JoiningPartyViewController.swift */, ); name = InvitedToParty; sourceTree = ""; @@ -773,7 +776,12 @@ TargetAttributes = { 3E1BDA4B1C37111D00EE3B84 = { CreatedOnToolsVersion = 6.3.2; - DevelopmentTeam = 24WJ762CQL; + DevelopmentTeam = VYHHTUJ5PS; + SystemCapabilities = { + com.apple.BackgroundModes = { + enabled = 1; + }; + }; }; 3E1BDA631C37111D00EE3B84 = { CreatedOnToolsVersion = 6.3.2; @@ -898,6 +906,7 @@ 3EDA82E31C4741C70081ED53 /* FriendDataSource.swift in Sources */, 3EDA82E11C473E900081ED53 /* FriendData.swift in Sources */, 3E627FF21C55AE35005C0372 /* TDAudioOutputStreamer.m in Sources */, + 3EB6B39B1C87B8AE006B674D /* JoiningPartyViewController.swift in Sources */, 3E379F051C3F982900F7BCCD /* FriendsCell.swift in Sources */, 3E1BDA571C37111D00EE3B84 /* ViewController.swift in Sources */, 3E1AAD141C3BD92600809367 /* FriendsListViewController.swift in Sources */, @@ -1056,6 +1065,7 @@ ); GCC_PRECOMPILE_PREFIX_HEADER = NO; INFOPLIST_FILE = GetHip/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 7.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; LIBRARY_SEARCH_PATHS = ( "$(inherited)", @@ -1081,6 +1091,7 @@ ); GCC_PRECOMPILE_PREFIX_HEADER = NO; INFOPLIST_FILE = GetHip/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 7.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; LIBRARY_SEARCH_PATHS = ( "$(inherited)", diff --git a/GetHip/AppDelegate.swift b/GetHip/AppDelegate.swift index 04b7719..15ee187 100644 --- a/GetHip/AppDelegate.swift +++ b/GetHip/AppDelegate.swift @@ -14,15 +14,16 @@ import CoreLocation class AppDelegate: UIResponder, UIApplicationDelegate , CLLocationManagerDelegate{ var window: UIWindow? - // var locationStarted = false - var locationManager: CLLocationManager! - // var app = UIApplication.sharedApplication() + // var locationStarted = false + var locationManager: CLLocationManager! + var backgroundMode:UIBackgroundTaskIdentifier! + var app = UIApplication.sharedApplication() func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { let userNotificationTypes = UIUserNotificationType.Alert | UIUserNotificationType.Badge | UIUserNotificationType.Sound - let settings = UIUserNotificationSettings(forTypes: userNotificationTypes, categories: nil) - application.registerUserNotificationSettings(settings) - application.registerForRemoteNotifications() + //let settings = UIUserNotificationSettings(forTypes: userNotificationTypes, categories: nil) + //application.registerUserNotificationSettings(settings) + //application.registerForRemoteNotifications() //create new CLLocaationManager /*var locationStarted = false @@ -76,7 +77,13 @@ class AppDelegate: UIResponder, UIApplicationDelegate , CLLocationManagerDelegat func applicationDidEnterBackground(application: UIApplication) { - // locationManager.startUpdatingLocation() + locationManager.startUpdatingLocation() + self.backgroundMode = self.app.beginBackgroundTaskWithExpirationHandler({ + //called 3 secs before time expires + //kill session and advertiser + self.app.endBackgroundTask(self.backgroundMode) + self.backgroundMode = UIBackgroundTaskInvalid + }) } func applicationWillEnterForeground(application: UIApplication) { @@ -85,6 +92,9 @@ class AppDelegate: UIResponder, UIApplicationDelegate , CLLocationManagerDelegat func applicationDidBecomeActive(application: UIApplication) { // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface. + + //work on reinitializing session + self.backgroundMode = UIBackgroundTaskInvalid FBSDKAppEvents.activateApp() } diff --git a/GetHip/BackToHomeScreenViewController.swift b/GetHip/BackToHomeScreenViewController.swift index cb32ac7..afb9d99 100644 --- a/GetHip/BackToHomeScreenViewController.swift +++ b/GetHip/BackToHomeScreenViewController.swift @@ -44,14 +44,14 @@ class BackToHomeScreenViewController: UIViewController { let nav: UINavigationController = (segue.destinationViewController as? UINavigationController)! let vc: SettingsTableViewController = (nav.viewControllers[0] as? SettingsTableViewController)! - vc.setData(self.userData, prty: self.partyData) + vc.setData(self.userData, prty: self.partyData, frends: self.friendData, request: self.requestData) } if segue.identifier == "FromPartyFriendsSegue" { let nav: UINavigationController = (segue.destinationViewController as? UINavigationController)! let vc: FriendsListViewController = (nav.viewControllers[0] as? FriendsListViewController)! - vc.setData(self.friendData, requst: self.requestData, party: self.partyData) + vc.setData(self.friendData, requst: self.requestData, party: self.partyData, user: self.userData) } } diff --git a/GetHip/CurrentlyPlayingViewController.swift b/GetHip/CurrentlyPlayingViewController.swift index 9e55dc6..11d1633 100644 --- a/GetHip/CurrentlyPlayingViewController.swift +++ b/GetHip/CurrentlyPlayingViewController.swift @@ -8,13 +8,17 @@ import UIKit import MediaPlayer +import AVFoundation -class CurrentlyPlayingViewController: UIViewController { +class CurrentlyPlayingViewController: UIViewController{ //persistant data var party: PartyServiceManager! var usr: [UserParseData] = [] var frnds: [FriendData] = [] var requestData: [FriendData] = [] + var audioPlayer: AVPlayer! + var playing = true + var timer = NSTimer() //controller data @IBOutlet var songImg: UIImageView! @@ -27,8 +31,22 @@ class CurrentlyPlayingViewController: UIViewController { //Host buttons @IBOutlet var volCtrl: UISlider! @IBOutlet var ppfButton: UIButton! - @IBAction func playPauseFav(sender: UIButton){ + @IBAction func volChng(sender: UISlider){ + self.audioPlayer.volume = sender.value + } + @IBAction func playPauseFav(sender: UIButton){ + if(playing == true){ + self.audioPlayer.pause() + self.playing = false + self.ppfButton.setBackgroundImage(UIImage(named: "Play-52.png"), forState: UIControlState.Normal) + + }else{ + self.audioPlayer.play() + self.playing = true + self.ppfButton.setBackgroundImage(UIImage(named: "Pause-52.png"), forState: UIControlState.Normal) + + } } @@ -39,15 +57,29 @@ class CurrentlyPlayingViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() - + self.audioPlayer = AVPlayer(URL: self.party.currentSong.valueForProperty(MPMediaItemPropertyAssetURL) as! NSURL) + // Do any additional setup after loading the view. self.songImg.image = self.party.currentSong.valueForProperty(MPMediaItemPropertyArtwork).imageWithSize(songImg.frame.size) self.titleLabel.text = (self.party.currentSong.valueForProperty(MPMediaItemPropertyTitle) as? String!)! self.artistAndAlbumLabel.text = (self.party.currentSong.valueForProperty(MPMediaItemPropertyArtist) as? String!)! + " - " + (self.party.currentSong.valueForProperty(MPMediaItemPropertyAlbumTitle) as? String!)! - + self.audioPlayer.volume = self.volCtrl.value + self.maxLabel.text = String(stringInterpolationSegment: self.audioPlayer.currentItem.duration.value) + self.audioPlayer.play() + self.timer = NSTimer.scheduledTimerWithTimeInterval(1, target: self, selector: Selector("updateLabels"), userInfo: nil, repeats: true) } + func updateLabels(){ + var timeLeft = self.audioPlayer.currentItem.duration.value - self.audioPlayer.currentTime().value + var interval = timeLeft + var seconds = interval%60 + println(seconds) + var minutes = (interval/60)%60 + println(minutes) + //self.maxLabel.text + //self.minLabel.text + } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. diff --git a/GetHip/FriendsListViewController.swift b/GetHip/FriendsListViewController.swift index 1df14a2..615a635 100644 --- a/GetHip/FriendsListViewController.swift +++ b/GetHip/FriendsListViewController.swift @@ -7,11 +7,13 @@ // import UIKit +import MultipeerConnectivity -class FriendsListViewController: UIViewController, UITableViewDelegate, UITableViewDataSource/*PFQueryTableViewController*/ { +class FriendsListViewController: UIViewController, UITableViewDelegate, UITableViewDataSource, PartyServiceManagerDelegate { //var manager = FriendDataSource() var friends = [] var request = [] + var user: [UserParseData]! var party: PartyServiceManager! @IBOutlet weak var table: UITableView! @@ -27,16 +29,18 @@ class FriendsListViewController: UIViewController, UITableViewDelegate, UITableV self.performSegueWithIdentifier("FriendRequestSegue", sender: nil) } - func setData(frnds:[FriendData], requst: [FriendData], party: PartyServiceManager){ + func setData(frnds:[FriendData], requst: [FriendData], party: PartyServiceManager, user: [UserParseData]){ self.friends = frnds self.request = requst self.party = party + self.user = user } override func viewDidLoad() { super.viewDidLoad() self.table.delegate = self self.table.dataSource = self + self.party.delegate = self self.title = "Friends" self.navigationController?.navigationBarHidden = false @@ -181,3 +185,29 @@ class FriendsListViewController: UIViewController, UITableViewDelegate, UITableV } } + +extension FriendsListViewController: PartyServiceManagerDelegate { + func foundPeer() { + + } + + func lostPeer() { + + } + + func invitationWasRecieved(peerID: MCPeerID, invitationHandler: ((Bool, MCSession!) -> Void)!) { + var storyboard = UIStoryboard(name: "Main", bundle: nil) + var vc: InvitedToPartyViewController = storyboard.instantiateViewControllerWithIdentifier("InvitedToPartyVC") as! InvitedToPartyViewController! + vc.setData(self.party, user: self.user, friends: (self.friends as! [FriendData]), request: (self.request as! [FriendData]), invHand: invitationHandler, fromPeer: peerID) + self.presentViewController(vc, animated: true, completion: nil) + } + + func connectedWithPeer(peerID: MCPeerID) { + + } + + func didRecieveInstruction(dictionary: Dictionary){ + + } +} + diff --git a/GetHip/HomeScreenViewController.swift b/GetHip/HomeScreenViewController.swift index 2908cbd..0d9a030 100644 --- a/GetHip/HomeScreenViewController.swift +++ b/GetHip/HomeScreenViewController.swift @@ -7,8 +7,9 @@ // import UIKit +import MultipeerConnectivity -class HomeScreenViewController: UIViewController { +class HomeScreenViewController: UIViewController, PartyServiceManagerDelegate { var usrDataManager: UserParseDataSource! var frndDataManager: FriendDataSource! var friendData: [FriendData] = [] @@ -40,10 +41,13 @@ class HomeScreenViewController: UIViewController { if(self.firstTime == true){ self.partyData.setPeerID((self.userData[0].displayName)) + self.partyData.initializeSession() + self.partyData.setAdvertiser() //start peer-to-peer advertising self.partyData.startListening() + self.partyData.delegate = self self.firstTime = false } @@ -54,14 +58,6 @@ class HomeScreenViewController: UIViewController { } - @IBAction func testGuest(sender: UIButton){ - var storyboard = UIStoryboard(name: "Main", bundle: nil) - var vc: InvitedToPartyViewController = storyboard.instantiateViewControllerWithIdentifier("InvitedToPartyVC") as! InvitedToPartyViewController! - vc.setData(self.partyData, user: self.userData, friends: self.friendData, request: self.requestData) - self.presentViewController(vc, animated: true, completion: nil) - } - - override func viewDidLoad() { super.viewDidLoad() @@ -116,14 +112,14 @@ class HomeScreenViewController: UIViewController { let nav: UINavigationController = (segue.destinationViewController as? UINavigationController)! let vc: SettingsTableViewController = (nav.viewControllers[0] as? SettingsTableViewController)! - vc.setData(self.userData, prty: self.partyData) + vc.setData(self.userData, prty: self.partyData, frends: self.friendData, request: self.requestData) } if segue.identifier == "FriendListSegue" { let nav: UINavigationController = (segue.destinationViewController as? UINavigationController)! let vc: FriendsListViewController = (nav.viewControllers[0] as? FriendsListViewController)! - vc.setData(self.friendData, requst: self.requestData, party: self.partyData) + vc.setData(self.friendData, requst: self.requestData, party: self.partyData, user: self.userData) } } @@ -138,3 +134,31 @@ class HomeScreenViewController: UIViewController { */ } + +extension HomeScreenViewController: PartyServiceManagerDelegate { + func foundPeer() { + + } + + func lostPeer() { + + } + + func invitationWasRecieved(peerID: MCPeerID, invitationHandler: ((Bool, MCSession!) -> Void)!) { + var storyboard = UIStoryboard(name: "Main", bundle: nil) + var vc: InvitedToPartyViewController = storyboard.instantiateViewControllerWithIdentifier("InvitedToPartyVC") as! InvitedToPartyViewController! + vc.setData(self.partyData, user: self.userData, friends: self.friendData, request: self.requestData, invHand: invitationHandler, fromPeer: peerID) + self.presentViewController(vc, animated: true, completion: nil) + } + + func connectedWithPeer(peerID: MCPeerID) { + + } + + func didRecieveInstruction(dictionary: Dictionary){ + + } +} + + + diff --git a/GetHip/Images-3.xcassets/AppIcon.appiconset/Contents.json b/GetHip/Images-3.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 0000000..a47b64c --- /dev/null +++ b/GetHip/Images-3.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,175 @@ +{ + "images" : [ + { + "size" : "29x29", + "idiom" : "iphone", + "filename" : "Icon-Small.png", + "scale" : "1x" + }, + { + "size" : "29x29", + "idiom" : "iphone", + "filename" : "Icon-Small@2x.png", + "scale" : "2x" + }, + { + "size" : "29x29", + "idiom" : "iphone", + "filename" : "Icon-Small@3x.png", + "scale" : "3x" + }, + { + "size" : "40x40", + "idiom" : "iphone", + "filename" : "Icon-Spotlight-40@2x.png", + "scale" : "2x" + }, + { + "size" : "40x40", + "idiom" : "iphone", + "filename" : "Icon-Spotlight-40@3x.png", + "scale" : "3x" + }, + { + "size" : "57x57", + "idiom" : "iphone", + "filename" : "Icon.png", + "scale" : "1x" + }, + { + "size" : "57x57", + "idiom" : "iphone", + "filename" : "Icon@2x.png", + "scale" : "2x" + }, + { + "size" : "60x60", + "idiom" : "iphone", + "filename" : "Icon-60@2x.png", + "scale" : "2x" + }, + { + "size" : "60x60", + "idiom" : "iphone", + "filename" : "Icon-60@3x.png", + "scale" : "3x" + }, + { + "size" : "29x29", + "idiom" : "ipad", + "filename" : "Icon-Small-1.png", + "scale" : "1x" + }, + { + "size" : "29x29", + "idiom" : "ipad", + "filename" : "Icon-Small@2x-1.png", + "scale" : "2x" + }, + { + "size" : "40x40", + "idiom" : "ipad", + "filename" : "Icon-Spotlight-40.png", + "scale" : "1x" + }, + { + "size" : "40x40", + "idiom" : "ipad", + "filename" : "Icon-Spotlight-40@2x-1.png", + "scale" : "2x" + }, + { + "idiom" : "ipad", + "size" : "50x50", + "scale" : "1x" + }, + { + "idiom" : "ipad", + "size" : "50x50", + "scale" : "2x" + }, + { + "idiom" : "ipad", + "size" : "72x72", + "scale" : "1x" + }, + { + "idiom" : "ipad", + "size" : "72x72", + "scale" : "2x" + }, + { + "idiom" : "ipad", + "size" : "76x76", + "scale" : "1x" + }, + { + "idiom" : "ipad", + "size" : "76x76", + "scale" : "2x" + }, + { + "idiom" : "car", + "size" : "120x120", + "scale" : "1x" + }, + { + "size" : "24x24", + "idiom" : "watch", + "scale" : "2x", + "role" : "notificationCenter", + "subtype" : "38mm" + }, + { + "size" : "27.5x27.5", + "idiom" : "watch", + "scale" : "2x", + "role" : "notificationCenter", + "subtype" : "42mm" + }, + { + "size" : "29x29", + "idiom" : "watch", + "role" : "companionSettings", + "scale" : "2x" + }, + { + "size" : "29x29", + "idiom" : "watch", + "role" : "companionSettings", + "scale" : "3x" + }, + { + "size" : "40x40", + "idiom" : "watch", + "scale" : "2x", + "role" : "appLauncher", + "subtype" : "38mm" + }, + { + "size" : "44x44", + "idiom" : "watch", + "scale" : "2x", + "role" : "longLook", + "subtype" : "42mm" + }, + { + "size" : "86x86", + "idiom" : "watch", + "scale" : "2x", + "role" : "quickLook", + "subtype" : "38mm" + }, + { + "size" : "98x98", + "idiom" : "watch", + "scale" : "2x", + "role" : "quickLook", + "subtype" : "42mm" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/GetHip/Images-3.xcassets/AppIcon.appiconset/Icon-60@2x.png b/GetHip/Images-3.xcassets/AppIcon.appiconset/Icon-60@2x.png new file mode 100644 index 0000000..5fd0f34 Binary files /dev/null and b/GetHip/Images-3.xcassets/AppIcon.appiconset/Icon-60@2x.png differ diff --git a/GetHip/Images-3.xcassets/AppIcon.appiconset/Icon-60@3x.png b/GetHip/Images-3.xcassets/AppIcon.appiconset/Icon-60@3x.png new file mode 100644 index 0000000..8c46576 Binary files /dev/null and b/GetHip/Images-3.xcassets/AppIcon.appiconset/Icon-60@3x.png differ diff --git a/GetHip/Images-3.xcassets/AppIcon.appiconset/Icon-Small-1.png b/GetHip/Images-3.xcassets/AppIcon.appiconset/Icon-Small-1.png new file mode 100644 index 0000000..765c023 Binary files /dev/null and b/GetHip/Images-3.xcassets/AppIcon.appiconset/Icon-Small-1.png differ diff --git a/GetHip/Images-3.xcassets/AppIcon.appiconset/Icon-Small.png b/GetHip/Images-3.xcassets/AppIcon.appiconset/Icon-Small.png new file mode 100644 index 0000000..765c023 Binary files /dev/null and b/GetHip/Images-3.xcassets/AppIcon.appiconset/Icon-Small.png differ diff --git a/GetHip/Images-3.xcassets/AppIcon.appiconset/Icon-Small@2x-1.png b/GetHip/Images-3.xcassets/AppIcon.appiconset/Icon-Small@2x-1.png new file mode 100644 index 0000000..c3cc244 Binary files /dev/null and b/GetHip/Images-3.xcassets/AppIcon.appiconset/Icon-Small@2x-1.png differ diff --git a/GetHip/Images-3.xcassets/AppIcon.appiconset/Icon-Small@2x.png b/GetHip/Images-3.xcassets/AppIcon.appiconset/Icon-Small@2x.png new file mode 100644 index 0000000..c3cc244 Binary files /dev/null and b/GetHip/Images-3.xcassets/AppIcon.appiconset/Icon-Small@2x.png differ diff --git a/GetHip/Images-3.xcassets/AppIcon.appiconset/Icon-Small@3x.png b/GetHip/Images-3.xcassets/AppIcon.appiconset/Icon-Small@3x.png new file mode 100644 index 0000000..d5fccc6 Binary files /dev/null and b/GetHip/Images-3.xcassets/AppIcon.appiconset/Icon-Small@3x.png differ diff --git a/GetHip/Images-3.xcassets/AppIcon.appiconset/Icon-Spotlight-40.png b/GetHip/Images-3.xcassets/AppIcon.appiconset/Icon-Spotlight-40.png new file mode 100644 index 0000000..dbce28e Binary files /dev/null and b/GetHip/Images-3.xcassets/AppIcon.appiconset/Icon-Spotlight-40.png differ diff --git a/GetHip/Images-3.xcassets/AppIcon.appiconset/Icon-Spotlight-40@2x-1.png b/GetHip/Images-3.xcassets/AppIcon.appiconset/Icon-Spotlight-40@2x-1.png new file mode 100644 index 0000000..30dc15b Binary files /dev/null and b/GetHip/Images-3.xcassets/AppIcon.appiconset/Icon-Spotlight-40@2x-1.png differ diff --git a/GetHip/Images-3.xcassets/AppIcon.appiconset/Icon-Spotlight-40@2x.png b/GetHip/Images-3.xcassets/AppIcon.appiconset/Icon-Spotlight-40@2x.png new file mode 100644 index 0000000..30dc15b Binary files /dev/null and b/GetHip/Images-3.xcassets/AppIcon.appiconset/Icon-Spotlight-40@2x.png differ diff --git a/GetHip/Images-3.xcassets/AppIcon.appiconset/Icon-Spotlight-40@3x.png b/GetHip/Images-3.xcassets/AppIcon.appiconset/Icon-Spotlight-40@3x.png new file mode 100644 index 0000000..aa940cb Binary files /dev/null and b/GetHip/Images-3.xcassets/AppIcon.appiconset/Icon-Spotlight-40@3x.png differ diff --git a/GetHip/Images-3.xcassets/AppIcon.appiconset/Icon.png b/GetHip/Images-3.xcassets/AppIcon.appiconset/Icon.png new file mode 100644 index 0000000..036a9ea Binary files /dev/null and b/GetHip/Images-3.xcassets/AppIcon.appiconset/Icon.png differ diff --git a/GetHip/Images-3.xcassets/AppIcon.appiconset/Icon@2x.png b/GetHip/Images-3.xcassets/AppIcon.appiconset/Icon@2x.png new file mode 100644 index 0000000..443a42f Binary files /dev/null and b/GetHip/Images-3.xcassets/AppIcon.appiconset/Icon@2x.png differ diff --git a/GetHip/Info.plist b/GetHip/Info.plist index ceed721..e93260b 100644 --- a/GetHip/Info.plist +++ b/GetHip/Info.plist @@ -7,7 +7,7 @@ CFBundleExecutable $(EXECUTABLE_NAME) CFBundleIdentifier - oonyeje.Kroleo.$(PRODUCT_NAME:rfc1034identifier) + com.Kroleo.$(PRODUCT_NAME:rfc1034identifier) CFBundleInfoDictionaryVersion 6.0 CFBundleName @@ -37,6 +37,12 @@ Get Hip! LSRequiresIPhoneOS + UIBackgroundModes + + audio + location + remote-notification + UILaunchStoryboardName LaunchScreen UIMainStoryboardFile diff --git a/GetHip/InvitedToPartyViewController.swift b/GetHip/InvitedToPartyViewController.swift index c6a8265..c24d125 100644 --- a/GetHip/InvitedToPartyViewController.swift +++ b/GetHip/InvitedToPartyViewController.swift @@ -7,27 +7,60 @@ // import UIKit +import MultipeerConnectivity -class InvitedToPartyViewController: UIViewController { +class InvitedToPartyViewController: UIViewController , PartyServiceManagerDelegate{ var friendData: [FriendData] = [] var requestData: [FriendData] = [] var userData: [UserParseData] = [] var partyData: PartyServiceManager! + var inviteHandle: ((Bool, MCSession!) -> Void)! + private var fromPeer: MCPeerID! @IBOutlet var img: UIImageView! + @IBOutlet var inviteTxt: UITextView! @IBAction func declineInvite(sender: UIButton){ + self.inviteHandle(false, self.partyData.session) self.dismissViewControllerAnimated(true, completion: nil) } @IBAction func acceptInvite(sender: UIButton){ - + self.inviteHandle(true, self.partyData.session) + self.performSegueWithIdentifier("JoiningPartySegue", sender: self) } override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view. + var query = PFQuery(className: "_User") + query.whereKey("username", equalTo: self.fromPeer.displayName) + + dispatch_async(dispatch_get_main_queue(), {() -> Void in + query.getFirstObjectInBackgroundWithBlock({ + (object: PFObject?, error: NSError?) -> Void in + if(error == nil){ + self.inviteTxt.text = "You have been invited by " + (object?.objectForKey("username")! as? String)! + " to join a Party!" + + //download profile imge + var img = object!.objectForKey("profilePicture")! as? PFFile + + dispatch_async(dispatch_get_main_queue(), { + img!.getDataInBackgroundWithBlock({ + (imgData, error) -> Void in + + var downloadedImg = UIImage(data: imgData!) + self.img.image = downloadedImg + self.img.layer.cornerRadius = self.img.frame.size.width/2 + self.img.clipsToBounds = true + }) + }) + } + }) + }) + + } override func didReceiveMemoryWarning() { @@ -35,11 +68,13 @@ class InvitedToPartyViewController: UIViewController { // Dispose of any resources that can be recreated. } - func setData(prty:PartyServiceManager, user: [UserParseData], friends: [FriendData], request: [FriendData]){ + func setData(prty:PartyServiceManager, user: [UserParseData], friends: [FriendData], request: [FriendData], invHand: ((Bool, MCSession!) -> Void)!, fromPeer: MCPeerID){ self.partyData = prty self.userData = user self.friendData = friends self.requestData = request + self.inviteHandle = invHand + self.fromPeer = fromPeer } // MARK: - Navigation @@ -50,17 +85,48 @@ class InvitedToPartyViewController: UIViewController { let nav: UINavigationController = (segue.destinationViewController as? UINavigationController)! let vc: SettingsTableViewController = (nav.viewControllers[0] as? SettingsTableViewController)! - vc.setData(self.userData, prty: self.partyData) + vc.setData(self.userData, prty: self.partyData, frends: self.friendData, request: self.requestData) } if segue.identifier == "InvitedToPartyFriendsSegue" { let nav: UINavigationController = (segue.destinationViewController as? UINavigationController)! let vc: FriendsListViewController = (nav.viewControllers[0] as? FriendsListViewController)! - vc.setData(self.friendData, requst: self.requestData, party: self.partyData) + vc.setData(self.friendData, requst: self.requestData, party: self.partyData, user: self.userData) + } + + if segue.identifier == "JoiningPartySegue" { + let vc: JoiningPartyViewController = (segue.destinationViewController as? JoiningPartyViewController)! + + vc.setData(self.friendData, requst: self.requestData, party: self.partyData, user: self.userData) } } +} + +extension InvitedToPartyViewController: PartyServiceManagerDelegate { + + func foundPeer() { + + } + + func lostPeer() { + + } + + func invitationWasRecieved(peerID: MCPeerID, invitationHandler: ((Bool, MCSession!) -> Void)!) { + + } + + func connectedWithPeer(peerID: MCPeerID) { + println("mark 0") + } + + func didRecieveInstruction(dictionary: Dictionary){ + + } + + } \ No newline at end of file diff --git a/GetHip/JoiningPartyViewController.swift b/GetHip/JoiningPartyViewController.swift new file mode 100644 index 0000000..8f34643 --- /dev/null +++ b/GetHip/JoiningPartyViewController.swift @@ -0,0 +1,73 @@ +// +// JoiningPartyViewController.swift +// GetHip +// +// Created by Okechi on 3/2/16. +// Copyright (c) 2016 Kroleo. All rights reserved. +// + +import UIKit +import MultipeerConnectivity + +class JoiningPartyViewController: UIViewController ,PartyServiceManagerDelegate{ + var friends = [] + var request = [] + var user: [UserParseData]! + var party: PartyServiceManager! + + override func viewDidLoad() { + super.viewDidLoad() + + // Do any additional setup after loading the view. + self.party.delegate = self + } + + override func didReceiveMemoryWarning() { + super.didReceiveMemoryWarning() + // Dispose of any resources that can be recreated. + } + + func setData(frnds:[FriendData], requst: [FriendData], party: PartyServiceManager, user: [UserParseData]){ + self.friends = frnds + self.request = requst + self.party = party + self.user = user + } + + /* + // 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. + } + */ + +} + +extension JoiningPartyViewController: PartyServiceManagerDelegate { + + func foundPeer() { + + } + + func lostPeer() { + + } + + func invitationWasRecieved(peerID: MCPeerID, invitationHandler: ((Bool, MCSession!) -> Void)!) { + + } + + func connectedWithPeer(peerID: MCPeerID) { + println("mark 2") + var dictionary: [String: String] = ["sender": self.party.myPeerID.displayName, "instruction": "joined_party"] + self.party.sendInstruction(dictionary, toPeer: peerID) + } + + func didRecieveInstruction(dictionary: Dictionary){ + + } + +} diff --git a/GetHip/LoadingPartyViewController.swift b/GetHip/LoadingPartyViewController.swift index 448314f..42c8ea7 100644 --- a/GetHip/LoadingPartyViewController.swift +++ b/GetHip/LoadingPartyViewController.swift @@ -8,8 +8,9 @@ import UIKit import MediaPlayer +import MultipeerConnectivity -class LoadingPartyViewController: UIViewController, UICollectionViewDataSource, UICollectionViewDelegate{ +class LoadingPartyViewController: UIViewController, UICollectionViewDataSource, UICollectionViewDelegate, PartyServiceManagerDelegate{ //persistant data var party: PartyServiceManager! var usr: [UserParseData] = [] @@ -22,7 +23,7 @@ class LoadingPartyViewController: UIViewController, UICollectionViewDataSource, @IBOutlet var songLabel: UILabel! @IBOutlet var timerLabel: UILabel! var timer = NSTimer() - var counter = 30 + var counter = 60 @IBAction func cancelInvites(sender: UIButton){ self.dismissViewControllerAnimated(true, completion: nil) @@ -47,6 +48,7 @@ class LoadingPartyViewController: UIViewController, UICollectionViewDataSource, self.songLabel.text = (self.party.currentSong.valueForProperty(MPMediaItemPropertyTitle) as? String!)! + " by " + (self.party.currentSong.valueForProperty(MPMediaItemPropertyArtist) as? String!)! //sets up timer label and starts countdown to next screen + //NSNotificationCenter.defaultCenter().addObserver(self, selector: "updateThumbnail:", name: "peerConnected", object: nil) self.timerLabel.text = String(counter) self.timer = NSTimer.scheduledTimerWithTimeInterval(1, target: self, selector: Selector("updateCounter"), userInfo: nil, repeats: true) } @@ -56,9 +58,13 @@ class LoadingPartyViewController: UIViewController, UICollectionViewDataSource, // Dispose of any resources that can be recreated. } + func updateThumbnil(notification: NSNotification){ + + } + func updateCounter(){ self.timerLabel.text = String(counter--) - if(self.counter == -2){ + if(self.counter == -1){ self.timer.invalidate() self.performSegueWithIdentifier("CurrentlyPlayingSegue", sender: nil) } @@ -112,3 +118,51 @@ class LoadingPartyViewController: UIViewController, UICollectionViewDataSource, } + +extension LoadingPartyViewController: PartyServiceManagerDelegate { + + func foundPeer() { + + } + + func lostPeer() { + + } + + func invitationWasRecieved(peerID: MCPeerID, invitationHandler: ((Bool, MCSession!) -> Void)!) { + + } + + func connectedWithPeer(peerID: MCPeerID) { + println(self.party.myPeerID.displayName + " connected to " + peerID.displayName) + var i = 0 + for(index, aFriend) in enumerate(self.party.invitedFriends) { + if aFriend.displayName == peerID.displayName { + i = index + break + } + } + + let cell: InvitedCollectionViewCell = self.invitedFriends.dequeueReusableCellWithReuseIdentifier("InvitedCollectionCell", forIndexPath: NSIndexPath(index: i)) as! InvitedCollectionViewCell + + cell.alpha = 1.0 + + + } + + func didRecieveInstruction(dictionary: Dictionary){ + //extract data from dictionary + println("mark 3") + let data = dictionary["data"] as? NSData + let fromPeer = dictionary["fromPeer"] as! MCPeerID + + //convert data to dictionary object with instruction + let dataDictionary = NSKeyedUnarchiver.unarchiveObjectWithData(data!) as! Dictionary + + //check if this is an instruction being sent + if let instruction = dataDictionary["instruction"] { + println(instruction) + } + } + +} \ No newline at end of file diff --git a/GetHip/LoginController.swift b/GetHip/LoginController.swift index 003538a..d7e9027 100644 --- a/GetHip/LoginController.swift +++ b/GetHip/LoginController.swift @@ -47,14 +47,23 @@ class LoginController: UIViewController, PFLogInViewControllerDelegate, UITextFi PFUser.logInWithUsernameInBackground(userEmailField.text!, password: password.text!, block: { (user, error) -> Void in - if(user != nil){ - self.performSegueWithIdentifier("LoginToHomeSegue", sender: self) + if(error == nil){ + if(user != nil){ + self.performSegueWithIdentifier("LoginToHomeSegue", sender: self) + }else{ + + var alert = UIAlertController(title: "Invalid Login", message: "Your username/email or password is incorrect!", preferredStyle: .Alert) + alert.addAction(UIAlertAction(title: "OK", style: .Default, handler:{(action: UIAlertAction!) in alert.dismissViewControllerAnimated(true, completion: nil)})) + + self.presentViewController(alert, animated: true, completion: nil) + } }else{ - var alert = UIAlertController(title: "Invalid Login", message: "Your username/email or password is incorrect!", preferredStyle: .Alert) + let alert = UIAlertController(title: "Network Error", message: error?.description, preferredStyle: .Alert) alert.addAction(UIAlertAction(title: "OK", style: .Default, handler:{(action: UIAlertAction!) in alert.dismissViewControllerAnimated(true, completion: nil)})) self.presentViewController(alert, animated: true, completion: nil) } + }) } diff --git a/GetHip/Main.storyboard b/GetHip/Main.storyboard index 0e1a7a8..8d19132 100644 --- a/GetHip/Main.storyboard +++ b/GetHip/Main.storyboard @@ -1,6 +1,7 @@ + @@ -191,10 +192,10 @@ - + - + @@ -239,12 +240,6 @@ - - - - - - + + + + + + + @@ -623,9 +625,6 @@ - - - + + @@ -1646,9 +1647,9 @@ - - - + + + diff --git a/GetHip/PartyServiceManager.swift b/GetHip/PartyServiceManager.swift index 75b7476..3dc809c 100644 --- a/GetHip/PartyServiceManager.swift +++ b/GetHip/PartyServiceManager.swift @@ -16,10 +16,12 @@ protocol PartyServiceManagerDelegate { func lostPeer() - func invitationWasRecieved(fromPeer: String) + func invitationWasRecieved(peerID: MCPeerID, invitationHandler: ((Bool, MCSession!) -> Void)!) func connectedWithPeer(peerID: MCPeerID) + func didRecieveInstruction(dictionary: Dictionary) + } @@ -52,30 +54,13 @@ class PartyServiceManager: NSObject { var role: PeerType! = nil var currentHost: String! - var connectingPeersDictionary = NSMutableDictionary() + var connectedPeersDictionary = NSMutableDictionary() var disconnectedPeersDictionary = NSMutableDictionary() //party variables var currentSong: MPMediaItem! = nil - /*init(){ - - //self.serviceAdvertiser = MCNearbyServiceAdvertiser(peer: self.myPeerID, discoveryInfo: nil, serviceType: self.PartyServiceType) - //super.init() - //self.serviceAdvertiser.delegate = self - - }*/ - /*deinit { - //stop all session services - self.serviceAdvertiser.stopAdvertisingPeer() - self.serviceBrowser.stopBrowsingForPeers() - }*/ - - /*lazy var session: MCSession = { - let session = MCSession(peer: self.myPeerID, securityIdentity: nil, encryptionPreference: MCEncryptionPreference.Required) - - }()*/ //Peer Initializer func setPeerID(dispName: String){ @@ -99,6 +84,30 @@ class PartyServiceManager: NSObject { } } + func isPeerFound(peer: MCPeerID) -> Bool { + for i in 0.., toPeer: MCPeerID) -> Bool { + + let dataToSend = NSKeyedArchiver.archivedDataWithRootObject(dictionary) + let peersArray = NSArray(object: toPeer) + var error: NSError? + + if !(self.session.sendData(dataToSend, toPeers: peersArray as [AnyObject], withMode: MCSessionSendDataMode.Reliable, error: &error)){ + println(error?.localizedDescription) + return false + } + + return true + } + //Listening methods func setAdvertiser(){ self.serviceAdvertiser = MCNearbyServiceAdvertiser(peer: self.myPeerID, discoveryInfo: nil, serviceType: self.PartyServiceType) @@ -208,28 +217,36 @@ extension PartyServiceManager: MCNearbyServiceBrowserDelegate{ func browser(browser: MCNearbyServiceBrowser!, foundPeer peerID: MCPeerID!, withDiscoveryInfo info: [NSObject : AnyObject]!) { - if(peerID.displayName != self.myPeerID.displayName) { - NSLog("%@", "foundPeer: \(peerID)") - self.foundPeers.append(peerID) - self.delegate?.foundPeer() - //self.serviceBrowser.invitePeer(peerID, toSession: self.session, withContext: nil, timeout: NSTimeInterval(10.00)) + if(!isPeerFound(peerID)){ + if(peerID.displayName != self.myPeerID.displayName) { + NSLog("%@", "foundPeer: \(peerID)") + self.foundPeers.append(peerID) + self.delegate?.foundPeer() + //self.serviceBrowser.invitePeer(peerID, toSession: self.session, withContext: nil, timeout: NSTimeInterval(60.00)) + + } + } - //implement way of picking which friends from friend list are invited + } func browser(browser: MCNearbyServiceBrowser!, lostPeer peerID: MCPeerID!) { NSLog("%@", "lostPeer: \(peerID)") - for(index, aPeer) in enumerate(foundPeers) { - if aPeer == peerID{ - foundPeers.removeAtIndex(index) - break + if(isPeerFound(peerID)){ + for(index, aPeer) in enumerate(foundPeers) { + if aPeer == peerID{ + foundPeers.removeAtIndex(index) + break + } } + + delegate?.lostPeer() } - delegate?.lostPeer() + } } @@ -242,7 +259,7 @@ extension PartyServiceManager: MCNearbyServiceAdvertiserDelegate{ func advertiser(advertiser: MCNearbyServiceAdvertiser!, didReceiveInvitationFromPeer peerID: MCPeerID!, withContext context: NSData!, invitationHandler: ((Bool, MCSession!) -> Void)!) { NSLog("%@", "invitingPeer: \(peerID)") self.setRole(PeerType(rawValue: 3)!) - invitationHandler(true, self.session) + delegate?.invitationWasRecieved(peerID, invitationHandler: invitationHandler) } } @@ -250,10 +267,20 @@ extension PartyServiceManager: MCSessionDelegate{ func session(session: MCSession!, peer peerID: MCPeerID!, didChangeState state: MCSessionState) { NSLog("%@", "peer \(peerID) didChangeState: \(state.stringValue())") + if(state == MCSessionState.Connected){ + println(self.myPeerID.displayName + " connected to " + peerID.displayName) + println("mark 1") + self.delegate?.connectedWithPeer(peerID) + + } } func session(session: MCSession!, didReceiveData data: NSData!, fromPeer peerID: MCPeerID!) { NSLog("%@", "didRecieveData: \(data)") + + let dictionary: [String: AnyObject] = ["data": data, "fromPeer": peerID] + self.delegate?.didRecieveInstruction(dictionary) + } func session(session: MCSession!, didReceiveStream stream: NSInputStream!, withName streamName: String!, fromPeer peerID: MCPeerID!) { diff --git a/GetHip/SettingsTableViewController.swift b/GetHip/SettingsTableViewController.swift index 7f82ab0..08f1985 100644 --- a/GetHip/SettingsTableViewController.swift +++ b/GetHip/SettingsTableViewController.swift @@ -7,11 +7,14 @@ // import UIKit +import MultipeerConnectivity -class SettingsTableViewController: UIViewController, UITableViewDataSource, UITableViewDelegate { +class SettingsTableViewController: UIViewController, UITableViewDataSource, UITableViewDelegate, PartyServiceManagerDelegate { // var manager = UserParseDataSource() var user = [] var party: PartyServiceManager! + var friendData: [FriendData] = [] + var requestData: [FriendData] = [] @IBOutlet weak var logOutBtn: UIButton! @IBOutlet weak var table: UITableView! @@ -38,9 +41,11 @@ class SettingsTableViewController: UIViewController, UITableViewDataSource, UITa } - func setData(usr:[UserParseData], prty: PartyServiceManager){ + func setData(usr:[UserParseData], prty: PartyServiceManager, frends: [FriendData], request: [FriendData]){ self.user = usr self.party = prty + self.friendData = frends + self.requestData = request } override func viewDidLoad() { @@ -54,6 +59,7 @@ class SettingsTableViewController: UIViewController, UITableViewDataSource, UITa self.table.delegate = self self.navigationController?.navigationBarHidden = false self.table.tableFooterView = UIView(frame: CGRectZero) + self.party.delegate = self //NSNotificationCenter.defaultCenter().addObserver(self, selector: "refreshTable:", name: "refreshSettingsView", object: nil) self.table.reloadData() @@ -288,3 +294,30 @@ class SettingsTableViewController: UIViewController, UITableViewDataSource, UITa */ } + +extension SettingsTableViewController: PartyServiceManagerDelegate { + func foundPeer() { + + } + + func lostPeer() { + + } + + func invitationWasRecieved(peerID: MCPeerID, invitationHandler: ((Bool, MCSession!) -> Void)!) { + var storyboard = UIStoryboard(name: "Main", bundle: nil) + var vc: InvitedToPartyViewController = storyboard.instantiateViewControllerWithIdentifier("InvitedToPartyVC") as! InvitedToPartyViewController! + vc.setData(self.party, user: self.user as! [UserParseData], friends: self.friendData, request: self.requestData, invHand: invitationHandler, fromPeer: peerID) + self.presentViewController(vc, animated: true, completion: nil) + } + + func connectedWithPeer(peerID: MCPeerID) { + + } + + func didRecieveInstruction(dictionary: Dictionary){ + + } + + +} diff --git a/GetHip/SongSelectionViewController.swift b/GetHip/SongSelectionViewController.swift index 6cfea02..9190af5 100644 --- a/GetHip/SongSelectionViewController.swift +++ b/GetHip/SongSelectionViewController.swift @@ -276,6 +276,17 @@ class SongSelectionViewController: UIViewController, UITableViewDelegate, UITabl let vc: LoadingPartyViewController = (segue.destinationViewController as? LoadingPartyViewController)! vc.setData(self.party, user: self.usr, friends: self.frnds, request: self.requestData) + for i_peer in self.party.invitedFriends{ + for peer in self.party.foundPeers { + if (peer.displayName == i_peer.displayName){ + self.party.serviceBrowser.invitePeer(peer, toSession: self.party.session, withContext: nil, timeout: 1000.0) + + break + } + } + + + } } } diff --git a/GetHip/TestInviteFriendsController.swift b/GetHip/TestInviteFriendsController.swift index 1df1ba2..70e72c8 100644 --- a/GetHip/TestInviteFriendsController.swift +++ b/GetHip/TestInviteFriendsController.swift @@ -15,6 +15,7 @@ class TestInviteFriendsController: UIViewController, UITableViewDelegate, UITabl var requestData: [FriendData] = [] var isFriendSelected: [Bool] = [] var isInvitable: [Bool] = [] + var invitableCount = 0 var partyData: PartyServiceManager! = nil @IBOutlet weak var table: UITableView! @@ -29,6 +30,24 @@ class TestInviteFriendsController: UIViewController, UITableViewDelegate, UITabl @IBAction func sendInvites(sender: UIButton) { var numSelected = 0 + var data = NSData() + for(index, bool) in enumerate(self.isFriendSelected) { + if bool == true { + + //search for foundpeer in array + /*for peer in self.partyData.foundPeers { + if (peer.displayName == self.frnds[index].displayName){ + self.partyData.serviceBrowser.invitePeer(peer, toSession: self.partyData.session, withContext: data, timeout: 3600.0) + + break + } + + }*/ + } + + } + + self.partyData.serviceBrowser.stopBrowsingForPeers() for booli in self.isFriendSelected { if booli == true { @@ -64,24 +83,22 @@ class TestInviteFriendsController: UIViewController, UITableViewDelegate, UITabl self.table.dataSource = self self.table.delegate = self self.partyData.delegate = self - //start browsing for peers - self.partyData.setBrowser() - self.partyData.startBrowser() - self.partyData.initializeSession() self.navigationController?.navigationBarHidden = false - + /* for foundPeer in self.partyData.foundPeers { for friend in self.frnds { if foundPeer.displayName == friend.displayName { for(index, aFriend) in enumerate(self.frnds) { if aFriend.displayName == friend.displayName { self.isInvitable[index] = true + self.invitableCount++ break } } } } } + */ @@ -92,6 +109,12 @@ class TestInviteFriendsController: UIViewController, UITableViewDelegate, UITabl // self.navigationItem.rightBarButtonItem = self.editButtonItem() } + override func viewWillAppear(animated: Bool) { + //start browsing for peers + self.partyData.setBrowser() + self.partyData.startBrowser() + } + override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. @@ -108,12 +131,25 @@ class TestInviteFriendsController: UIViewController, UITableViewDelegate, UITabl func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { // #warning Incomplete method implementation. // Return the number of rows in the section. - return self.frnds.count + + return self.invitableCount + //return self.frnds.count } func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { - let friend = self.frnds[indexPath.row] + + //iterate through the currently found peers and display only friends who are available + var friend: FriendData! + + for i in 0.. Void)!) { } func connectedWithPeer(peerID: MCPeerID) { } + + func didRecieveInstruction(dictionary: Dictionary){ + + } + + }