Fait partie du Décor
Alcoolémie: 29
Messages: 4300
Hors ligne
Sexe: 
Breizh ma bro
|
 |
« le: 29 Novembre 2011 17:48:25 » |
|
Salut. Dans l'optique d'apporter une meilleure interface graphique à l'addon Advanced Setting Editor. Je suis donc en train de décortiquer le fichier custom_SkinSetting_1111.xml de Confluence et Influence pour arriver à un rendu visuel acceptable. Il y a plusieurs choses qui m'interpellent : - il est fait référence à des fichiers (Confluence_Logo.png, MenuItemNF.png, ...) mais je ne les trouve nulle part dans l'arborescence du Influence ou Confluence. - le menu de gauche se génère avec ce code : <content> <item id="1"> <label>128</label> <label2>5</label2> <onclick>-</onclick> </item> <item id="2"> <label>513</label> <label2>31112</label2> <onclick>-</onclick> </item> <item id="3"> <label>31102</label> <label2>31115</label2> <onclick>-</onclick> </item> <item id="4"> <label>24000</label> <label2>31200</label2> <onclick>-</onclick> </item> <item id="5"> <label>Menu</label> <label2>31115</label2> <onclick>-</onclick> </item> <item id="6"> <label>35111</label> <label2>35112</label2> <onclick>-</onclick> </item> <item id="7"> <label>Reset Skin</label> <label2>and exit</label2> <onclick>Skin.ResetSettings</onclick> <onclick>quit</onclick> </item> </content> J'aimerais voir comment est généré le sous-menu 5 mais je trouve bien les définitions pour les menus 1, 2, 4, 6, 7 mais pas le 5 évidement. Il est généré via programme ? Comment alors ?
|
|
|
|
|
Journalisée
|
|
|
|
Made in Québec
Fait partie du Décor
Alcoolémie: 32
Messages: 4709
Hors ligne
Sexe: 
On est venu, on l'a vu et il l'a eu dans le cul !
|
Je suis donc en train de décortiquer le fichier custom_SkinSetting_1111.xml de Confluence et Influence pour arriver à un rendu visuel acceptable.
 tu as peut être pas pris un xml simple pour commencer une GUI pour ton plugin. je te conseil plus de regarder un de mes add-ons qui gère une GUI, inclue les images ou tous le bazars. Il y a plusieurs choses qui m'interpellent :
