Une extension I7 pour télécharger des fichiers avec Vorple

Corax l’a demandé, je l’ai fait ! Une extension qui permet de télécharger des fichiers ou de les uploader. Ça utilise le système de fichier d’Inform 7, comme ça c’est plus facile d’interagir avec les fichiers directement depuis Inform.

Exemple d’utilisation :

[code]The File of Tests is called « tests ».

After reading a command:
if the player’s command matches « download »:
download the file of Tests;
else if the player’s command matches « upload »:
ask to upload a file to the file of Tests.[/code]
(Évidemment, il faut du code quelque part qui écrit quelque chose dans le fichier.)

Pour le téléchargement, on peut aussi spécifier le nom du fichier et son type MIME, ainsi que si on veut supprimer l’en-tête ajouté par Inform (par exemple si on veut télécharger un fichier HTML ou CSV valide).

Pour l’upload, on peut aussi spécifier le type MIME attendu. En revanche, ça ne fait pas de vérifications sur la structure du fichier, donc ça peut le rendre illisible et non modifiable par Inform si le fichier uploadé n’a pas l’en-tête. Il est prévu que l’extension puisse ajouter cet en-tête automatiquement, mais ce sera fait plus tard.

Rien n’est documenté pour l’instant, mais c’est prévu également. J’ai fait ça plus comme preuve de concept. Je ne garantis donc rien sur la qualité de mon JavaScript.

Enfin, l’extension devrait fonctionner avec des fichiers binaires (qu’Inform ne peut pas manipuler par défaut), donc ça permettrait de télécharger les sauvegardes faites par mon extension de sauvegarde automatique, mais je n’ai pas testé.

On peut trouver l’extension ici. Ça s’appelle Vorple File Control.

EDIT : J’ai oublié de dire que je n’ai testé qu’avec Firefox. Ça devrait cependant fonctionner avec n’importe quel navigateur récent. Ça peut ne pas fonctionner avec des navigateurs anciens, et je n’ai aucune idée du fonctionnement sur mobile (mais je ne sais pas à quel point Vorple fonctionne bien sur mobile de toute façon).

Mais c’est super, ça, Natrium ! :slight_smile:

Sois certain que dès que je suis sur le chapitre sauvegarde de la Boussole des Brumes, je me servirai de cette extension et te ferai des retours.
D’ici là, je vais garder un œil sur ce qui se dit ici.

En attendant, juste une petite question : est-il possible d’utiliser ton extension en combinaison avec la sauvegarde classique d’Inform ?

J’ai une question vraiment très bête : ça sert à quoi ?

@Corax
Qu’entends-tu par « classique » ? Comme le fonctionnement de Vorple pour ce qui est des sauvegardes ne fonctionnent pas très bien, le mieux pour le moment est d’utiliser mon extension pour créer des fichiers de sauvegarde manuellement et de remplacer l’action sauvegarder et charger d’Inform. Quand ça fonctionnera mieux du côté de Vorple, je pourrais ajouter la fonctionnalité.

@StephaneF
Avec Inform, on écrit du texte ou une table dans un fichier. Ensuite, le joueur peut télécharger le fichier et le réuploader lors d’une autre partie un autre jour pour restaurer des données. C’est pas utile pour un interpréteur normal puisqu’il suffit de récupérer le fichier directement sur son ordinateur, mais comme Vorple est en ligne, les fichiers externes d’un jeu sont stockés dans un endroit qui peut être facilement être effacé (quand on efface l’historique de son navigateur par exemple).

Et puis ça peut permettre d’écrire des « applications » Inform, qui génèreraient des fichiers comme des CSV qui peuvent être importés dans Excel par exemple.

Ok, merci :slight_smile:

Ah oui, il y a aussi une autre utilité : faire apprendre le JavaScript à Natrium. Pour l’instant ça marche pas mal ! :wink:

@Natrium : en fait, je me demandais s’il était possible de coupler ton extension au système de sauvegarde classique de Vorple. Au lieu qu’il dirige/charge les données depuis ces fameux fichiers temporaires pas fiables, il les dirige/charge depuis les fichiers externes de ton extension.

Mais je demande juste ça par curiosité, pas pour mon projet actuel.
Pour ce dernier, je compte toujours coder le système de sauvegarde qui, avec ton extension, ne sera plus limité à 254 caractères puisque je pourrai exploiter autant de texte que je veux via un fichier externe.

Salut Natrium,

Je commence à aborder des aspects, dans mon projet, qui impacte la manière de sauvegarder la partie. Aussi je reviens ici pour savoir si la version de ton extension que tu proposes au téléchargement est bien la dernière.

Je suis aller regarder la documentation d’Inform7 au sujet de la manière de lire et d’écrire dans un fichier (23.12 à 23.14) et je me rends compte que le plus simple, c’est probablement de passer par un tableau à injecter dans/à alimenter par un fichier.
Il ne me semble pas avoir trouvé la manière de lire ligne par ligne le fichier et donc de faire des procédure d’interprétation complexe, il faut d’abord tout rapatrier dans Inform. Je me trompe ou pas ?

Dernière petite question, toute bête celle-là. Quand, dans l’exemple que tu donnes au niveau de ton premier message, tu mets download et upload, c’est du point de vue de l’utilisateur ou du jeu ? Download permet d’envoyer le fichier à l’utilisateur ou au jeu ?

Voilà, voilà !

Je n’ai pas retravaillé sur le code depuis, donc ça n’a pas changé. Il n’y a pas non plus de documentation, j’essaierai de le faire quand j’aurai un peu de temps.

