Advertisement
Guest User

MessagesTableView

a guest
Apr 17th, 2019
137
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Swift 6.21 KB | None | 0 0
  1. //
  2. //  MessagesTableViewController.swift
  3. //  projet-session-ios
  4. //
  5. //  Created by Benoit Vézina on 2019-03-31.
  6. //  Copyright © 2019 com.dmi.uqtr. All rights reserved.
  7. //
  8.  
  9. import UIKit
  10. import CoreData
  11.  
  12. // Champs de la cellule
  13. class ConversationTableViewCell: UITableViewCell {
  14.    
  15.     @IBOutlet weak var lblFullname: UILabel!
  16.     @IBOutlet weak var lblDate: UILabel!
  17.     @IBOutlet weak var lblMsg: UILabel!
  18.     @IBOutlet weak var imgArrow: UIImageView!
  19.    
  20. }
  21.  
  22. class MessagesTableViewController: UITableViewController {
  23.  
  24.     var conversations = [ConversationMO]()
  25.     var messagesToPass = [MessageMO]()
  26.     var to = ""
  27.     var conversationIdToPass = NSManagedObjectID()
  28.    
  29.     // Récupérer les conversations de l'utilisateur courant
  30.     override func viewWillAppear(_ animated: Bool) {
  31.        
  32.         let userObject = self.fetchCurrentUser()
  33.         if userObject == nil {
  34.             fatalError("No user currently connected.")
  35.         }
  36.         let user = userObject!
  37.         let conversationsObject = user.conversations
  38.         if conversationsObject == nil {
  39.             // TODO View quand il n'y a aucun message
  40.             return
  41.         }
  42.         let conversationsArray = Array(conversationsObject!)
  43.         if conversationsArray.count == 0 {
  44.             // TODO View quand il n'y a aucun message
  45.             return
  46.         }
  47.         conversations = conversationsArray as! [ConversationMO]
  48.         conversations = self.orderConversationArrayByDate(conversations: conversations)
  49.     }
  50.    
  51.     // S'assurer que la table est à jour
  52.     override func viewDidLoad() {
  53.         super.viewDidLoad()
  54.         self.tableView.reloadData()
  55.     }
  56.  
  57.     // Définir le nombre de cellule selon le nombre de conversations
  58.     override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
  59.         let rowCount = conversations.count
  60.         return rowCount
  61.     }
  62.    
  63.     // Définir les champs des cellules
  64.     override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
  65.         // Récupérer l'instance de la cellule et la conversation correspondante
  66.         let cell = tableView.dequeueReusableCell(withIdentifier: "ConversationCell", for: indexPath) as! ConversationTableViewCell
  67.         let conversation = conversations[indexPath.row]
  68.        
  69.         // Récupérer le récipient de la conversation
  70.         let users = Array(conversation.utilisateurs!)
  71.         var recipient = Array(conversation.utilisateurs!)[1] as! UtilisateurMO
  72.         for userObject in users {
  73.             let user = userObject as! UtilisateurMO
  74.             let email = user.courriel
  75.             let userEmail = UserDefaults.standard.object(forKey: "email") as! String
  76.             if email != userEmail {
  77.                 recipient = user
  78.                 break
  79.             }
  80.         }
  81.        
  82.         // Définir les infos de la cellule avec le data de la conversation et du récipient
  83.         let fullName = "\(String(describing: recipient.prenom!)) \(String(describing: recipient.nom!))"
  84.         cell.lblFullname.text = fullName
  85.        
  86.         let user1 = Array(conversation.utilisateurs!)[0] as! UtilisateurMO
  87.         let user2 = Array(conversation.utilisateurs!)[1] as! UtilisateurMO
  88.         let messages = self.fetchMessagesByUsersPrenom(prenom1: user1.prenom!, prenom2: user2.prenom!)!
  89.         let message = messages[messages.count - 1]
  90.        
  91.        // let messagesArray = Array(conversation.messages!)
  92.         //let message = messagesArray[messagesArray.count - 1] as! MessageMO
  93.        
  94.         /*let date = message.date
  95.         cell.lblDate.text = date*/
  96.        
  97.         let date = conversation.date_dernier_message!
  98.         cell.lblDate.text = date
  99.        
  100.         var contenu = message.contenu!
  101.         if contenu.count > 250 {
  102.             let index = String.Index(encodedOffset: 250)
  103.             contenu = String(contenu[..<index])
  104.         }
  105.         cell.lblMsg.text = contenu
  106.        
  107.         // TODO utiliser les ids pour to et from
  108.         let userObject = self.fetchCurrentUser()
  109.         if userObject == nil {
  110.             fatalError("No user currently connected.")
  111.         }
  112.         let user = userObject!
  113.         let to = message.to
  114.         if to == user.prenom {
  115.             cell.imgArrow.image = UIImage(named: "left_arrow.png")
  116.         } else {
  117.             cell.imgArrow.image = UIImage(named: "right_arrow.png")
  118.         }
  119.         return cell
  120.     }
  121.    
  122.     // Récupérer les information de la cellule au clique de la cellule
  123.     override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
  124.        
  125.         // **** Workaround: bug quand on utilise la variable d'instance conversations, besoin de la refetcher de la bd *******
  126.         let userObject = self.fetchCurrentUser()
  127.         let user = userObject!
  128.         let conversationsObject = user.conversations
  129.         let conversationsArray = Array(conversationsObject!)
  130.         conversations = conversationsArray as! [ConversationMO]
  131.         conversations = self.orderConversationArrayByDate(conversations: conversations)
  132.         // **** Fin workaround *************************************************************************************************
  133.        
  134.         let conversation = self.conversations[indexPath.row]
  135.         let messagesObject = conversation.messages!
  136.         let messagesArray = Array(messagesObject)
  137.         messagesToPass = messagesArray as! [MessageMO]
  138.         conversationIdToPass = conversation.objectID
  139.         let message = messagesToPass[0]
  140.         to = message.to! == user.prenom! ? message.from! : message.to!
  141.        
  142.        
  143.         tableView.deselectRow(at: indexPath, animated: true)
  144.         let row = indexPath.row
  145.         performSegue(withIdentifier: "ToMessage", sender: row)
  146.     }
  147.    
  148.     // Passer les messages de la conversation au VC de message
  149.     override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
  150.         if segue.identifier == "ToMessage" {
  151.             let messageVC = segue.destination as! MessageViewController
  152.             messageVC.messages = messagesToPass
  153.             messageVC.to = to
  154.             messageVC.conversationId = conversationIdToPass
  155.         }
  156.     }
  157.  
  158. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement