From: Greg Burri Date: Sun, 1 Jun 2008 12:22:29 +0000 (+0000) Subject: FIX problème de rafraichissement des messages (flush, js) X-Git-Tag: 1.0.0^2~1 X-Git-Url: http://git.euphorik.ch/index.cgi?a=commitdiff_plain;h=c021866458e347a8c704217247ba207ad99c5cb7;p=euphorik.git FIX problème de rafraichissement des messages (flush, js) ADD module de test coté serveur --- diff --git a/doc/TODO.txt b/doc/TODO.txt index e4c83a3..42f132c 100755 --- a/doc/TODO.txt +++ b/doc/TODO.txt @@ -1,7 +1,6 @@ == TODO == === v1.0 === -* Rendre compatible IE 7 (pfff..) * Corriger les bugs de niveau [1] et [2] * Cleaner le code (erl, js, xhtml, css) et eventuellement profiler un peu (le refresh est lent sous opera) === v1.1 === @@ -183,8 +182,10 @@ [2] Le changement de skin n'est pas mémorisé lorsque l'on est pas connecté (normal puisque le style est mémorisé dans le profil) * solution 1 : permettre le changement de skin uniquement pour les personnes enregistré ? * solution 2 : mémoriser le skin courant dans un cookie -[2] Après l'ajout d'une image il n'est pas possible de naviger depuis celle ci vers les autres images en utilisant Next et Prev de lightbox après l'avoir affiché -[2] cliquer sur les smiles ne marche pas sous IE +[2] Après l'ajout d'une image il n'est pas possible de naviger depuis celle ci vers les autres images en utilisant Next et Prev de lightbox après l'avoir affich +[2] Plein de bugs sous MS internet explorer 7 + * click sur le lien du conv insère sont id systématiquement au début du message + * le changement de skin foire complétement [2] griser le login dans le profil pour montrer qu'on ne peut pas l'éditer [3] Quand on revient en arrière dans firefox le message en rédaction est perdu * Pas sous Opera, apparemment Firefox recharge toute la page (donc impossible qu'il puisse remettre le message) diff --git a/js/pageMinichat.js b/js/pageMinichat.js index 48ab5be..356956c 100755 --- a/js/pageMinichat.js +++ b/js/pageMinichat.js @@ -529,12 +529,6 @@ Conversation.prototype.flush = function(funClickOuvrirConv) messagePair = !messagePair } - - // enlève les messages exedentaires - var nbMessagesAffiche = $("#conversations #" + this.getId() + " .message").size() - - if (nbMessagesAffiche > this.nbMessageMax) - $("#conversations #" + this.getId() + " .message").slice(this.nbMessageMax, nbMessagesAffiche).empty() var DOM = $(XHTML) DOM.each( @@ -640,6 +634,11 @@ Conversation.prototype.flush = function(funClickOuvrirConv) ) DOM.prependTo("#conversations #" + this.getId()) + // enlève les messages exedentaires + var nbMessagesAffiche = $("#conversations #" + this.getId() + " .message").size() + if (nbMessagesAffiche > this.nbMessageMax) + $("#conversations #" + this.getId() + " .message").slice(this.nbMessageMax, nbMessagesAffiche).remove() + if (this.messages.length > 0) this.idDernierMessageAffiche = this.messages[this.messages.length-1].id } diff --git a/modules/Makefile b/modules/Makefile index 947a3c3..4f808db 100755 --- a/modules/Makefile +++ b/modules/Makefile @@ -16,6 +16,7 @@ $(rep_ebin)/euphorik_minichat_conversation.beam \ $(rep_ebin)/euphorik_requests.beam \ $(rep_ebin)/euphorik_protocole.beam \ $(rep_ebin)/euphorik_daemon.beam \ +$(rep_ebin)/euphorik_test.beam # Module pour la gestion des données persistante la BD $(rep_ebin)/euphorik_bd.beam: $(rep_erl)/euphorik_bd.erl $(rep_include)/euphorik_bd.hrl $(rep_include)/euphorik_defines.hrl @@ -39,6 +40,10 @@ $(rep_ebin)/euphorik_protocole.beam: $(rep_erl)/euphorik_protocole.erl $(rep_inc # Module effectuant periodiquement certaines tâches $(rep_ebin)/euphorik_daemon.beam: $(rep_erl)/euphorik_daemon.erl $(rep_include)/euphorik_defines.hrl + erlc $(erlc_params) + +# Module dédié au tests +$(rep_ebin)/euphorik_test.beam: $(rep_erl)/euphorik_test.erl $(rep_erl)/euphorik_bd.erl $(rep_include)/euphorik_bd.hrl erlc $(erlc_params) # Suppression des modules compilés diff --git a/modules/erl/euphorik_protocole.erl b/modules/erl/euphorik_protocole.erl index faf877d..d99e4cc 100755 --- a/modules/erl/euphorik_protocole.erl +++ b/modules/erl/euphorik_protocole.erl @@ -91,7 +91,7 @@ loginUser(_, _) -> % Renvoie un string() représentant un cookie en base 36. Il y a 10^32 possibillités. generer_cookie() -> - {A1,A2,A3} = now(), + {A1, A2, A3} = now(), random:seed(A1, A2, A3), erlang:integer_to_list(random:uniform(math:pow(10, 32)), 36). diff --git a/modules/erl/euphorik_test.erl b/modules/erl/euphorik_test.erl new file mode 100644 index 0000000..d5c83c3 --- /dev/null +++ b/modules/erl/euphorik_test.erl @@ -0,0 +1,98 @@ +% coding: utf-8 +% Module de test de euphorik. +% Crée un certain nombre d'utilisateur et post des messages aléatoire. + + +-module(euphorik_test). +-compile(export_all). + +-include("../include/euphorik_bd.hrl"). + + +% N est le nombre d'utilisateur +start(N) -> + Ids = creer_users(N), + lists:map( + fun(Id) -> + timer:sleep(100), + spawn( + fun() -> + {A1, A2, A3} = now(), + random:seed(A1, A2, A3), + loop(Id) + end + ) + end, + Ids + ). + +stop(Pids) -> + lists:foreach(fun(Pid) -> exit(Pid, kill) end, Pids). + + +% Crée N user avec des noms aléatoires et renvoie la liste des id. +creer_users(N) -> + creer_users(N, []). +creer_users(0, Ids) -> lists:map(fun(#user{id = Id}) -> Id end, Ids); +creer_users(N, Ids) -> + creer_users(N - 1, [euphorik_bd:nouveau_user(mot_rand(random:uniform(4) + 4), "", "") | Ids ]). + + +% crée un message aléatoire et le renvoie +message_rand() -> + lists:flatten(message_rand(random:uniform(10), [])). +message_rand(0, Mots) -> Mots; +message_rand(N, Mots) -> + message_rand(N - 1, [mot_rand(random:uniform(2) + 5), $ | Mots]). + + +% Renvoie une succession de lettre aléatoire +mot_rand(L) -> + mot_rand(L, []). +mot_rand(0, Mot) -> Mot; +mot_rand(L, Mot) -> + mot_rand(L - 1, [random:uniform($z - $a + 1) + $a - 1 | Mot]). + + +% Tire au hasard de 0 à 3 messages sur les 10 derniers postés, renvoie une liste de int() +% répartition : +% 0 : 0.5 +% 1 : 0.3 +% 2 : 0.15 +% 3 : 0.05 +messages_id_rand() -> + Messages = lists:map(fun(#minichat{id = Id}) -> Id end, euphorik_bd:messages(30)), + R = random:uniform(), + if R =< 0.5 -> []; + R > 0.5 andalso R =< 0.8 -> + tire_element_rand(1, Messages); + R > 0.8 andalso R =< 0.95 -> + tire_element_rand(2, Messages); + true -> + tire_element_rand(3, Messages) + end. + + +% tire N element distinct parmis la liste L proposée +tire_element_rand(N, L) when N =< length(L) -> + tire_element_rand(N, L, []). +tire_element_rand(0, _, Elements) -> Elements; +tire_element_rand(N, L, Elements) -> + E = lists:nth(random:uniform(length(L)), L), + E_se_trouve_dans_Elements = lists:any(fun(E2) -> E2 =:= E end, Elements), + if E_se_trouve_dans_Elements -> % si E a déjà été tiré on recommence sans rien changer + tire_element_rand(N, L, Elements); + true -> + tire_element_rand(N-1, L, [E | Elements]) + end. + + +loop(User_id) -> + % attend un temp aléatoire compris entre 1 sec et 5 sec + timer:sleep(1000 * random:uniform(5)), + % poste un message aléatoire par une personne aléatoire répondant à des messages aléatoires + {Message, Repond_a} = {message_rand(), messages_id_rand()}, + io:format("~p poste ~p et repond a ~w~n", [User_id, Message, Repond_a]), + euphorik_bd:nouveau_message(Message, User_id, Repond_a), + loop(User_id). + \ No newline at end of file diff --git a/pages/about.html b/pages/about.html index dd66cd0..b19724c 100644 --- a/pages/about.html +++ b/pages/about.html @@ -19,8 +19,8 @@