« Download », c’est pour que le joueur télécharge, et « upload », c’est pour que le joueur envoie un fichier (c’est pour ça que c’est « ask to upload », car on ne fait que demander, le joueur peut annuler).

Je ne suis pas sûr de comprendre ce que tu veux. Si tu veux faire ta propre analyse, il faut écrire du texte dans le fichier, pas un tableau. Mais le tableau, c’est quand même plus pratique. On peut aussi analyser le contenu d’un fichier avec du JavaScript plutôt qu’avec Inform (qui serait vraisemblablement plus lent, en plus) ; dans ce cas, on n’est plus obligé de rapatrier le fichier dans Inform, mais mon extension ne fonctionne qu’avec le système de fichiers d’Inform. Il faudrait que tu regardes le code JS utilisé pour l’upload pour remplacer la partie qui écrit le fichier par une partie qui l’analyse. Mais ce serait un peu inutile puisqu’il faudrait ensuite trouver un moyen de communiquer à Inform les analyses, et la façon la plus facile est d’utiliser un fichier externe. Donc autant directement utiliser le fichier.

Merci Natrium.
Je vais me pencher là-dessus. L’extension devrait bien me faciliter la vie, m’épargnant l’étape du cryptage/décryptage, ainsi que les limitations dû à la taille du champ de saisie.

Salut Natrium,

Ton extension marche bien. Je l’ai incluse dans la Boussole des Brumes et codé l’essentiel des procédures pour sauvegarder/charger la partie.

J’aurais néanmoins une petite demande. Peux-tu apporter une petite modification à l’extension ? Il serait très pratique d’avoir un truth state, de portée globale, qu’on pourrait interroger dans le cadre du chargement d’un fichier. False = fichier pas chargé, true = fichier chargé avec succès. J’ai vu que tu avais indiqué ça via une span, mais c’est quand même moins pratique.

Si tu ne peux pas, pas grave, mais sinon, merci d’avance.

Ravi de savoir que ça fonctionne. Je note ta demande et le ferai dès que possible

Tu veux une variable qui indique si le joueur a cliqué sur annuler lors de la dernière demande d’envoi de fichier ? ça devrait être faisable. Le truc, c’est qu’on ne peut pas détecter si le joueur a cliqué sur annuler, alors la variable sera mise à faux juste avant la demande de fichier. Vrai signifiera que le fichier a été envoyé, et faux tout le reste (que ce soit un clic sur annuler ou tout autre problème possible).

C’est ça, Natrium. Vrai, le fichier a été envoyé, faux pour tout le reste.

Me revoilà, Natrium.

On vient de me rapporter que charger le fichier ne fonctionnait pas sur Mac OS, avec Safari. Le navigateur était à jour. Peux-tu y faire quelque chose ?

Mon Mac a lâché, et je suis sur Windows maintenant, donc je ne pourrai pas tester. Je peux quand même essayer d’investiguer, mais je ne promets rien.

Pourrais-tu préciser ce qui ne fonctionne pas ? Est-ce que que c’est le dialogue qui ne s’ouvre pas, ou bien le fichier qui n’est pas envoyé quand on clique sur OK, ou autre chose ?

Je vais demander des précisions mais il me semble que c’est la fenêtre qui ne s’ouvre pas.

Salut Natrium,

Concernant le problème sur Mac OS, avec Safari, c’est bien la fenêtre qui ne s’ouvre pas.
J’espère que tu pourras y remédier. Cela et le truth state pour savoir si le fichier a bien été chargé, ce qui rendra les procédures plus aisées à coder dans le cadre de la Boussole des Brumes.

Voilà, voilà !

Alors pour le problème de la fenêtre de dialogue qui ne s’ouvre pas, je crois que ça vient du navigateur (pour des raisons de sécurité, certains décident qu’on ne peut pas ouvrir automatiquement de dialogues pour envoyer des fichiers, tout ça). Une solution serait d’afficher un bouton que l’utilisateur cliquerait pour ouvrir la fenêtre, mais ça pose quelques problèmes.

Si le joueur ne clique pas, alors il peut continuer à jouer sa partie, puis remonter dans la fenêtre et envoyer le fichier à un moment non prévu par le jeu, ce qui pourrait causer des bugs.

Une solution serait de supprimer le bouton de la page après que le joueur a envoyé sa commande suivante. Oui, je pense que ça pourrait fonctionner. J’y réfléchirai un peu plus, et je ferai les modifications demandées la semaine prochaine au plus tard.

Une dernière remarque quant à un problème que tu avais soulevé lors de ton interview (très constructive en passant) : tu as mentionné que c’est dommage que Vorple ne fonctionne qu’en ligne. Il se trouve qu’il est possible d’empaqueter ton jeu avec Vorple dans une application pouvant se lancer hors-ligne avec une framework nommé Electron. Dans ce cas-ci, l’extension n’est plus utile, car on peut utiliser les fonctionnalités d’Electron. Je dis ça comme ça, je suis encore en train d’apprendre à utiliser Electron, mais il se peut que je fasse des extensions relatives à ça plus tard.

Electron ? Dire que ça m’intéresse serait un euphémisme. Le jeu en local est bien plus pratique, que ce soit pour la sauvegarde ou le temps de chargement des fichiers. De surcroît, la distribution serait impacté positivement. Merci pour cette nouvelle. :slight_smile:

Concernant sinon le bouton que tu mentionnes, à mon niveau, puisque je reconstruits l’écran après chaque action du joueur, aucun risque qu’il puisse être utilisé hors contexte.