Advertisement
EliteGaming

MessagingViewController.swift

Jul 12th, 2016
125
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Swift 23.88 KB | None | 0 0
  1. //
  2. //  MessagingViewController.swift
  3. //
  4. //  Created by Mario Figueroa on 6/24/16.
  5. //  Copyright © 2016 EliteByte. All rights reserved.
  6. //
  7.  
  8. import UIKit
  9. import TwilioIPMessagingClient
  10. import TwilioCommon
  11. import FirebaseAuth
  12. import FirebaseDatabase
  13. import SlackTextViewController
  14. import CoreData
  15.  
  16. class MessagingViewController: SLKTextViewController {
  17.     // IP Messaging client instance - will create on initialization
  18.     var client: TwilioIPMessagingClient? = nil
  19.     // Handle to the default general channel
  20.     var generalChannel: TWMChannel? = nil
  21.     // Identity that was assigned to us by the server
  22.     var identity = ""
  23.     // A list of all the messages displayed in the UI
  24.     var messages: [Message] = []
  25.     var fetchedMessages: [Message] = []
  26.     // Reference to the Firebase DataBase
  27.     var ref = FIRDatabaseReference.init()
  28.     // Core Data and Firebase Variables
  29.     var tempUser = User(username: "", email: "", timezone: "", bio: "")
  30.     var coreDataConnection : Bool = false
  31.     var coreDataMessages = [Message]()
  32.     // Logistical Variables
  33.     var authors = [String]()
  34.     var channelName = ""
  35.     var directMessage = false
  36.     // Segue Variables
  37.     var recipient = String()
  38.     var recipientUsername = String()
  39.    
  40.     @IBOutlet weak var loadingLabel: UILabel!
  41.     @IBOutlet weak var loadingIndicator: UIActivityIndicatorView!
  42.    
  43.     // MARK: View Lifecycle
  44.     override func viewDidLoad() {
  45.         super.viewDidLoad()
  46.        
  47.        
  48.        
  49.         self.ref = FIRDatabase.database().reference()
  50.         self.shouldScrollToBottomAfterKeyboardShows = true
  51.        
  52.         self.tableView!.registerClass(MessagingTableViewCell.self, forCellReuseIdentifier: "MessagingTableViewCell")
  53.         self.inverted = false
  54.        
  55.         if loadMessagesFromCoreData() {
  56.             coreDataConnection = true
  57.         }
  58.        
  59.         if directMessage {
  60.             channelName = recipientUsername
  61.         }
  62.    
  63.        
  64.         // Fetch Access Token form the server and initialize IPM Client - this assumes you are running
  65.         // the PHP starter app on your local machine, as instructed in the quick start guide
  66.         self.identity = self.tempUser.username
  67.         let deviceId = UIDevice.currentDevice().identifierForVendor!.UUIDString
  68.         let urlString = "http://project-7178689301910177154.appspot.com/token.php?device=\(deviceId)&username=\(fetchForUsername())"
  69.        
  70.         // Get JSON from server
  71.         let config = NSURLSessionConfiguration.defaultSessionConfiguration()
  72.         let session = NSURLSession(configuration: config, delegate: nil, delegateQueue: nil)
  73.         let url = NSURL(string: urlString)
  74.         let request  = NSMutableURLRequest(URL: url!)
  75.         request.HTTPMethod = "GET"
  76.        
  77.         // Make HTTP request
  78.         session.dataTaskWithRequest(request, completionHandler: { data, response, error in
  79.             if (data != nil) {
  80.                 // Parse result JSON
  81.                 let json = JSON(data: data!)
  82.                 let token = json["token"].stringValue
  83.                 // Set up Twilio IPM client
  84.                 let accessManager = TwilioAccessManager.init(token: token, delegate: nil)
  85.                 self.client = TwilioIPMessagingClient.ipMessagingClientWithAccessManager(accessManager, properties: nil, delegate: self)
  86.                
  87.                 // Update UI on main thread
  88.                 dispatch_async(dispatch_get_main_queue()) {
  89.                     self.navigationItem.prompt = "@" + self.identity
  90.                     self.navigationItem.title = self.channelName
  91.                 }
  92.             } else {
  93.                 print("Error fetching token :\(error)")
  94.             }
  95.         }).resume()
  96.  
  97.        
  98.         // Set up UI controls
  99.         self.tableView!.rowHeight = UITableViewAutomaticDimension
  100.         self.tableView!.estimatedRowHeight = 64.0
  101.         self.tableView!.separatorStyle = .None
  102.     }
  103.    
  104.     override func viewDidAppear(animated: Bool) {
  105.         synchronizeMessages()
  106.         self.scrollToBottomMessage()
  107.     }
  108.    
  109.    
  110.     // MARK: Setup IP Messaging Channel
  111.     func joinChannel() {
  112.         self.generalChannel?.joinWithCompletion() {
  113.             (result) -> Void in
  114.             if result.isSuccessful(){
  115.                 //self.channel?.delegate = self
  116.                 //self.loadMessages()
  117.             }
  118.         }
  119.     }
  120.    
  121.    
  122.     func joinChannelAndSetUniqueName(name: String) {
  123.         self.generalChannel?.joinWithCompletion() { result in
  124.             if result.isSuccessful() {
  125.                 self.generalChannel?.setUniqueName(name) { result in
  126.                     //self.channel?.delegate = self
  127.                     //self.loadMessages()
  128.                 }
  129.             }
  130.         }
  131.     }
  132.    
  133.     func loadMessages() {
  134.         let appDel : AppDelegate = (UIApplication.sharedApplication().delegate as! AppDelegate)
  135.         let context : NSManagedObjectContext = appDel.managedObjectContext
  136.         print("General Channel Count ",self.generalChannel?.messages.allObjects().count, "Current Fetched count ", self.fetchedMessages.count)
  137.         let msgs = self.generalChannel?.messages.allObjects()
  138.         print("All fetched Messages", msgs)
  139.         if self.fetchedMessages.count <= msgs!.count {
  140.         var newMessages = [Message]()
  141.         for msg in msgs! {
  142.             let newMsg = NSEntityDescription.insertNewObjectForEntityForName("Message", inManagedObjectContext: context) as! Message
  143.             newMsg.author = msg.author
  144.             newMsg.message = msg.body
  145.             newMsg.timestamp = msg.timestamp
  146.             newMessages.append(newMsg)
  147.         }
  148.         self.fetchedMessages = newMessages
  149.            
  150.         } else {abort()}
  151.     }
  152.    
  153.     func addFetchedMessages(messages: [Message]) {
  154.         self.fetchedMessages.appendContentsOf(messages)
  155.         self.fetchedMessages.sortInPlace { $1.timestamp > $0.timestamp }
  156.     }
  157.    
  158.     func addMessages(messages: [Message]) {
  159.         self.messages.appendContentsOf(messages)
  160.         self.messages.sortInPlace { $1.timestamp > $0.timestamp }
  161.         self.tableView?.reloadData()
  162.         dispatch_async(dispatch_get_main_queue()) {
  163.             () -> Void in
  164.             self.tableView!.reloadData()
  165.             if self.messages.count > 0 {
  166.                 self.scrollToBottomMessage()
  167.             }
  168.         }
  169.     }
  170.    
  171.     func addMessage(message: Message) {
  172.         self.messages.append(message)
  173.         self.messages.sortInPlace { $1.timestamp > $0.timestamp }
  174.         self.tableView?.reloadData()
  175.         dispatch_async(dispatch_get_main_queue()) {
  176.             () -> Void in
  177.             self.tableView!.reloadData()
  178.             if self.messages.count > 0 {
  179.                 self.scrollToBottomMessage()
  180.             }
  181.         }
  182.     }
  183.  
  184.     override func didPressRightButton(sender: AnyObject!) {
  185.         self.textView.refreshFirstResponder()
  186.         print("Button Clicked")
  187.         if self.generalChannel?.messages != nil {
  188.         let preMsg = textView.text!
  189.             self.textView.text = ""
  190.         let msg = self.generalChannel?.messages.createMessageWithBody(preMsg)
  191.         self.generalChannel?.messages.sendMessage(msg) { result in
  192.             print("Message Sent", msg)
  193.             self.textView.text = ""
  194.             self.textView.resignFirstResponder()
  195.         }
  196.         }
  197.     }
  198.     //MARK: Synch Functions
  199.     func synchronizeMessages() {
  200.        
  201.        
  202.         if coreDataMessages.count < fetchedMessages.count {
  203.             let difference = fetchedMessages.count - coreDataMessages.count
  204.             let unsyncedEntries = fetchedMessages.suffix(difference)
  205.             var newEntries = [Message]()
  206.                 newEntries.appendContentsOf(unsyncedEntries)
  207.             addMessagesToCoreData(newEntries)
  208.         }
  209.        
  210.         if messages.count < fetchedMessages.count {
  211.             authors = synchronizeAuthors()
  212.             let difference = fetchedMessages.count - messages.count
  213.             let unsyncedEntries = fetchedMessages.suffix(difference)
  214.             var newEntries = [Message]()
  215.             newEntries.appendContentsOf(unsyncedEntries)
  216.             addMessages(newEntries)
  217.         }
  218.        
  219.     }
  220.    
  221.     func synchronizeAuthors() -> [String] {
  222.         var authors = [String]()
  223.         if messages.count > 0 {
  224.             for msg in messages {
  225.                 authors.append(msg.author!)
  226.             }
  227.         }
  228.         return authors
  229.     }
  230.    
  231.    
  232.     //MARK: CoreData Functions
  233.     func fetchForUsername() -> String {
  234.         let appDel : AppDelegate = (UIApplication.sharedApplication().delegate as! AppDelegate)
  235.         let context : NSManagedObjectContext = appDel.managedObjectContext
  236.         do {
  237.             let request = NSFetchRequest(entityName: "Users")
  238.             let results = try context.executeFetchRequest(request)
  239.             if results.count > 0 {
  240.                 for e in results as! [NSManagedObject] {
  241.                     let username = e.valueForKey("username")
  242.                     identity = username as! String
  243.                     print("Identity", identity)
  244.                     return username as! String
  245.                 }
  246.             }
  247.         } catch let error as NSError {
  248.             // Failure
  249.             print("Fetch for username failed: \(error.localizedDescription)")
  250.         }
  251.         return ""
  252.     }
  253.    
  254.     func loadMessagesFromCoreData() -> Bool {
  255.         print("Before were found in loadMessagesFromCoreData OG, DEBUG STATUS: CoreDataMessage:", coreDataMessages.count, "Messages:", messages.count, "FetchedMessages:", fetchedMessages.count)
  256.         messages.removeAll()
  257.         coreDataMessages.removeAll()
  258.        
  259.         let appDel : AppDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
  260.         let context : NSManagedObjectContext = appDel.managedObjectContext
  261.         let searchFF = NSPredicate(format: "username == %@", (channelName))
  262.        
  263.         do {
  264.             let request = NSFetchRequest(entityName: "Friend")
  265.             request.predicate = searchFF
  266.             let results = try context.executeFetchRequest(request) as! [Friend]
  267.             if results.count > 0 {
  268.                 for friend in results {
  269.                     let msgs = friend.fetchMessages()
  270.                     coreDataMessages = msgs
  271.                     addMessages(msgs)
  272.                     print("Core Data Messages were succesfully fetched and written!", msgs)
  273.                     print("Results were found in loadMessagesFromCoreData OG, DEBUG STATUS: CoreDataMessage:", coreDataMessages.count, "Messages:", messages.count, "FetchedMessages:", fetchedMessages.count)
  274.                     return true
  275.                 }
  276.             }
  277.             print("We attempted to load messages from CoreData, but none were found.")
  278.             return false
  279.         } catch let error as NSError {
  280.             print("Fetch for Friends failed: \(error.localizedDescription)")
  281.         }
  282.         return false
  283.     }
  284.    
  285.     func addMessagesToCoreData(msgs : [Message]) -> Bool {
  286.         print("We are adding these messages to core data,", msgs)
  287.         let appDel : AppDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
  288.         let context : NSManagedObjectContext = appDel.managedObjectContext
  289.         let searchFF = NSPredicate(format: "username == %@", channelName)
  290.        
  291.         do {
  292.             let request = NSFetchRequest(entityName: "Friend")
  293.                 request.predicate = searchFF
  294.             let results = try context.executeFetchRequest(request) as! [Friend]
  295.             if results.count > 0 {
  296.                 for friend in results {
  297.                     friend.addMessages(msgs)
  298.                     coreDataMessages.appendContentsOf(msgs)
  299.                     print("DEBUG STATUS: CoreDataMessage:", coreDataMessages.count, "Messages:", messages.count, "FetchedMessages:", fetchedMessages.count)
  300.                     print("NSFetch request for a former Friend was a SUCCESS, setting msgs and returning.")
  301.                     return true
  302.                 }
  303.                 print("No results for the NSFetch O.G. in addMessagesToCoreData")
  304.                 try context.save()
  305.             }
  306.         } catch let error as NSError {
  307.             print("Fetch for Friends failed: \(error.localizedDescription)")
  308.         }
  309.        
  310.         let recipientEnt = NSEntityDescription.entityForName("Friend", inManagedObjectContext: context)
  311.         let newFriend = Friend(entity: recipientEnt!, insertIntoManagedObjectContext: context)
  312.        
  313. //        if messages.count > 0 {
  314. //        newFriend.lastMessage = messages[messages.endIndex].message }
  315.         newFriend.username = channelName
  316.         newFriend.addMessages(msgs)
  317.         coreDataMessages.appendContentsOf(msgs)
  318.         newFriend.uuid = "channel"
  319.         print("We have setup a new Friend with username,", channelName)
  320.        
  321.         for msg in msgs {
  322.             let msgEnt = NSEntityDescription.entityForName("Message", inManagedObjectContext: context)
  323.             let newMessage = Message(entity: msgEnt!, insertIntoManagedObjectContext: context)
  324.            
  325.             newMessage.author = msg.author
  326.             newMessage.message = msg.message
  327.             newMessage.timestamp = msg.timestamp
  328.             newMessage.recipient = newFriend.username
  329.             print("Setting up a new message author", msg.author)
  330.             print("2nd OG DEBUG STATUS: CoreDataMessage:", coreDataMessages.count, "Messages:", messages.count, "FetchedMessages:", fetchedMessages.count)
  331.         }
  332.  
  333.         do {
  334.             try context.save()
  335.             print("2nd OG DEBUG STATUS: CoreDataMessage:", coreDataMessages.count, "Messages:", messages.count, "FetchedMessages:", fetchedMessages.count)
  336.         } catch{
  337.             print("Attempt to save message in CoreData failed")
  338.         }
  339.         return false
  340.     }
  341.    
  342.    
  343.     // MARK: UI Logic
  344.     // Scroll to bottom of table view for messages
  345.     func scrollToBottomMessage() {
  346.         if self.messages.count == 0 {
  347.             return
  348.         }
  349.         let bottomMessageIndex = NSIndexPath(forRow: self.tableView!.numberOfRowsInSection(0) - 1,
  350.                                              inSection: 0)
  351.         self.tableView!.scrollToRowAtIndexPath(bottomMessageIndex, atScrollPosition: .Bottom,
  352.                                               animated: true)
  353.     }
  354.    
  355.     // MARK: UITableView Delegate
  356.     // Return number of rows in the table
  357.     override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
  358.         print(self.messages.count, "MESSAGES COUNT")
  359.         return self.messages.count
  360.     }
  361.    
  362.     // Create table view rows
  363.     override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
  364.         let cell = tableView.dequeueReusableCellWithIdentifier("MessagingTableViewCell", forIndexPath: indexPath) as! MessagingTableViewCell
  365.        
  366.         let message = self.messages[indexPath.row]
  367.        
  368.         cell.nameLabel.text = message.author!
  369.         cell.nameLabel.textColor = UIColor.darkGrayColor()
  370.         cell.bodyLabel.text = message.message
  371.         cell.bodyLabel.textColor = UIColor.blackColor()
  372.         let timestamp = message.timestamp!.substringWithRange(Range<String.Index>(start: message.timestamp!.startIndex.advancedBy(11), end: message.timestamp!.endIndex.advancedBy(-1)))
  373.         cell.timestampLabel.text = timestampGenerator(timestamp)
  374.         let index = message.author!.startIndex
  375.         let author = message.author! as String
  376.         if author == "elitebyte" { cell.nameLabel.textColor = UIColor.orangeColor()}
  377.         cell.profileView.text = String(author.capitalizedString[index])
  378.         cell.profileView.textColor = UIColor.whiteColor()
  379.         cell.profileView.backgroundColor = pickColor(author.capitalizedString[index])
  380.         cell.selectionStyle = .None
  381.        
  382.         return cell
  383.     }
  384.    
  385.     func pickColor(alphabet: Character) -> UIColor {
  386.         let alphabetColors = [0x5A8770, 0xB2B7BB, 0x6FA9AB, 0xF5AF29, 0x0088B9, 0xF18636, 0xD93A37, 0xA6B12E, 0x5C9BBC, 0xF5888D, 0x9A89B5, 0x407887, 0x9A89B5, 0x5A8770, 0xD33F33, 0xA2B01F, 0xF0B126, 0x0087BF, 0xF18636, 0x0087BF, 0xB2B7BB, 0x72ACAE, 0x9C8AB4, 0x5A8770, 0xEEB424, 0x407887]
  387.         let str = String(alphabet).unicodeScalars
  388.         let unicode = Int(str[str.startIndex].value)
  389.         if 65...90 ~= unicode {
  390.             let hex = alphabetColors[unicode - 65]
  391.             return UIColor(red: CGFloat(Double((hex >> 16) & 0xFF)) / 255.0, green: CGFloat(Double((hex >> 8) & 0xFF)) / 255.0, blue: CGFloat(Double((hex >> 0) & 0xFF)) / 255.0, alpha: 1.0)
  392.         }
  393.         return UIColor.blackColor()
  394.     }
  395.    
  396.     func timestampGenerator(timestamp : String) -> String {
  397.        
  398.         let timestampHour = timestamp.substringWithRange(Range<String.Index>(start: timestamp.startIndex.advancedBy(0), end: timestamp.endIndex.advancedBy(-10)))
  399.         let timestampMin = timestamp.substringWithRange(Range<String.Index>(start: timestamp.startIndex.advancedBy(3), end: timestamp.endIndex.advancedBy(-7)))
  400.        
  401.         let date = NSDate()
  402.         let calendar = NSCalendar.currentCalendar()
  403.         let components = calendar.components([ .Hour, .Minute, .Second], fromDate: date)
  404.         let hour = components.hour
  405.         //let minutes = components.minute
  406.        
  407.         let hourDifference = Int(timestampHour)! - hour
  408.         let finalHour = Int(timestampHour)! - (hourDifference)
  409.         var suffix = ""
  410.        
  411.         if (Int(timestampHour)! - 12) < 0 {
  412.             suffix = "AM"
  413.         } else { suffix = "PM" }
  414.        
  415.         return String(finalHour) + ":" + timestampMin + suffix
  416.     }
  417.    
  418.     // MARK: UITableViewDataSource Delegate
  419.     override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
  420.         return 1
  421.     }
  422.    
  423.     func grabUIDInfo(uid : String) -> User {
  424.         ref.child("users").child(uid).observeSingleEventOfType(.Value, withBlock: { (snapshot) in
  425.             if self.snapCheck(snapshot) {
  426.             let user = User(username: snapshot.value!["username"] as! String, email: snapshot.value!["email"] as! String, timezone: snapshot.value!["timezone"] as! String, bio: snapshot.value!["bio"] as! String)
  427.             self.tempUser = user
  428.             }
  429.         }) { (error) in
  430.         }
  431.         return tempUser
  432.     }
  433.    
  434.     func snapCheck(snap : FIRDataSnapshot) -> Bool {
  435.         if snap.value is NSNull {
  436.             return false
  437.         } else {
  438.             return true
  439.         }
  440.     }
  441. }
  442.  
  443.     func convertMessage(msg : TWMMessage) -> Message {
  444.         let appDel : AppDelegate = (UIApplication.sharedApplication().delegate as! AppDelegate)
  445.         let context : NSManagedObjectContext = appDel.managedObjectContext
  446.         let newMsg = NSEntityDescription.insertNewObjectForEntityForName("Message", inManagedObjectContext: context) as! Message
  447.         newMsg.author = msg.author
  448.         newMsg.message = msg.body
  449.         newMsg.timestamp = msg.timestamp
  450.         return newMsg
  451.        
  452.     }
  453.  
  454. // MARK: Twilio IP Messaging Delegate
  455. extension MessagingViewController: TwilioIPMessagingClientDelegate {
  456.     // Called whenever a channel we've joined receives a new message
  457.     func ipMessagingClient(client: TwilioIPMessagingClient!, channel: TWMChannel!,
  458.                            messageAdded message: TWMMessage!) {
  459.         self.loadMessages()
  460.         self.addFetchedMessages([convertMessage(message)])
  461.         self.addMessage(convertMessage(message))
  462.         self.addMessagesToCoreData([convertMessage(message)])
  463.         self.synchronizeMessages()
  464.         self.authors = self.synchronizeAuthors()
  465.         print("Message Recieved OG DEBUG STATUS: CoreDataMessage:", coreDataMessages.count, "Messages:", messages.count, "FetchedMessages:", fetchedMessages.count)
  466.     }
  467.    
  468.     func joinChannelWithUniqueID(uniqueID : String, channelType : TWMChannelType) -> Bool {
  469.         self.generalChannel = client?.channelsList().channelWithUniqueName(uniqueID)
  470.         if let generalChannel = self.generalChannel {
  471.             generalChannel.joinWithCompletion({ result in
  472.                 if result.isSuccessful() {
  473.                 self.loadMessages()
  474.                 self.synchronizeMessages()
  475.                 self.authors = self.synchronizeAuthors()
  476.                 print("We have joine a ", channelType, "chat channel", uniqueID)
  477.                 }
  478.             })
  479.             return true
  480.         }
  481.         return false
  482.     }
  483.    
  484.     func createChannelWithUniqueID(uniqueID : String, friendlyName : String, channelType : TWMChannelType, recipient : String?) -> Bool  {
  485.         var returnVal = false
  486.         client!.channelsList().createChannelWithOptions([TWMChannelOptionFriendlyName: friendlyName, TWMChannelOptionType: channelType.rawValue], completion: { (result, channel) -> Void in
  487.             if result.isSuccessful() {
  488.                 self.generalChannel = channel
  489.                 self.generalChannel?.joinWithCompletion({ result in
  490.                     self.generalChannel?.setUniqueName(uniqueID, completion: { result in
  491.                         print("We have created a", channelType, "chat channel ", uniqueID)
  492.                         if channelType == TWMChannelType.Private {
  493.                             self.generalChannel?.members.inviteByIdentity(recipient) { result in
  494.                                 if result.isSuccessful() {
  495.                                     print(recipient, "User invited.")
  496.                                 } else {
  497.                                     print(recipient, "User NOT invited.")
  498.                                 }
  499.                             }
  500.                         }
  501.                         self.loadMessages()
  502.                         returnVal = true
  503.                     })
  504.                 })
  505.             }
  506.         })
  507.         return returnVal
  508.     }
  509.  
  510.  
  511.     func ipMessagingClient(client: TwilioIPMessagingClient!, synchronizationStatusChanged status: TWMClientSynchronizationStatus) {
  512.         if status == .Completed && channelName != "" {
  513.             // Join (or create) the general channel
  514.            
  515.             //clearChannelsExempt("CH7b852826051a4991a5c81ca893bcaa81")
  516.            
  517.             if directMessage {
  518.                
  519.                 if joinChannelWithUniqueID(recipient + "-" + (FIRAuth.auth()?.currentUser?.uid)! , channelType: TWMChannelType.Private) {
  520.                
  521.                 } else if joinChannelWithUniqueID((FIRAuth.auth()?.currentUser?.uid)! + "-" + recipient, channelType: TWMChannelType.Private){
  522.                
  523.                 } else {
  524.                     createChannelWithUniqueID((FIRAuth.auth()?.currentUser?.uid)! + "-" + recipient, friendlyName: "PC:" + recipient + "-" + (FIRAuth.auth()?.currentUser?.uid)!, channelType: TWMChannelType.Private, recipient: recipientUsername)
  525.                 }
  526.             } else {
  527.                 if joinChannelWithUniqueID(channelName, channelType: TWMChannelType.Public) {
  528.                
  529.                 } else {
  530.                
  531.                     createChannelWithUniqueID(channelName, friendlyName: channelName + " Chat Channel", channelType: TWMChannelType.Public, recipient: "EasterEggFromMSG.VC")
  532.                 }
  533.             }
  534.         }
  535.     }
  536.  
  537.     func clearChannelsExempt(whitelistedChannel : String) {
  538.         var deletedChannels = [String]()
  539.         for index in (client?.channelsList().allObjects())! {
  540.             if index.sid != whitelistedChannel {
  541.                 index.destroyWithCompletion(nil)
  542.                 deletedChannels.append(index.uniqueName)
  543.             }
  544.         }
  545.         print("Cleared Channels: ", deletedChannels)
  546.     }
  547.    
  548.     func ipMessagingClient(client: TwilioIPMessagingClient!, channelHistoryLoaded channel: TWMChannel!) {
  549.             self.loadMessages()
  550.             self.synchronizeMessages()
  551.             print("History loaded  OG DEBUG STATUS: CoreDataMessage:", coreDataMessages.count, "Messages:", messages.count, "FetchedMessages:", fetchedMessages.count)
  552.     }
  553.    
  554.    
  555.    
  556.  
  557.  
  558. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement