FIX le nombre de message max n'était pas connu par la classe Conversation dans pageMinichat.js
MOD maj de la css 2
height: 100%;
background-color: #0c2003;
}
-\r
-#page.minichat #smiles img {\r
- cursor: pointer;\r
- opacity: 0.5;\r
-}\r
+
+#page.minichat #smiles img {
+ cursor: pointer;
+ opacity: 0.5;
+}
#page.minichat .titreSmiles:hover {
background-color: #2d8800;
-}\r
-\r
-#page.minichat form {\r
- text-align: left;\r
- margin-bottom: 15px;\r
- padding-left: 10px;\r
-}\r
-\r
-#page.minichat form .pseudo {\r
- margin-right: 5px;\r
-}\r
-\r
-#page.minichat form .message {\r
- margin-right: 5px;\r
-}\r
-\r
-#page.minichat form .return {\r
- height: 15px;\r
- width: 32px;\r
- background-image: url(../../img/css1/return.png);\r
- background-repeat: no-repeat;\r
- background-position: 5px 2px;\r
- vertical-align: top;\r
+}
+
+#page.minichat form {
+ text-align: left;
+ margin-bottom: 15px;
+ padding-left: 10px;
+}
+
+#page.minichat form .pseudo {
+ margin-right: 5px;
+}
+
+#page.minichat form .message {
+ margin-right: 5px;
+}
+
+#page.minichat form .return {
+ height: 15px;
+ width: 32px;
+ background-image: url(../../img/css1/return.png);
+ background-repeat: no-repeat;
+ background-position: 5px 2px;
+ vertical-align: top;
}
/* voir pour l'astuce css "float left" des conversations : http://www.quirksmode.org/css/clearing.html */
border-color: white;
float: left;
width: 100%;
-}\r
+}
-#page.minichat #conversations div.message {\r
- border-left-width: 5px;\r
- border-left-style: solid;\r
+#page.minichat #conversations div.message {
+ border-left-width: 5px;
+ border-left-style: solid;
border-color: transparent;
text-align: left;
padding-right: 5px;
- padding-left: 4px;\r
+ padding-left: 4px;
cursor: pointer;
}
-\r
-#page.minichat #conversations div.messageImpair {\r
- background-color: #05002c;\r
-}\r
-\r
-#page.minichat #conversations div.messagePair {\r
- background-color: #080047;\r
-}
-\r
-/* Il n'y a plus de mise en evidence
-#page.minichat #conversations div.miseEnEvidenceReponse {
- background-color: #bd7a11;
-}
-#page.minichat #conversations div.miseEnEvidenceCourant {
- background-color: #bd1129;
-}
-#page.minichat #conversations div.miseEnEvidenceConversation {
- background-color: #b711bd;
-}*/\r
-
+
+#page.minichat #conversations div.messageImpair {
+ background-color: #05002c;
+}
+
+#page.minichat #conversations div.messagePair {
+ background-color: #080047;
+}
+
#page.minichat #conversations div.cache {
- opacity: 0.3;\r
- \r
- /* Hack IE 7 */ \r
- filter: alpha(opacity = 30);\r
+ opacity: 0.3;
+
+ /* Hack IE 7 */
+ filter: alpha(opacity = 30);
zoom: 1
}
-\r
-#page.minichat #conversations div.reponse {\r
- border-color: #bd7a11\r
-}\r
-#page.minichat #conversations div.repondu {\r
- border-color: #b711bd \r
-}\r
-#page.minichat #conversations div.proprietaire {\r
- border-color: #bd1129\r
+
+#page.minichat #conversations div.reponse {
+ border-color: #bd7a11
+}
+#page.minichat #conversations div.repondu {
+ border-color: #b711bd
+}
+#page.minichat #conversations div.proprietaire {
+ border-color: #bd1129
}
#page.minichat #conversations div.systeme {
background-color: #555555
-}\r
-\r
-#page.minichat div.message a {\r
- font-weight: bold;\r
+}
+
+#page.minichat div.message a {
+ font-weight: bold;
}
#page.minichat div.message .lienConv {
#page.minichat div.message .lienConv:hover {
color: #f1c060
-}\r
-\r
-#page.minichat .date {\r
- color: #fd913b;\r
- margin-right: 3px;\r
- margin-left: 3px;\r
-}\r
-\r
-#page.minichat div.message .pseudo,\r
-#page.minichat form .pseudo {\r
- margin-left: 4px;\r
- margin-right: 2px;\r
- font-weight: bold;\r
- color: #76ff33;\r
+}
+
+#page.minichat .date {
+ color: #fd913b;
+ margin-right: 3px;
+ margin-left: 3px;
+}
+
+#page.minichat div.message .pseudo,
+#page.minichat form .pseudo {
+ margin-left: 4px;
+ margin-right: 2px;
+ font-weight: bold;
+ color: #76ff33;
}
#page.minichat div.systeme .pseudo {
color: #CCCCCC
-}\r
-\r
-/* Ca marche pas :(\r
-#page.minichat div.message .pseudo {\r
- min-width: 50px;\r
- height:100px;\r
-}*/\r
+}
+
+/* Ca marche pas :(
+#page.minichat div.message .pseudo {
+ min-width: 50px;
+ height:100px;
+}*/
#page.minichat #conversations .repondA {
margin-left: 4px;
color: #bd7a11
}
-\r
-/*#page.minichat #conversations .contenu {\r
- display: inline;\r
+
+/*#page.minichat #conversations .contenu {
+ display: inline;
}*/
#page.minichat #conversations .extraire {
padding-left: 5px;
background-color: #c90000;
cursor: pointer;
-}\r
+}
#page.minichat #conversations .titre .fermer:hover {
background-color: #c95656
#page.minichat #conversations .titre .numPage:hover {
background-color: #7c6e2e
}
-\r
-#page.minichat #pages {\r
- margin-top: 10px;\r
-}\r
-\r
-#page.minichat #pages span {\r
- padding-right : 4px;\r
- padding-left: 4px;\r
- color: #7664ff;\r
- cursor:pointer;\r
-}\r
-\r
-#page.minichat #pages span.pageCourante {\r
- font-weight: bold;\r
- font-size: 150%;\r
-}\r
-\r
-#page.minichat #pages span:hover {\r
- font-size: 150%;\r
- color: #ffad0f;\r
-}\r
-\r
+
+#page.minichat #pages {
+ margin-top: 10px;
+}
+
+#page.minichat #pages span {
+ padding-right : 4px;
+ padding-left: 4px;
+ color: #7664ff;
+ cursor:pointer;
+}
+
+#page.minichat #pages span.pageCourante {
+ font-weight: bold;
+ font-size: 150%;
+}
+
+#page.minichat #pages span:hover {
+ font-size: 150%;
+ color: #ffad0f;
+}
+
\r
#container {
position: relative;\r
- width: 700px;\r
height: auto;\r
- margin-left: auto;\r
- margin-right: auto;\r
- margin-top: 20px;\r
+ margin-left: 10px;\r
+ margin-right: 10px;\r
+ margin-top: 40px;\r
}
#menu {
height: 100%;
background-color: #FFFFFF;
}
-\r
-#page.minichat #smiles img {\r
- cursor: pointer;\r
+
+#page.minichat #smiles img {
+ cursor: pointer;
opacity: 0.5;
- margin-right:1px;\r
-}\r
+ margin-right:1px;
+}
#page.minichat .titreSmiles:hover {
background-color: #2d8800;
-}\r
-\r
-#page.minichat form {\r
- text-align: left;\r
- margin-bottom: 15px;\r
- padding-left: 10px;\r
-}\r
-\r
-#page.minichat form .pseudo {\r
- margin-right: 5px;\r
-}\r
-\r
-#page.minichat form .message {\r
- margin-right: 5px;\r
-}\r
-\r
-#page.minichat form .return {\r
- height: 15px;\r
+}
+
+#page.minichat form {
+ text-align: left;
+ margin-bottom: 15px;
+ padding-left: 10px;
+}
+
+#page.minichat form .pseudo {
+ margin-right: 5px;
+}
+
+#page.minichat form .message {
+ margin-right: 5px;
+}
+
+#page.minichat form .return {
+ height: 15px;
width: 32px;
- background-color: #BBBBBB;\r
- background-image: url(../../img/css1/return.png);\r
- background-repeat: no-repeat;\r
- background-position: 5px 2px;\r
- vertical-align: top;\r
-}\r
-
-#page.minichat #messages div.message { \r
- border-left-width: 5px;\r
- border-left-style: solid;\r
+ background-color: #BBBBBB;
+ background-image: url(../../img/css1/return.png);
+ background-repeat: no-repeat;
+ background-position: 5px 2px;
+ vertical-align: top;
+}
+
+/* voir pour l'astuce css "float left" des conversations : http://www.quirksmode.org/css/clearing.html */
+#page.minichat #conversations {
+ overflow: hidden;
+ width: 100%
+}
+
+#page.minichat #conversations .conversation {
+ border-width: 0px;
+ border-style: solid;
+ border-color: white;
+ float: left;
+ width: 100%;
+}
+
+#page.minichat #conversations div.message {
+ border-left-width: 5px;
+ border-left-style: solid;
border-color: transparent;
text-align: left;
- padding-right: 8px;
- padding-left: 4px;\r
+ padding-right: 5px;
+ padding-left: 4px;
cursor: pointer;
}
-\r
-#page.minichat #messages div.messageImpair {\r
- background-color: #e4e1ff;\r
-}\r
-\r
-#page.minichat #messages div.messagePair {\r
- background-color: #eceaf7;\r
-}
-\r
-/* Il n'y a plus de mise en evidence
-#page.minichat #messages div.miseEnEvidenceReponse {
- background-color: #bd7a11;
-}
-#page.minichat #messages div.miseEnEvidenceCourant {
- background-color: #bd1129;
-}
-#page.minichat #messages div.miseEnEvidenceConversation {
- background-color: #b711bd;
-}*/\r
+
+#page.minichat #conversations div.messageImpair {
+ background-color: #e4e1ff;
+}
+
+#page.minichat #conversations div.messagePair {
+ background-color: #eceaf7;
+}
+
+#page.minichat #conversations div.cache {
+ opacity: 0.3;
-#page.minichat #messages div.cache {
- opacity: 0.3;\r
- \r
- /* Hack IE 7 */ \r
- filter: alpha(opacity = 30);\r
+ /* Hack IE 7 */
+ filter: alpha(opacity = 30);
zoom: 1
}
-\r
-#page.minichat #messages div.reponse {\r
- border-color: #d2ad73\r
-}\r
-#page.minichat #messages div.repondu {\r
- border-color: #d066d4 \r
-}\r
-#page.minichat #messages div.proprietaire {\r
- border-color: #d74a5e\r
-}
-#page.minichat #messages div.systeme {
+
+#page.minichat #conversations div.reponse {
+ border-color: #d2ad73
+}
+#page.minichat #conversations div.repondu {
+ border-color: #d066d4
+}
+#page.minichat #conversations div.proprietaire {
+ border-color: #d74a5e
+}
+#page.minichat #conversations div.systeme {
background-color: #b1b1b1
-}\r
-\r
-#page.minichat div.message a {\r
- font-weight: bold;\r
-}\r
-\r
-#page.minichat .date {\r
- display: inline;\r
- color: #cf6f21;\r
- margin-right: 3px;\r
- margin-left: 3px;\r
-}\r
-\r
-#page.minichat div.message .pseudo,\r
-#page.minichat form .pseudo {\r
- display: inline;\r
- margin-left: 4px;\r
- margin-right: 2px;\r
- font-weight: bold;\r
- color: #2b5715;\r
+}
+
+#page.minichat div.message a {
+ font-weight: bold;
+}
+
+#page.minichat div.message .lienConv {
+ color: #db960f;
+ font-weight: bold;
+ cursor: pointer
+}
+
+#page.minichat div.message .lienConv:hover {
+ color: #f1c060
+}
+
+#page.minichat .date {
+ color: #cf6f21;
+ margin-right: 3px;
+ margin-left: 3px;
+}
+
+#page.minichat div.message .pseudo,
+#page.minichat form .pseudo {
+ margin-left: 4px;
+ margin-right: 2px;
+ font-weight: bold;
+ color: #2b5715;
}
#page.minichat div.systeme .pseudo {
color: #CCCCCC
-}\r
-\r
-/* Ca marche pas :(\r
-#page.minichat div.message .pseudo {\r
- min-width: 50px;\r
- height:100px;\r
-}*/\r
-
-#page.minichat #messages .repondA {
- display: inline;
+}
+
+/* Ca marche pas :(
+#page.minichat div.message .pseudo {
+ min-width: 50px;
+ height:100px;
+}*/
+
+#page.minichat #conversations .repondA {
margin-left: 4px;
color: #95600d
}
-\r
-#page.minichat #messages .contenu {\r
- display: inline;\r
-}\r
-\r
-#page.minichat #pages {\r
- margin-top: 10px;\r
-}\r
-\r
-#page.minichat #pages span {\r
- padding-right : 5px;\r
- padding-left: 5px;\r
- color: #7169ae;\r
- cursor:pointer;\r
-}\r
-\r
-#page.minichat #pages span.pageCourante {\r
- font-weight: bold;\r
- font-size: 150%;\r
-}\r
-\r
-#page.minichat #pages span:hover {\r
- font-size: 150%;\r
- color: #ada9cf;\r
-}\r
-\r
+
+/*#page.minichat #conversations .contenu {
+ display: inline;
+}*/
+
+#page.minichat #conversations .extraire {
+ float: right;
+ padding-right: 2px;
+ padding-left: 2px;
+ background-color: #cac5f8;
+}
+
+#page.minichat #conversations .extraire:hover {
+ background-color: #dfdcfd;
+ color: #a2a2a2
+}
+
+#page.minichat #conversations .titre {
+ padding-right: 8px;
+ background-color: #dedde8
+}
+
+#page.minichat #conversations .titre .fermer {
+ float: right;
+ padding-right: 5px;
+ padding-left: 5px;
+ background-color: #cac5f8;
+ color: #ff0000;
+ cursor: pointer;
+}
+
+#page.minichat #conversations .titre .fermer:hover {
+ background-color: #dddaf8;
+ color: #ffAAAA;
+}
+
+#page.minichat #conversations .titre .next,
+#page.minichat #conversations .titre .prev {
+ display: none;
+}
+
+#page.minichat #conversations .titre .lien {
+ float: right
+}
+
+#page.minichat #conversations .titre .lien,
+#page.minichat #conversations .titre .next,
+#page.minichat #conversations .titre .prev,
+#page.minichat #conversations .titre .numPage {
+ background-color: #cac5f8;
+ cursor: pointer;
+ padding-right: 5px;
+ padding-left: 5px;
+}
+
+#page.minichat #conversations .titre .lien:hover,
+#page.minichat #conversations .titre .next:hover,
+#page.minichat #conversations .titre .prev:hover,
+#page.minichat #conversations .titre .numPage:hover {
+ background-color: #dddaf8;
+ color: #a2a2a2;
+}
+
+#page.minichat #pages {
+ margin-top: 10px;
+}
+
+#page.minichat #pages span {
+ padding-right : 4px;
+ padding-left: 4px;
+ color: #7169ae;
+ cursor:pointer;
+}
+
+#page.minichat #pages span.pageCourante {
+ font-weight: bold;
+ font-size: 150%;
+}
+
+#page.minichat #pages span:hover {
+ font-size: 150%;
+ color: #ada9cf;
+}
+
[ok] Supprimer l'envoie de la description des conversations lors du refresh ainsi que modifié la manière de créer les conversations (maj des diagrammes de séquence)\r
[ok] Navigation vers les pages précédentes\r
[ok] Lien vers une conversation dans les messages sous cette forme {5F}. Le clic dessus ouvre la conversation. Egalement un bouton sur chaque conversation pour insérer son lien dans le message en cours de rédaction\r
- * Mettre à jour la CSS de chaque skin \r
+ * Mettre à jour la CSS de chaque skin
+* Flush le profil lors du déchargement de la page
+* Envoyer les infos des conversations avec l'attente d'events
+* Problème de rafraichissement des couleurs des messages auquels on répond
+* Changer les noms des css : Light -> Cold, Old -> Classic\r
* Remplacer l'XML par du JSON. gain en simplicité et en temps d'execution.\r
* Tester sur un prototype : l'authentification\r
* Si concluant passage complet à JSON\r
* http://forum-images.hardware.fr/icones/ohwell.gif\r
* Un statut "EK" avec plein de privilège à la con. (avoir une petite étoile à coté de son nick ou le nick d'une certaine couleur)\r
* Finir le script de mise en production\r
- * Compatage des js lors de la mise en production (afin d'optimiser la bande passante lors de l'accès au site), regarder comment fait jQuery.\r
+ * Compatage des js lors de la mise en production (afin d'optimiser la bande passante lors de l'accès au site), regarder comment fait jQuery.
+ * modifier le script pour virer les lignes matchant /^\W*;;;.*$/\r
* Traiter les tags TODO et FIXME dans le code\r
* Cleaner le code (erl, js, xhtml, css) et eventuellement profiler un peu (le refresh est lent sous opera)\r
* Restructurer le code Erlang : déplacer certaines fonctions d'un module à l'autre (ev. créer des modules)\r
[2] Après un register le pseudo est effacé - le pseudo n'est pas mémorisé dans le profil lors d'un envoie de mess en l'ayant changé\r
[2] cliquer sur les smiles ne marche pas sous IE\r
[2] le return ne marche pas sous IE
+[3] Traiter le cas ou le cookie n'existe pas coté serveur (et plus généralement traiter tous les cas d'inputs exeptionnels)
[3] "Return" ne marche pas sous safari\r
[3] Amélioration des requêtes MNESIA, voir : http://mail.google.com/mail/#label/Erlang+mailing-list/117f688280569a58
[3] la page est completement rechargé après avoir submité le profile dans opera
-----------------------
A. Introduction
----------------\r
-
+---------------
Ce document a pour but de décrire la communication client-serveur du site euphorik.\r
Les messages échangés sont basés sur le format JSON.
Ce document remplace 'protocole2.txt'.
\r
-B. Principe
------------
-
+B. Principes
+------------
Enregistrement:\r
* Permet de créer un compte, un cookie est donné en retour. Ce cookie doit être stocké par le client pour pouvoir s'authentifier par la suite.
Rafraichissement:
* Le client envoie une demande au serveur avec l'id du dernier message (via XMLHttpRequest ou un function de JQuery)
* Le serveur maintient la connexion bloquée si le client est à jour.
- * Dès qu'un nouveau message arrive, le serveur débloque la connexion est envoie le ou les messages manquants.
+ * Dès qu'un nouveau message arrive, le serveur débloque la connexion et envoie le ou les messages manquants.
C. Protocole
------------
c : client
s : server
-Les messages client vers serveur sont envoyé par HTTP-POST
+Les messages client vers serveur sont envoyés par HTTP-POST.
C.1. Login
"main_page" : 1,\r
"conversations" : [\r
{\r
- "racine" : 123,\r
+ "root" : 123,\r
"page" : 1\r
}\r
],\r
"pseudo" : "Paul",\r
"email" : "paul@pierre.com",\r
"css" : "css/3/euphorik.css",\r
- "mainPage" : "1",\r
+ "mainPage" : 1,\r
"conversations" : [\r
{\r
- "racine" : "4F",\r
+ "root" : 123,\r
"page" : 1\r
}\r
- ],\r
- } \r
+ ]\r
+ }\r
s -> c\r
{\r
"action" : "wait_event",\r
"cookie" : "LKJDLAKSJBFLKASN",\r
"message_count" : 10,\r
- "last_message_id" : 163\r
+ "last_message_id" : 163,
+ "mainPage" : 1,
+ "conversations" : [
+ {
+ "root" : 123,
+ "page" : 1
+ }
+ ]\r
}
s -> c\r
Client.prototype.connexion = function(action)
{
- //action.action.dump()
+ action.action.dump("Connexion client")
thisClient = this
jQuery.ajax(
{
success:
function(data)
{
- //thisClient.util.serializer.serializeToString(data).dump("Charger client")
+ thisClient.util.serializer.serializeToString(data).dump("Charger client")
thisClient.chargerDonnees(data)
}
}
async = true
thisClient = this
- //this.util.xmlVersAction(this.getXMLProfile()).action.dump("Flush client")
+ this.util.xmlVersAction(this.getXMLProfile()).action.dump("Flush client")
jQuery.ajax(
{
async: async,
PageMinichat.prototype.decharger = function()
{
- if (this.attenteCourante != null)
- this.attenteCourante.abort()
+ //alert(this.attenteCourante)
+ this.messages.stopAttenteCourante()
}
PageMinichat.prototype.getXMLMessage = function(pseudo, message, repondA)
}
PageMinichat.prototype.envoyerMessage = function(pseudo, message)
-{\r
+{
+ var thisPageMinichat = this
+\r
// (un pseudo vide est autorisé)
pseudo = this.formateur.filtrerInputPseudo(pseudo)
for(var i = 0; i < tags.length; i++)
repondA.push(/\{(.*?)\}>/.exec(tags[i])[1])
message = message.replace(this.regexMessageTagReplace, "")
-
- // met à jour la classe des messages auquel repond celui ci (c'est un peu de la triche)
- for (var i = 0; i < repondA.length; i++)
- {
- jQuery("#conversation div#" + repondA[i]).addClass("repondu")
- for (var c = 0; c < this.messages.conversations.length; c++)
- for (var m = 0; m < this.messages.conversations[c].messages.length; m++)
- this.messages.conversations[c].messages[m].clientARepondu = true
- }
}\r
\r
message = message.trim()\r
dataType : "xml",\r
success : function(data, textStatus)\r
{
- if(jQuery("statut", data.documentElement).text() == "ok")\r
- jQuery("form input.message").val("")\r
+ if(jQuery("statut", data.documentElement).text() == "ok")
+ {\r
+ jQuery("form input.message").val("")
+
+ // met à jour la classe des messages auquel repond celui ci (c'est un peu de la triche)
+ for (var i = 0; i < repondA.length; i++)
+ {
+ jQuery("#conversations div#" + repondA[i]).addClass("repondu")
+ /* Ca sert à rien, TODO : tester/virer
+ for (var c = 0; c < thisPageMinichat.messages.conversations.length; c++)
+ for (var m = 0; m < thisPageMinichat.messages.conversations[c].messages.length; m++)
+ thisPageMinichat.messages.conversations[c].messages[m].clientARepondu = true
+ */
+ }
+ }\r
}\r
}\r
)
this.formateur = formateur
this.messages = new Array()
this.messagesParId = new Object()
+
+ this.nbMessageMax = conf.nbMessageAffiche // Le nombre de message affiché par page
jQuery("#conversations").append(
'<div id="' + this.getId() + '" class="conversation">\
// enlève les messages exedentaires
var nbMessagesAffiche = jQuery("#conversations #" + this.getId() + " .message").size()
+
if (nbMessagesAffiche > this.nbMessageMax)
- jQuery("#conversations #" + this.getId() + " .message").slice(this.nbMessageMax, nbMessagesAffiche).empty();
+ 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) > parseInt(idDernierMessageAffiche, 36)}).each(
this.conversations[i].viderMessages()
}
+/**
+ * Arrete l'attente courante s'il y en a une.
+ */
+Messages.prototype.stopAttenteCourante = function()
+{
+ if (this.attenteCourante != null)
+ this.attenteCourante.abort()
+}
+
/**
* Met à jour les messages de manière continue.
* (AJAX-Comet-style proof)
{
var thisMessages = this // caisupair javacrypte
- if (this.attenteCourante != null)
- this.attenteCourante.abort()
-
if (vider == undefined)
vider = false
+
+ this.stopAttenteCourante()
if (vider)
this.idDernierMessage = null\r
- this.util.xmlVersAction(this.getXMLrafraichirMessages()).action.dump("Client")
+ ;;; this.util.xmlVersAction(this.getXMLrafraichirMessages()).action.dump("Client")
this.attenteCourante = jQuery.ajax({
type: "POST",
url: "request",
success:
function(data)
{ \r
- thisMessages.util.serializer.serializeToString(data).dump("Serveur")\r
+ ;;; thisMessages.util.serializer.serializeToString(data).dump("Serveur")\r
if (vider)
thisMessages.viderMessages()
% Ajoute les parents de chaque message.
% @spec mise_en_forme_conversation([integer()]) -> [{integer(), [integer()]}]
mise_en_forme_conversation(Messages) ->
- lists:foldl(
+ lists:foldr(
fun(Id, Acc) ->
case euphorik_minichat:message_by_id(Id) of
{ok, Message} ->
Curseur = qlc:cursor(q([E#minichat.id || E <- qlc:sort(table(minichat), [{order, descending}])])),
{CP, Plus} = conversation_principale(Curseur, Conversations, N, P),
qlc:delete_cursor(Curseur),
- {reverse([M || M <- CP, M > D]), Plus} % filtre en fonction de D
+ {[M || M <- CP, M > D], Plus} % filtre en fonction de D
end)),
[Conversation_principale | Conversations].
% et la liste de conversations.
% N est le nombre de messages que l'on souhaite.
% P est le numéro de la page (1, 2, 3...)
-% Renvoie {[Id], Plus}
-% @spec conversation_principale(qlc:QueryCursor(), [Conversation_detailee()], integer(), integer())
+% @spec conversation_principale(qlc:QueryCursor(), [Conversation_detailee()], integer(), integer()) -> {[Id], Plus}
conversation_principale(C, Conversations, N, P) ->
- CP = conversation_principale2(C, lists:flatten(map(fun({C2, _, X, _}) -> C2 -- X end, Conversations)), N + 1, (P - 1) * N),
+ % on prend en message de plus pour savoir s'il y en a plus que ce que l'on désire
+ CP = reverse(conversation_principale2(C, lists:flatten(map(fun({C2, _, X, _}) -> C2 -- X end, Conversations)), N + 1, (P - 1) * N)),
Plus = length(CP) =:= N + 1,
+ io:format("~p~n", [CP]),
{
if Plus ->
[_| Suivants] = CP,
Email = case xmerl_xpath:string("email", Action) of [#xmlElement{content = [#xmlText{value = E}]}] -> E; _ -> undefined end,
Css = case xmerl_xpath:string("css", Action) of [#xmlElement{content = [#xmlText{value = C}]}] -> C; _ -> undefined end,
Page_principale = case xmerl_xpath:string("pagePrincipale", Action) of [#xmlElement{content = [#xmlText{value = P3}]}] -> list_to_integer(P3); _ -> undefined end,
- Conversations = lists:foldl(
+ Conversations = lists:foldr(
fun(Conv, Acc) ->
[#xmlElement{content = [#xmlText{value = Id_racine_str}]}] = xmerl_xpath:string("racine", Conv),
[#xmlElement{content = [#xmlText{value = Page_conv_str}]}] = xmerl_xpath:string("page", Conv),
_ -> inconnu
end;
_ -> inconnu
- end,
- % extraction des conversations en [{id, page}, ..]
- % Obsolète : obtenu depuis la table 'user'
- %~ Conversations = lists:map(
- %~ fun(Conv) ->
- %~ [#xmlElement{content = [#xmlText{value = Id_racine_str}]}] = xmerl_xpath:string("racine", Conv),
- %~ [#xmlElement{content = [#xmlText{value = Page_conv_str}]}] = xmerl_xpath:string("page", Conv),
- %~ {erlang:list_to_integer(Id_racine_str, 36), erlang:list_to_integer(Page_conv_str)}
- %~ end,
- %~ xmerl_xpath:string("conversation", Action)
- %~ ),\r
+ end,\r
% accrochez-vous ca va siouxer ;)
[{reponse, [{name, "refreshMessages"}],\r
lists:map(\r
]
}\r
end,
- euphorik_minichat_conversation:conversations(User#user.conversations, Nb_message, Dernier_id, User#user.page_principale)\r
+ euphorik_minichat_conversation:conversations(
+ if User =/= inconnu -> User#user.conversations; true -> [] end,
+ Nb_message,
+ Dernier_id,
+ if User =/= inconnu -> User#user.page_principale; true -> 1 end
+ )\r
)
}];
_ ->
%~ io:format("Login : ~p~n", [euphorik_protocole:login(XML2)]).
\r
XML =\r
- "<action name=\"refreshMessages\">"\r
- "<nombreMessage>2</nombreMessage>"\r
- "<page>1</page>"
- "<conversation><racine>3</racine><page>1</page></conversation>"\r
+ "<action name=\"refreshMessages\"><cookie>3FSDCH0FD4ML8WEPN2B5T</cookie>"
+ "<nombreMessage>10</nombreMessage>"
"</action>",\r
io:format("Messages de la premières page : ~p~n", [traiter_xml(XML)]).
\r