Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //
- // MessagesTableViewController.swift
- // projet-session-ios
- //
- // Created by Benoit Vézina on 2019-03-31.
- // Copyright © 2019 com.dmi.uqtr. All rights reserved.
- //
- import UIKit
- import CoreData
- // Champs de la cellule
- class ConversationTableViewCell: UITableViewCell {
- @IBOutlet weak var lblFullname: UILabel!
- @IBOutlet weak var lblDate: UILabel!
- @IBOutlet weak var lblMsg: UILabel!
- @IBOutlet weak var imgArrow: UIImageView!
- }
- class MessagesTableViewController: UITableViewController {
- var conversations = [ConversationMO]()
- var messagesToPass = [MessageMO]()
- var to = ""
- var conversationIdToPass = NSManagedObjectID()
- // Récupérer les conversations de l'utilisateur courant
- override func viewWillAppear(_ animated: Bool) {
- let userObject = self.fetchCurrentUser()
- if userObject == nil {
- fatalError("No user currently connected.")
- }
- let user = userObject!
- let conversationsObject = user.conversations
- if conversationsObject == nil {
- // TODO View quand il n'y a aucun message
- return
- }
- let conversationsArray = Array(conversationsObject!)
- if conversationsArray.count == 0 {
- // TODO View quand il n'y a aucun message
- return
- }
- conversations = conversationsArray as! [ConversationMO]
- conversations = self.orderConversationArrayByDate(conversations: conversations)
- }
- // S'assurer que la table est à jour
- override func viewDidLoad() {
- super.viewDidLoad()
- self.tableView.reloadData()
- }
- // Définir le nombre de cellule selon le nombre de conversations
- override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
- let rowCount = conversations.count
- return rowCount
- }
- // Définir les champs des cellules
- override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
- // Récupérer l'instance de la cellule et la conversation correspondante
- let cell = tableView.dequeueReusableCell(withIdentifier: "ConversationCell", for: indexPath) as! ConversationTableViewCell
- let conversation = conversations[indexPath.row]
- // Récupérer le récipient de la conversation
- let users = Array(conversation.utilisateurs!)
- var recipient = Array(conversation.utilisateurs!)[1] as! UtilisateurMO
- for userObject in users {
- let user = userObject as! UtilisateurMO
- let email = user.courriel
- let userEmail = UserDefaults.standard.object(forKey: "email") as! String
- if email != userEmail {
- recipient = user
- break
- }
- }
- // Définir les infos de la cellule avec le data de la conversation et du récipient
- let fullName = "\(String(describing: recipient.prenom!)) \(String(describing: recipient.nom!))"
- cell.lblFullname.text = fullName
- let user1 = Array(conversation.utilisateurs!)[0] as! UtilisateurMO
- let user2 = Array(conversation.utilisateurs!)[1] as! UtilisateurMO
- let messages = self.fetchMessagesByUsersPrenom(prenom1: user1.prenom!, prenom2: user2.prenom!)!
- let message = messages[messages.count - 1]
- // let messagesArray = Array(conversation.messages!)
- //let message = messagesArray[messagesArray.count - 1] as! MessageMO
- /*let date = message.date
- cell.lblDate.text = date*/
- let date = conversation.date_dernier_message!
- cell.lblDate.text = date
- var contenu = message.contenu!
- if contenu.count > 250 {
- let index = String.Index(encodedOffset: 250)
- contenu = String(contenu[..<index])
- }
- cell.lblMsg.text = contenu
- // TODO utiliser les ids pour to et from
- let userObject = self.fetchCurrentUser()
- if userObject == nil {
- fatalError("No user currently connected.")
- }
- let user = userObject!
- let to = message.to
- if to == user.prenom {
- cell.imgArrow.image = UIImage(named: "left_arrow.png")
- } else {
- cell.imgArrow.image = UIImage(named: "right_arrow.png")
- }
- return cell
- }
- // Récupérer les information de la cellule au clique de la cellule
- override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
- // **** Workaround: bug quand on utilise la variable d'instance conversations, besoin de la refetcher de la bd *******
- let userObject = self.fetchCurrentUser()
- let user = userObject!
- let conversationsObject = user.conversations
- let conversationsArray = Array(conversationsObject!)
- conversations = conversationsArray as! [ConversationMO]
- conversations = self.orderConversationArrayByDate(conversations: conversations)
- // **** Fin workaround *************************************************************************************************
- let conversation = self.conversations[indexPath.row]
- let messagesObject = conversation.messages!
- let messagesArray = Array(messagesObject)
- messagesToPass = messagesArray as! [MessageMO]
- conversationIdToPass = conversation.objectID
- let message = messagesToPass[0]
- to = message.to! == user.prenom! ? message.from! : message.to!
- tableView.deselectRow(at: indexPath, animated: true)
- let row = indexPath.row
- performSegue(withIdentifier: "ToMessage", sender: row)
- }
- // Passer les messages de la conversation au VC de message
- override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
- if segue.identifier == "ToMessage" {
- let messageVC = segue.destination as! MessageViewController
- messageVC.messages = messagesToPass
- messageVC.to = to
- messageVC.conversationId = conversationIdToPass
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement