Merci pour la réponse rapide @martin .
Oui, nous hébergeons chez vous. Donc, ce qui se passe habituellement lorsque vous faites glisser un fichier dans le compositeur, c’est qu’il insère du texte dans le compositeur, du genre « Traitement de <nom_du_fichier> »… De plus, dans le cas de l’utilisation de API.addComposerUploadHandler([« mp4 », « mov », « mkv », « avi », « m4v »]), cela est fait par Discourse avant de transmettre le fichier au gestionnaire personnalisé ici. Cette insertion de texte d’espace réservé a cessé de fonctionner à un moment donné, c’est à ce moment-là que j’ai inséré le code moi-même dans mon gestionnaire :
composerController.model.appEvents.trigger("composer:insert-block", `[Traitement : ${file.name}...]()`);
La chose suivante qui s’est cassée, c’est que notre gestionnaire ne s’est pas déclenché car, soudainement, ces extensions vidéo avaient disparu du paramètre « extensions autorisées par le thème » - ou j’ai dû les rajouter là pour que les choses recommencent à fonctionner.
Ensuite, j’ai découvert le problème du dépôt de fichiers « multiples », comme décrit précédemment.
Nous avions cela fonctionnant d’une manière telle que je pouvais déposer 2+ fichiers sans messages d’erreur. Et cela semblait également correct car nous contournions toute cette logique de validation de Discourse.
Voici des extraits de code pertinents :
Ici, je m’attends simplement à ce que Discourse me transmette les fichiers déposés. Un par un.
// Enregistre un gestionnaire de téléchargement personnalisé pour les vidéos.
api.addComposerUploadHandler(["mp4", "mov", "mkv", "avi", "m4v"], (file, editor) => {
console.log("Gestion du téléchargement pour", file.name);
sendToGDrive(file, api);
})
Comme Discourse nous transmettait les fichiers individuellement, j’ai créé une fonction intermédiaire qui remplit simplement un tableau et, après un délai, déclenche la fonction de téléchargement réelle. Je collecte donc le fichier transmis par Discourse dans mon propre tableau.
// Collecte tous les fichiers déposés en séquence - tels que rapportés par le gestionnaire Discourse.
function sendToGDrive(file, api) {
clearTimeout(uploaderStartTimeout);
filesHolder.push(file)
const composerController = api.container.lookup("controller:composer");
composerController.model.appEvents.trigger("composer:insert-block", `[Traitement : ${file.name}...]()`);
uploaderStartTimeout = setTimeout(function () {
initFileSend(api);
}, 300);
}
Ensuite, je télécharge chaque fichier individuellement sur Gdrive.
// Gère chaque fichier individuellement.
async function initFileSend(api) {
for (const file of filesHolder) {
const content = await sendFileToGdrive(file, api, uploadFolderId);
}
}
Problèmes observés :
- Les dépôts de « fichiers multiples » provoquent une validation de la taille du fichier alors que les dépôts de fichiers uniques n’en provoquent pas.