- il est fait référence à des fichiers (Confluence_Logo.png, MenuItemNF.png, ...) mais je ne les trouve nulle part dans l'arborescence du Influence ou Confluence.
par défaut ils sont tous dans le textures.xbt XBMC va récupérer la texture comme ceci 1. il vérifie dans le skin courant /media/textures.xbt s'il trouve pas la texture il passe à 2 2. il regarde dans le dossier de ton add-on "resources/skins/Default/media/[le nom de la texture].foo" 3. si c'est un chemin complet, il fera pas la vérification de 1 et 2 4. il va rien mettre  - le menu de gauche se génère avec ce code : <content> <item id="1"> <label>128</label> <label2>5</label2> <onclick>-</onclick> </item> <item id="2"> <label>513</label> <label2>31112</label2> <onclick>-</onclick> </item> <item id="3"> <label>31102</label> <label2>31115</label2> <onclick>-</onclick> </item> <item id="4"> <label>24000</label> <label2>31200</label2> <onclick>-</onclick> </item> <item id="5"> <label>Menu</label> <label2>31115</label2> <onclick>-</onclick> </item> <item id="6"> <label>35111</label> <label2>35112</label2> <onclick>-</onclick> </item> <item id="7"> <label>Reset Skin</label> <label2>and exit</label2> <onclick>Skin.ResetSettings</onclick> <onclick>quit</onclick> </item> </content> J'aimerais voir comment est généré le sous-menu 5 mais je trouve bien les définitions pour les menus 1, 2, 4, 6, 7 mais pas le 5 évidement. pas certain de comprendre. encore un fois tu as pas pris le control les plus facile  le <content>menu est généré pour remplir un liste comme ceci http://wiki.xbmc.org/index.php?title=List_ContainerLes <label> c'est un peut comme les textures xbmc inclue ton strings.xml au sien qui est déjà en mémoire donc <label>24000</label> est l'id 24000 du fichier strings.xml si tu met des lettres comme <label>Menu</label> le titre dans la liste va être "Menu" je te conseil de regarder la docs officiel http://wiki.xbmc.org/?title=Skinning_XBMCsection controls et les autres pour infos Il est généré via programme ? Comment alors ?
Il est généré comme un skin si tu utilise le WindowXML, xbmc va rajouter les xml de ton add-on au skin courant Et il se lancement comme avant via programme. remarque je peux me tromper dans tous ça  Frost
|
|
|
|
|
Journalisée
|
Par Osiris et par Apis regardez moi, regardez moi bien... Par Osiris et par Apis vous êtes maintenant des... des quoi au juste ? Des addoniens ! Vous aimez bien les add-ons vous les Passionnés. Allez on recommence. Par Osiris et par Apis vous êtes maintenant des addoniens... oui... des addoniens... Silennnce, concentrez vous.
|
|
|
Fait partie du Décor
Alcoolémie: 29
Messages: 4300
Hors ligne
Sexe: 
Breizh ma bro
|
Je vais regarder tes addons Frost. Pour l'histoire, j'avais bien compris le truc avec les codes qui permettent d'internationalisé les libellés. Mon interrogation portait plus sur l'enchaînement d'actions lorsque j'affichais les items du menu "Menu Personnaliser" (le 5ème item du menu de gauche). Pour l'affichage du menu 1, je vois bien dans le XML la partie avec : <control type="group" id="9010"> <control type="grouplist" id="9001"> <!--General Settings --> <visible>Container(9000).Hasfocus(1)</visible>
qui permet de définir les différentes options liées à ce menu. Mais comment ça marche avec le menu 5 ? Il n'y a pas de branchement Container(9000).Hasfocus(5)
|
|
|
|
|
Journalisée
|
|
|
|
Made in Québec
Fait partie du Décor
Alcoolémie: 32
Messages: 4709
Hors ligne
Sexe: 
On est venu, on l'a vu et il l'a eu dans le cul !
|
Je vais regarder tes addons Frost. Pour l'histoire, j'avais bien compris le truc avec les codes qui permettent d'internationalisé les libellés. Mon interrogation portait plus sur l'enchaînement d'actions lorsque j'affichais les items du menu "Menu Personnaliser" (le 5ème item du menu de gauche). Pour l'affichage du menu 1, je vois bien dans le XML la partie avec : <control type="group" id="9010"> <control type="grouplist" id="9001"> <!--General Settings --> <visible>Container(9000).Hasfocus(1)</visible>
qui permet de définir les différentes options liées à ce menu. Mais comment ça marche avec le menu 5 ? Il n'y a pas de branchement Container(9000).Hasfocus(5) comprend pas "branchement" ! que veux tu dire par là? en fait ça Container(9000).Hasfocus(5) demande à xbmc si le control 9000 focus avec le menu id 5 <visible>Container(9000).Hasfocus(5)</visible> <visible>Container(9000).Hasfocus(7)</visible> ... (XML): <control type="label"> <width>250</width> <height>35</height> <font>font12caps</font> <textcolor>blue</textcolor> <align>center</align> <aligny>center</aligny> <label>INFOS DU MENU 5: CETTE FONCTION SERT À METTRE XBMC HORS SERVISE :)</label> <visible>Container(9000).Hasfocus(5)</visible> </control> <control type="label"> <width>250</width> <height>35</height> <font>font12caps</font> <textcolor>blue</textcolor> <align>center</align> <aligny>center</aligny> <label>INFOS DU MENU 7: CETTE FONCTION SERT À METTRE XBMC AU VIDANGE :)</label> <visible>Container(9000).Hasfocus(7)</visible> </control>
etc
|
|
|
|
|
Journalisée
|
Par Osiris et par Apis regardez moi, regardez moi bien... Par Osiris et par Apis vous êtes maintenant des... des quoi au juste ? Des addoniens ! Vous aimez bien les add-ons vous les Passionnés. Allez on recommence. Par Osiris et par Apis vous êtes maintenant des addoniens... oui... des addoniens... Silennnce, concentrez vous.
|
|
|
Fait partie du Décor
Alcoolémie: 29
Messages: 4300
Hors ligne
Sexe: 
Breizh ma bro
|
Donc, dans le custom_SkinSetting_1111.xml, les items définis sous : <visible>Container(9000).Hasfocus(1)</visible> ne seront affichés que si le container(9000), donc le menu de gauche, a le focus sur l'item 1.
Mais comment est construite la liste des options lorsque le focus est sur l'item 5 ?
Dans Influence, c'est le sous-menu qui permet de paramétrer tous les menus et sous-menus.
Mais avec tes explications et l'analyse de ton addon TVtunes, je commence à mieux comprendre XBMC.
Merci.
|
|
|
|
|
Journalisée
|
|
|
|
Fait partie du Décor
Alcoolémie: 29
Messages: 4300
Hors ligne
Sexe: 
Breizh ma bro
|
XBMC va récupérer la texture comme ceci 1. il vérifie dans le skin courant /media/textures.xbt s'il trouve pas la texture il passe à 2 2. il regarde dans le dossier de ton add-on "resources/skins/Default/media/[le nom de la texture].foo" 3. si c'est un chemin complet, il fera pas la vérification de 1 et 2 4. il va rien mettre  Merci pour ces éclaircissements. Pour le point 1, c'est chiant car d'après le forum officiel, on ne peut pas décompresser les fichiers contenus dans le textures.xbt  Pour le point 2, c'est quoi cette extension .foo ?
|
|
|
|
|
Journalisée
|
|
|
|
Made in Québec
Fait partie du Décor
Alcoolémie: 32
Messages: 4709
Hors ligne
Sexe: 
On est venu, on l'a vu et il l'a eu dans le cul !
|
Merci pour ces éclaircissements. Pour le point 1, c'est chiant car d'après le forum officiel, on ne peut pas décompresser les fichiers contenus dans le textures.xbt  en effet on peut pas extraire un xbt, dans le temps on pouvais le faire avec le xpr. depuis que c'est du xbt on peut plus Faut que tu trouve les sources du skin que tu veux les images, confluence il te faut un client GIT et tu récupère tous ici https://github.com/xbmc/xbmc ou prend le zip des sources xbmc https://github.com/xbmc/xbmc/zipball/masterPour un autre cela dépend ou il est cela peut être sur un svn ou encore sur un GIT Pour confluence su tu veux je peux te faire un zip des images. Pour le point 2, c'est quoi cette extension .foo ? foo bar, c'était un exemple .foo = .png / .gif / . jpg ....
|
|
|
|
« Dernière édition: 30 Novembre 2011 12:02:28 par Frost »
|
Journalisée
|
Par Osiris et par Apis regardez moi, regardez moi bien... Par Osiris et par Apis vous êtes maintenant des... des quoi au juste ? Des addoniens ! Vous aimez bien les add-ons vous les Passionnés. Allez on recommence. Par Osiris et par Apis vous êtes maintenant des addoniens... oui... des addoniens... Silennnce, concentrez vous.
|
|
|
Fait partie du Décor
Alcoolémie: 29
Messages: 4300
Hors ligne
Sexe: 
Breizh ma bro
|
Pour Confluence, je vais récupérer depuis le dépôt officiel.
Merci pour ton aide.
|
|
|
|
|
Journalisée
|
|
|
|
Fait partie du Décor
Alcoolémie: 12
Messages: 605
Hors ligne
Sexe: 
|
foo = le titi, toto, tata, ... des développeurs
|
|
|
|
|
Journalisée
|
|
|
|
Fait partie du Décor
Alcoolémie: 29
Messages: 4300
Hors ligne
Sexe: 
Breizh ma bro
|
J'arrive à avoir un rendu esthétique en modifiant le fichier settings.xml de l'addon mais je pense que ce n'est pas la bonne solution car le settings.xml devrait servir à paramétrer l'addon et non les options possibles du fichier advancedsettings.xml. Je pense que le settings.xml, et donc la configuration de l'addon, ne devrait avoir que 2 options : - sauvegarder le fichier original d'advancedsettings.xml - sauvegarder la version précédente d'advancedsettings.xml Pour effectuer la configuration graphique des options d'advancedsettings.xml, il faut passer par un fichier WindowXML (je ne sais pas si c'est le nom correct). J'ai donc bidouillé le fichier custom_SkinSetting_1111.xml d'Influence (cf. PJ) pour voir si j'arrive à faire ce que je veux, visuellement dans un premier temps. Je reprend le principe d'un menu à gauche avec les différentes sections et j'ai rajouté en bas de l'écran, un textbox pour y afficher le descriptif de l'option courante.  Mais je n'arrive pas à comprendre comment faire pour que le texte change en fonction de l'item courant. Dans le code original, le texte se récupère avec $INFO[Container(9000).ListItem.Label2] mais ça permet de récupérer le contenu du tag <label2> de l'item courant du bloc menu 9000 donc le menu de gauche. Mais comment faire pour récupérer le <label2> du sous menu de droite affiché ? Est-ce possible ?
|
|
|
|
|
Journalisée
|
|
|
|
Made in Québec
Fait partie du Décor
Alcoolémie: 32
Messages: 4709
Hors ligne
Sexe: 
On est venu, on l'a vu et il l'a eu dans le cul !
|
Mais je n'arrive pas à comprendre comment faire pour que le texte change en fonction de l'item courant. bon je viens de regarder vite fait faut que tu fasse un peut comme le container 9000 ou tu créer plusieurs textbox qui vont être visible seulement quand un control focus ton bouton, sauf ici tu as mis un label2, il y a pas d'infos pour récupérer ce label2 ceci marche pas $INFO[control.getlabel2(100)] seul l'info du 1 va marcher $INFO[control.getlabel(100)] (XML): <control type="radiobutton" id="100"> <width>750</width> <height>40</height> <font>font13</font> <textcolor>grey2</textcolor> <focusedcolor>white</focusedcolor> <label>item 1-1</label> <label2>Descriptif de l'option 1-1</label2> <texturefocus>MenuItemFO.png</texturefocus> <texturenofocus>MenuItemNF.png</texturenofocus> </control>
donc (plusieurs textbox qui vont être visible seulement quand un control focus) (XML): <control type="textbox"> <description>Appearance Description</description> <posx>300</posx> <posy>520</posy> <width>740</width> <height>100</height> <font>font12</font> <label>Descriptif de l'option courante du bouton 100.</label> <align>left</align> <textcolor>white</textcolor> <shadowcolor>black</shadowcolor> <visible>Control.HasFocus(100)</visible> </control>
(XML): <control type="textbox"> <description>Appearance Description</description> <posx>300</posx> <posy>520</posy> <width>740</width> <height>100</height> <font>font12</font> <label>Descriptif de l'option courante du bouton 200.</label> <align>left</align> <textcolor>white</textcolor> <shadowcolor>black</shadowcolor> <visible>Control.HasFocus(200)</visible> </control>
|
|
|
|
|
Journalisée
|
Par Osiris et par Apis regardez moi, regardez moi bien... Par Osiris et par Apis vous êtes maintenant des... des quoi au juste ? Des addoniens ! Vous aimez bien les add-ons vous les Passionnés. Allez on recommence. Par Osiris et par Apis vous êtes maintenant des addoniens... oui... des addoniens... Silennnce, concentrez vous.
|
|
|
Fait partie du Décor
Alcoolémie: 29
Messages: 4300
Hors ligne
Sexe: 
Breizh ma bro
|
OK, j'avais pas pensé à avoir plusieurs textbox dont une seule de visible. Par contre, vu le nombre d'options possible dans le fichier advancedsettings.xml, il va falloir plus d'une centaine de textbox  Il n'y a pas moyen de récupérer le <label2> de l'item courant dans le grouplist ? Le menu de gauche est contenu dans le tag : <control type="list" id="9000"> Il contient 3 items : <content> <item id="1"> <label>Groupe 1</label> <onclick>-</onclick> </item> <item id="2"> <label>Groupe 2</label> <onclick>-</onclick> </item> <item id="3"> <label>Groupe 3</label> <onclick>-</onclick> </item> </content> Donc quand je fais ça dans le textbox : <label>$INFO[Container(9000).ListItem.Label]</label> , je récupère bien Groupe 1 quand je suis sur le premier item et automatiquement, quand je passe sur l'item 2, je vais récupérer Groupe 2 et le textbox va se mettre à jour. Maintenant, mes 2 radiobutton avec les ID 100 et 101 sont contenus dans un grouplist d'ID 9011 avec un : <visible>Container(9000).Hasfocus(1)</visible> Y a pas une syntaxe du style $INFO[Container(9011).ListItem.Label] pour récupérer automatiquement le label de l'item courant du menu 9011 ? Je ne sais pas si c'est très clair mais c'est pas facile à expliquer par écrit.
|
|
|
|
|
Journalisée
|
|
|
|
Made in Québec
Fait partie du Décor
Alcoolémie: 32
Messages: 4709
Hors ligne
Sexe: 
On est venu, on l'a vu et il l'a eu dans le cul !
|
non peut pas, un grouplist est différent d'une liste. si tu veut faire comme tu veux, mais avec un seul textbox donne un id au textbox comme 500 et passe par python pour changer le text dans ta class windowxml il y a une fonction "onFocus(...)" (Python): def onFocus( self, controlID ): if controlID == 100: # radiobutton 100 focus # set le textbox self.getControl( 500 ).reset() self.getControl( 500 ).setText( "Bla bla bla" )
|
|
|
|
|
Journalisée
|
Par Osiris et par Apis regardez moi, regardez moi bien... Par Osiris et par Apis vous êtes maintenant des... des quoi au juste ? Des addoniens ! Vous aimez bien les add-ons vous les Passionnés. Allez on recommence. Par Osiris et par Apis vous êtes maintenant des addoniens... oui... des addoniens... Silennnce, concentrez vous.
|
|
|
Fait partie du Décor
Alcoolémie: 29
Messages: 4300
Hors ligne
Sexe: 
Breizh ma bro
|
Mon dieu que c'est compliqué XBMC, entre le XML, le python, ...
Donc, il faut que je passe par mon default.py, que j'ouvre le fichier XML le chargeant dans une classe windowxml et ainsi, je pourrai interagir via le python entre les différents objet déclarés dans le XML.
C'est ça ?
T'as pas un exemple, un addon qui utilise ce genre de chose ??
|
|
|
|
|
Journalisée
|
|
|
|
Made in Québec
Fait partie du Décor
Alcoolémie: 32
Messages: 4709
Hors ligne
Sexe: 
On est venu, on l'a vu et il l'a eu dans le cul !
|
ouep! c'est un peu ça  tout mes add-ons ou presque marche comme tu veux regarde sur le repo auteur frost  ou les sources http://code.google.com/p/passion-xbmc/source/browse/trunk/addonsen attendant je vais réfléchir lequel dans tous ça est le plus simple 
|
|
|
|
|
Journalisée
|
Par Osiris et par Apis regardez moi, regardez moi bien... Par Osiris et par Apis vous êtes maintenant des... des quoi au juste ? Des addoniens ! Vous aimez bien les add-ons vous les Passionnés. Allez on recommence. Par Osiris et par Apis vous êtes maintenant des addoniens... oui... des addoniens... Silennnce, concentrez vous.
|
|
|
Fait partie du Décor
Alcoolémie: 29
Messages: 4300
Hors ligne
Sexe: 
Breizh ma bro
|
Je suis en train d'éplucher ton addon TouTV. Donc, ton écran est défini dans le fichier resources\skins\Default\720p\toutv-carrousel.xml Dans le default.py à la racine de l'addon, tu importes la classe Main et tu l'instancies. On doit donc passer par la méthode __init__ de la classe Main mais je vois pas comment, dans ton code, tu peux utiliser viewtype alors qu'il est déduit plus haut et qu'il est normalement passé en paramètre à Main(). Après, je comprends plus rien. class Main( viewtype ): def __init__( self ): viewtype.__init__( self )
self.args = Info() self.watched = getWatched()
if self.args.isempty(): self._add_directory_root()
self, c'est bien l'objet lui-même donc self._add_directory_root() fait appel à la méthode _add_directory_root() de l'objet Main. Mais dans cette méthode, tu fais appel à : self._add_directory_items( listitems ) Or, je suppose que self ne fait plus référence à l'objet Main mais à l'objet soit GuiView soit à PluginView car Main n'a pas de méthode _add_directory_items, contrairement aux 2 autres. Ce qui serait super, c'est que tu puisses écrire un pauvre petit addon, qui fait vraiment le minimum : - un écran de settings avec une ou 2 valeurs - un default.py qui ouvre une fenêtre définie par un XML et qui permet d'interagir avec le contenu de cette fenêtre par python.  Avec ça, je pourrais faire 2 choses : - comprendre cette foutue logique XBMC  - faire un tuto pour que tous les newbies  comme moi puissent s'y coller plus rapidement. Je crois que je vais déjà en faire un avec ce que j'ai compris en modifiant l'addon AdvancedSettings Editor.
|
|
|
|
|
Journalisée
|
|
|
|
Made in Québec
Fait partie du Décor
Alcoolémie: 32
Messages: 4709
Hors ligne
Sexe: 
On est venu, on l'a vu et il l'a eu dans le cul !
|
oula!  Tu embarque dans advanced coding la class main hérite ma class viewtype qui peut être du xbmcplugin ou xbmcgui. c'est special comme add-on et pas grand monde qui travail comme ça  donc cette méthode me donne une superclass. moi j'appelle ça comme ça, mais en language python c'est plus détailler  regarde plutôt l'add-on "xbmc helper" http://passion-xbmc.org/addons/?Page=View&ID=xbmc.site.helperIl est déjà comme tu veux, il manque juste tes radio button et faire un textbox. Et je vais tenté de faire un exemple simple en python pour régler ton xml. je vais reprendre mes explications de ce poste avec le code "xbmc helper" bon vais arrêter le blabla et aller voir ça  pour de la doc ici http://passion-xbmc.org/index.php?page=pythonet la http://passion-xbmc.org/documentation-python/plus http://passion-xbmc.org/documentation-python/code-snippet-%28exemples%29/
|
|
|
|
|
Journalisée
|
Par Osiris et par Apis regardez moi, regardez moi bien... Par Osiris et par Apis vous êtes maintenant des... des quoi au juste ? Des addoniens ! Vous aimez bien les add-ons vous les Passionnés. Allez on recommence. Par Osiris et par Apis vous êtes maintenant des addoniens... oui... des addoniens... Silennnce, concentrez vous.
|
|
|
Made in Québec
Fait partie du Décor
Alcoolémie: 32
Messages: 4709
Hors ligne
Sexe: 
On est venu, on l'a vu et il l'a eu dans le cul !
|
dit mike, sur le menu de droite! va tu mettre juste des radiobutton ? si oui je vais prendre une autre direction dans l'exemple, plutot semi-demo 
|
|
|
|
|
Journalisée
|
Par Osiris et par Apis regardez moi, regardez moi bien... Par Osiris et par Apis vous êtes maintenant des... des quoi au juste ? Des addoniens ! Vous aimez bien les add-ons vous les Passionnés. Allez on recommence. Par Osiris et par Apis vous êtes maintenant des addoniens... oui... des addoniens... Silennnce, concentrez vous.
|
|
|
Fait partie du Décor
Alcoolémie: 29
Messages: 4300
Hors ligne
Sexe: 
Breizh ma bro
|
Majoritairement, ça sera des radiobutton car les settings sont souvent des True / False
Mais il faudra aussi pouvoir éditer certains settings (genre saisir une adresse IP, un nom de base, un user, un password, ...) donc il faudra pouvoir faire appel à l'éditeur de texte.
Genre, dans le menu d'Influence, quand on veut éditer les menus et sous-menus, on peut éditer le nom de l'item.
Ca te complique la tâche ?
|
|
|
|
|
Journalisée
|
|
|
|
Made in Québec
Fait partie du Décor
Alcoolémie: 32
Messages: 4709
Hors ligne
Sexe: 
On est venu, on l'a vu et il l'a eu dans le cul !
|
Majoritairement, ça sera des radiobutton car les settings sont souvent des True / False
Mais il faudra aussi pouvoir éditer certains settings (genre saisir une adresse IP, un nom de base, un user, un password, ...) donc il faudra pouvoir faire appel à l'éditeur de texte.
Genre, dans le menu d'Influence, quand on veut éditer les menus et sous-menus, on peut éditer le nom de l'item.
Ca te complique la tâche ?
un petit peu  mais rien de problématiques Faut juste que je réfléchisse sur les properties en gros je vais te faire comme tu as fait. sauf que je vais remplacer tes radiobuttons par un liste unique, un peu comme dans tvtunes  Comprendre le paramétrage d'un skin donc dans le xml tu va avoir 2 ou 3 control list et un textbox. Sauf que donne moi quand même la journée  en soirée Québec Time je devrais avoir fini
|
|
|
|
|
Journalisée
|
Par Osiris et par Apis regardez moi, regardez moi bien... Par Osiris et par Apis vous êtes maintenant des... des quoi au juste ? Des addoniens ! Vous aimez bien les add-ons vous les Passionnés. Allez on recommence. Par Osiris et par Apis vous êtes maintenant des addoniens... oui... des addoniens... Silennnce, concentrez vous.
|
|
|
|