FIX gros bug moisi (ajout de l'information du dernier message au niveau des conversat...
[euphorik.git] / js / pageMinichat.js
index a6ba5a6..9e042e4 100755 (executable)
@@ -296,6 +296,7 @@ function Conversation(num, util, formateur, client)
    this.util = util
    this.formateur = formateur
    this.client = client
+   this.idDernierMessageAffiche = 0
    
    this.messages = new Array()
    this.messagesParId = new Object()
@@ -403,6 +404,7 @@ Conversation.prototype.ajouterMessage = function(message)
 Conversation.prototype.viderMessages = function()
 {
    this.messages = new Array()
+   this.idDernierMessageAffiche = 0
    jQuery("#conversations #" + this.getId() + " .message").remove()
 }
 
@@ -415,18 +417,15 @@ Conversation.prototype.flush = function(funClickExtract, funClickLienConv)
 {
    var thisConversation = this
 
-   var idDernierMessageAffiche = jQuery("#conversations #" + this.getId() + " div:first").attr("id")
-   idDernierMessageAffiche = (idDernierMessageAffiche == undefined ? 0 : parseInt(idDernierMessageAffiche, 36))
-      
    // est-ce que le prochain message est pair ? (permet d'alterner le style des messages)
-   var messagePair = (idDernierMessageAffiche == 0 ? true :
+   var messagePair = (this.idDernierMessageAffiche == 0 ? true :
       (jQuery("#conversations #" + this.getId() + " div:first").attr("class").search("messagePair") == -1)
    )
       
    // construction de l'XHTML des messages
    var XHTML = ""
    for (var i = this.messages.length - 1; i >= 0; i--)
-      if (this.messages[i].id > idDernierMessageAffiche)
+      if (this.messages[i].id > this.idDernierMessageAffiche)
       {      
          var message = this.messages[i]
          
@@ -470,7 +469,7 @@ Conversation.prototype.flush = function(funClickExtract, funClickLienConv)
       jQuery("#conversations #" + this.getId() + " .message").slice(this.nbMessageMax, nbMessagesAffiche).empty()
 
    // Ajoute les événements liés à chaque message
-   jQuery("#conversations #" + this.getId() + " .message").filter(function(){return parseInt(jQuery(this).attr("id"), 36) > idDernierMessageAffiche}).each(
+   jQuery("#conversations #" + this.getId() + " .message").filter(function(){return parseInt(jQuery(this).attr("id"), 36) > thisConversation.idDernierMessageAffiche}).each(
       function()
       {
          jQuery(".lienConv", this).click(
@@ -520,6 +519,9 @@ Conversation.prototype.flush = function(funClickExtract, funClickLienConv)
          )
       }
    )
+   
+   this.idDernierMessageAffiche = jQuery("#conversations #" + this.getId() + " div:first").attr("id")
+   this.idDernierMessageAffiche = (this.idDernierMessageAffiche == undefined ? 0 : parseInt(this.idDernierMessageAffiche, 36))
 }
 
 /**
@@ -574,7 +576,8 @@ function Messages(client, formateur, util)
    this.conversations = new Array() // les conversations, la première représente la conversation principale
    this.nouvelleConversation(0)
 
-   this.idDernierMessage = null // l'id du dernier message connu
+// Obsolète
+   //this.idDernierMessage = null // l'id du dernier message connu
    
    // l'objet JSONHttpRequest représentant la connexion d'attente
    this.attenteCourante = null
@@ -590,15 +593,28 @@ Messages.prototype.getJSONrafraichirMessages = function()
       "page" : "chat",
       "message_count" : conf.nbMessageAffiche,
       "main_page" : this.client.pagePrincipale,
-      "conversations" : this.client.getJSONConversations()
+      "conversations" : this.getJSONConversations()
    }
    
    if (this.client.cookie != null) mess["cookie"] = this.client.cookie;
-   if (this.idDernierMessage != null) mess["last_message_id"] = this.idDernierMessage
+   mess["last_message_id"] = this.conversations[0].idDernierMessageAffiche
+   
+   // obsolète
+   //if (this.idDernierMessage != null) mess["last_message_id"] = this.idDernierMessage
    
    return mess
 }
 
+Messages.prototype.getJSONConversations = function()
+{
+   var clientConv = this.client.getJSONConversations()
+   for (var i = 1; i < this.conversations.length; i++)
+   {
+      clientConv[i-1]["last_message_id"] = this.conversations[i].idDernierMessageAffiche
+   }
+   return clientConv
+}
+
 /**
   * Ajoute un ensemble de messages puis les affiches.
   * @param elements un tableau d'éléments JSON représentant les messages, voir protocole.txt
@@ -624,8 +640,9 @@ Messages.prototype.ajouterMessage = function(element, numConversation)
    // pas d'utilisation de jquery pour des raisons de performance
    var id = element["id"]
    
-   if (this.idDernierMessage == null || id > this.idDernierMessage)
-      this.idDernierMessage = id
+   // Obsolète
+   /*if (this.idDernierMessage == null || id > this.idDernierMessage)
+      this.idDernierMessage = id*/
    
    var message = new Message(
       id,      
@@ -756,7 +773,8 @@ Messages.prototype.flush = function(numConv)
 
 Messages.prototype.viderMessages = function()
 {
-   this.idDernierMessage = null
+   // Obsolète
+   //this.idDernierMessage = null
    
    for (var i = 0; i < this.conversations.length; i++)
       this.conversations[i].viderMessages()
@@ -785,8 +803,11 @@ Messages.prototype.rafraichirMessages = function(vider)
       
    this.stopAttenteCourante()
    
+   /*if (vider)
+      this.idDernierMessage = null*/
    if (vider)
-      this.idDernierMessage = null\r
+      for (var i = 0; i < this.conversations.length; i++)
+         this.conversations[i].idDernierMessageAffiche = 0\r
       
    dumpObj(this.getJSONrafraichirMessages())
    this.attenteCourante = jQuery.ajax({
@@ -802,7 +823,7 @@ Messages.prototype.rafraichirMessages = function(vider)
             if (vider)
                thisMessages.viderMessages()
             
-            // ajoute les messages reçu à leur conversation respective
+            // ajoute les messages reçus à leur conversation respective
             for (var numConv = 0; numConv < data["conversations"].length; numConv++)
             {
                // ya pas de nouveaux message -> on passe à la prochaine conversation