Bonjour à tous,
Ce composant permet à vos utilisateurs d’ajouter des modèles 3D à leurs messages en utilisant le composant Google model viewer. J’ai créé ce composant pour permettre aux utilisateurs de mon SaaS de photogrammétrie Beholder de partager les modèles qu’ils créent sur notre tout nouveau forum Discourse et j’ai pensé le partager ici au cas où il serait utile à d’autres. Je n’ai pas vu d’autre composant similaire, mais je n’ai fait qu’une recherche très rapide…
Les instructions et les captures d’écran montrant comment utiliser le composant sont ci-dessous.
Vos commentaires ou réflexions sur ce composant sont très appréciés. Le composant model viewer que j’utilise pour afficher les modèles a beaucoup de fonctionnalités, il y a donc probablement beaucoup de possibilités d’étendre ce composant en exposant certaines de ces fonctionnalités aux utilisateurs. J’ai créé ce composant en copiant, collant et modifiant les composants insert video et mermaid donc j’apprécierais vraiment si quelqu’un ayant plus d’expérience dans l’écriture de composants Discourse pouvait jeter un œil au code et me faire savoir quelles erreurs j’ai commises.
Cordialement
Alan
Utilisation
Une fois le composant installé, les utilisateurs pourront ajouter des modèles 3D à leurs
messages en cliquant sur la nouvelle icône de cube dans la composition.
Actuellement, le visualiseur 3D ne téléchargera pas et n’affichera pas le modèle 3D immédiatement. Il affichera plutôt une affiche (qui peut être personnalisée) et ne chargera le modèle que lorsque l’utilisateur cliquera sur le bouton « Charger le modèle 3D ». L’idée derrière cela est d’aider les utilisateurs ayant une bande passante limitée.
Vous devrez également probablement augmenter la limite de taille maximale des pièces jointes.
C’est probablement la principale limitation pour utiliser ce composant sur Discourse hébergé car, dans les plans d’abonnement inférieurs, la taille maximale est limitée à 30 Mo. Pour être juste, vous ne voudrez probablement pas que vos utilisateurs téléchargent des fichiers volumineux et les fichiers .glb et .gltf peuvent être considérablement réduits en taille s’ils sont générés par un programme qui prend en charge la compression de maillage Draco.
Merci, cela a fonctionné pendant quelques jours, mais maintenant le bouton de chargement ne fonctionne plus (testé sur Firefox, Chrome et Firefox mobile)
Oh non ! Ce n’est pas bon. Merci de m’avoir prévenu.
La même chose s’est produite sur mon forum. En regardant le message, je pense que ce qui s’est passé, c’est qu’après quelques jours, Discourse a décidé que l’image de l’affiche téléchargée et le modèle 3D n’étaient plus nécessaires, il les a donc supprimés du serveur.
J’ai ‘réparé’ cela temporairement sur mon site en téléchargeant à nouveau le modèle et l’affiche, mais je vais maintenant lire la documentation des thèmes Discourse pour voir si je peux le réparer correctement. D’après le rapide coup d’œil que j’ai jeté en écrivant le composant de thème, la documentation indique que tant qu’un actif est référencé par un message, il sera conservé sur le serveur, mais évidemment, les URL que ce composant insère dans le message ne font pas cela pour une raison quelconque. Si un autre développeur de plugin peut offrir des conseils à ce sujet, ce serait très apprécié…
Ouais, ma théorie actuelle est que lorsque je crée le markdown pour référencer le visualiseur de modèles, alors d’une manière ou d’une autre, l’URL du modèle téléchargé n’est pas sous la forme correcte pour la logique qui analyse les publications pour reconnaître les téléchargements utilisés.
Actuellement, j’examine 2 autres endroits dans Discourse où des fichiers sont téléchargés. Dans la fenêtre modale de téléchargement d’images/fichiers, une référence est conservée à une « short_url » qui a la forme upload:// plutôt que l’URL finale qui sera utilisée par le navigateur pour télécharger la ressource. Alors peut-être que je devrai comprendre comment l’utiliser ? Alternativement, le composant GitHub - discourse/discourse-insert-video, sur lequel j’ai basé mon composant, utilise directement l’URL de la ressource. Soit ce composant souffre du même bug (peu probable :)), soit ces URL sont reconnues parce qu’elles sont insérées dans le message markdown sous forme de balises HTML (je ne peux pas le faire avec la balise model-viewer car elle ne figure pas sur la liste blanche des balises HTML).
C’est ma réflexion actuelle, ou cela pourrait être tout autre chose. Maintenant, je vais voir si je peux trouver le code qui identifie les téléchargements orphelins sur un site Discourse…
Désolé pour le délai de ma réponse. J’étais pris par du travail en contrat la semaine dernière.
Enfin, je viens de relire la question et je pense avoir identifié le code qui détermine si un fichier téléchargé est conservé ou supprimé. Dans le code côté serveur qui traite les messages, il existe une routine appelée ‘each_upload_url’ qui génère une liste des fichiers téléchargés référencés dans un message.
Je ne suis pas développeur Ruby, mais d’après ce que je comprends, le code recherche les URL référencées par une liste prédéfinie de balises HTML. Ainsi, pour le composant de thème “Insert Video” que j’ai copié, l’attribut src de tout élément HTML <source> est reconnu comme un téléchargement, et l’attribut poster de tout élément HTML <video> est également reconnu comme un téléchargement. En revanche, pour mon composant “Insert Model 3D”, la balise HTML <model-viewer> n’est pas dans cette liste, donc les ressources qu’elle référence ne sont pas reconnues comme des téléchargements et seront donc purgées après quelques jours.
La solution à long terme consisterait peut-être à modifier le code côté serveur afin que les attributs de <model-viewer> soient reconnus comme des sources de téléchargements, mais je pense qu’il est également possible de contourner le problème pour l’instant en ajoutant explicitement des balises HTML <a> pointant vers les téléchargements.
Je vais poster dans la catégorie Contribute > Bug pour vérifier que ma compréhension est correcte, mais au cas où elle le serait, j’ai soumis une correction au composant de thème Insert Model 3D qui ajoute des balises <a> cachées dans le message, faisant référence au modèle téléchargé et à l’image de couverture. @patrickemin, si vous avez un moment, pourriez-vous vérifier si cela résout le problème pour vous ? Vous devrez mettre à jour le composant, puis réimporter tous les assets 3D qui ont été purgés.
Alan, je ne sais pas si cela résoudra l’énigme, mais cela nous a affectés par le passé en raison de bugs dans ce domaine.
Les téléchargements orphelins sont supprimés périodiquement. Dans le cadre d’un téléchargement, vous devriez obtenir une entrée dans la table uploads. Si, pour une raison quelconque, elle est manquante, le téléchargement sera éventuellement supprimé.
Cela pourrait être une piste à explorer.
Pour vérifier le modèle Upload, vous pouvez accéder à la console Rails depuis le répertoire Discourse et, par exemple :
Ah, c’est bon à savoir, merci Robert. Savez-vous s’il est possible d’effectuer cette vérification ou quelque chose d’équivalent sur Discourse hébergé ? Je suppose que non, donc @patrickemin, si votre serveur est auto-hébergé, cela pourrait être une bonne chose à vérifier.
Alternativement, j’ai une configuration locale de Discourse basée sur Docker sur laquelle je travaillais jusqu’à ce que j’abandonne et que je me tourne vers Discourse hébergé. Cela pourrait être une bonne excuse pour y revenir.
Quelque chose que vous devriez signaler au support.
Mais s’il est clair que cela arrive à plusieurs utilisateurs, cela vaut la peine d’enquêter sur une instance auto-hébergée avant de soumettre un ticket, je suppose.
Salut, me revoilà après quelques mois… J’ai profité de la sortie du modèle Copilot 2D vers 3D de Microsoft pour tester et votre TC fonctionne maintenant bien, avec le code ajouté le modèle ne devrait plus disparaître, voir ici.