Quels-sont les navigateurs supportés ?

-

Le site a été testé avec succès sous "Firefox 2", "Safari 3", "Opera 9" et "Konqueror". -Il est déconseillé d'utiliser Microsoft Internet Explorer pour des raisons d'incompatibilités.

+

Le site a été testé sous "Firefox 2 et 3", "Safari 3", "Opera 9". +Il est fortement déconseillé d'utiliser Microsoft Internet Explorer pour des raisons d'incompatibilités.

Le site se bloque sous Microsoft Internet Explorer 7 !

diff --git a/tools/mise_en_prod.rb b/tools/mise_en_prod.rb index 4ca524b..23c62cb 100755 --- a/tools/mise_en_prod.rb +++ b/tools/mise_en_prod.rb @@ -33,13 +33,13 @@ end # Compilation de la partie serveur Dir.chdir('../modules') puts `make` +Dir.chdir('..') # création du repertoire BD creer_remote_rep('BD') `ssh #{$host} "chmod g+w #{$rep_remote}/BD"` # copie de la partie statique : css, images, html, etc.. -Dir.chdir('..') print `rsync #{$opt_rsync} index.yaws #{$host}:#{$rep_remote}` print `rsync #{$opt_rsync} favicon.ico #{$host}:#{$rep_remote}` print `rsync #{$opt_rsync} -r css #{$host}:#{$rep_remote}` @@ -58,7 +58,7 @@ Dir.entries(rep_js).each{|fichier| # copie des modules erlang creer_remote_rep('modules') -`rsync #{$opt_rsync} -r modules/ebin #{$host}:#{$rep_remote}/modules` +`rsync #{$opt_rsync} -r --exclude 'euphorik_test.beam' modules/ebin #{$host}:#{$rep_remote}/modules` `rsync #{$opt_rsync} -r modules/include #{$host}:#{$rep_remote}/modules` # attribution des droits