Salut à tous,

Salut à tous :-) ,

Chicha et moi avons débattu de ce grand sujet sur IRC, et la « Magie Nasgaïa »
a une fois de plus opéré puisque non seulement nous avons trouvé ce qui
diffère dans nos points de vue respectifs, mais surtout nous nous somme mis
d'accord sur une nouvelle proposition dont je vais vous faire part ici :-)

Le point de divergence principal concernait le fait qu'un message puisse ou
non être suivi d'un état (status). En ce qui me concerne, pour tous les
modules Ncooker que j'ai développé jusqu'à présent, tous les messages sont
suivis d'un état. En théorie, rien ne l'oblige, mais le rôle de ces modules
fait qu'ils ont un certain nombres d'opérations, « d'étapes », à réaliser ;
chacune d'elle pouvant soit réussir, soit échouer. A aucun moment je n'ai eu besoin d'afficher un simple message d'information qui ne soit pas suivi d'un
état. Et je ne trouvais pas d'exemple de module qui puisse avoir besoin de
cela :-)

Mais fort heureusement, Chicha m'a ouvert les yeux en prenant pour exemple la
future commande « search ». Un exemple en images :-) :

$ Ncooker -v MAIN search toto

Searching packages whose name contains "toto" ... [ FAILED ]

$ Ncooker -v MAIN search xine

Searching packages whose name contains "xine" ...
    libxine-1.0.1
    xine-ui-0.99.3

Ici, le nom des paquets ne correspond pas à une étape, mais au résultat de la
recherche. Et bien évidemment, il ne sont pas suivi d'un état :-)

En utilisant un niveau de verbosité plus élevé, on peut imaginer obtenir
ceci :

$ Ncooker -v INFO search xine

Searching packages whose name contains "xine" ...
    Searching in "Nasgaïa CD" provider ...
        libxine1-1.0.1
        xine-ui-0.99.3
    Searching in "Nasgaïa contrib" provider ... [ FAILED ]

On voit que l'affichage des résultats est indenté en fonction de la dernière
étape affichée. Il faut donc utiliser une fonction qui affiche les messages
« normaux » (ceux qui ne correspondent pas à des étapes) en utilisant le
niveau d'indentation en cours des étapes. Un simple « echo » ne suffit
pas :-)

Fort de ces remarques, nous proposons la solution suivante fortement inspirée
de la proposition de Julien :-) :

La fonction print_msg() dont nous avons parlé jusqu'à maintenant est renommée
en print_step(). Elle s'utilise simplement en faisant « print_step
<message> ». Lorsqu'elle est appelée, elle affiche le message passé en
paramètre en prenant en compte le niveau d'indentation général, puis
incrémente ce dernier

Les messages qui ne correspondent pas à des étapes sont affichés par une
nouvelle fonction print_msg(). Elle s'utilise en faisant « print_msg
<message> ». Lorsqu'elle est appelée, elle se contente d'afficher son message
en utilisant l'indentation générale actuelle.

print_status() ne change pas. Comme expliqué précédemment, elle affiche un
état au bout de la ligne précédente, mais uniquement si cette ligne a été
affiché par la fonction print_step(). Après avoir affiché l'état, elle
décrémente le niveau d'indentation général.


Gontran : tu as très bien résumé et approfondi la solution que j'ai proposée dans ton dernier message. Avec ce nouveau message, vous affinez encore la solution et elle me convient parfaitement.



Chicha va coder ces fonctions pour pouvoir les tester et voir si c'est une
solution viable.


Quelques points restent encore à éclaircir (auxquels j'ai pensé après ma
discussion avec Chicha :-) ) :

Dans mon exemple avec « Ncooker -v MAIN search xine », on voit qu'aucun état
est affiché lorsque la recherche est fructueuse. Seul le résultat l'est.
Faut-il affiché un état « [ FOUND ] » au bout du message d'étape avant de
présenter les résultats ? Cela peut poser quelques problèmes de convivialité,
parce que le résultat ne serait pas affiché au fur et à mesure que les
paquets sont trouvés. Il faudrait les garder en mémoire jusqu'à la fin de la recherche, puis afficher l'état et le résultat en une fois. Perso, je trouve
qu'afficher les paquets au fur et à mesure est mieux, car dès que le paquet
recherché est affiché, on peut arrêter la recherche.

Je suis d'accord avec toi sur ce point. Mieux vaut afficher les résultats au fur et à mesure.


Autre possibilité, afficher l'état après de résultat. Par exemple :

$ Ncooker -v MAIN search xine

Searching packages whose name contains "xine" ...
    libxine-1.0.1
    xine-ui-0.99.3
\.................................................................. [ OK ]

$ Ncooker -v INFO search xine

Searching packages whose name contains "xine" ...
    Searching in "Nasgaïa CD" provider ...
        libxine1-1.0.1
        xine-ui-0.99.3
\............................................................... [ OK ] Searching in "Nasgaïa contrib" provider ....................... [ FAILED ]


Cette possibilité me paraît acceptable. Je n'ai pas d'avis tranché sur la question.


Tout ceci ne reste qu'une proposition. Vos commentaires et idées sont bien
entendu appréciés :-)

Rien à redire (pour une fois :p).


++
Gontran

A+

--
Julien

_________________________________________________________________
MSN Messenger : personnalisez votre messagerie instantanée ! http://g.msn.fr/FR1001/866


Répondre à