J’ai avancé et j’ai essayé (proverbialement jeter des nouilles mouillées pour voir ce qui colle). Mais j’étais déjà appréhensif et @simon a raison.
Idéalement, le plugin serait également disponible sur mobile. Mais pour l’instant, si le bureau uniquement est ce que nous obtenons, c’est ce que nous obtenons.
Bien sûr, une autre solution pourrait être : Obsidian Vault sur mobile → synchronisation vers le bureau → cli pour télécharger sur Discourse. Mais cela semble un peu compliqué.
Fondamentalement, la situation idéale est que le forum Discourse remplace l’Obsidian Vault. De cette façon, les utilisateurs qui préfèrent le forum peuvent utiliser le forum. Les utilisateurs qui préfèrent (ou ont en fait besoin d’une solution hors ligne) peuvent utiliser Obsidian. J’ai déjà quelques idées sur la façon dont une synchronisation bidirectionnelle pourrait fonctionner. Mais je pense que les images/fichiers doivent d’abord être gérés d’une manière ou d’une autre.
Modifier :
Je suis assez convaincu que cela fonctionnera, mais je n’arrive pas à obtenir les bons paramètres :
try {
const imgfile = await this.app.vault.readBinary(file);
const boundary = genBoundary();
const sBoundary = '--' + boundary + '\r\n';
let body = '';
body += `${sBoundary}Content-Disposition: form-data; name=\"type\"\r\n\r\ncomposer\r\n`;
body += `${sBoundary}Content-Disposition: form-data; name=\"synchronous\"\r\n\r\ntrue\r\n`;
body += `${sBoundary}Content-Disposition: form-data; name=\"files[]\"; filename=\"${file.name}\"\r\nContent-Type: image/jpg\r\n`;
const eBoundary = '\r\n--' + boundary + '--' + '\r\n';
const bodyArray = new TextEncoder().encode(body);
const endBoundaryArray = new TextEncoder().encode(eBoundary);
const formDataArray = new Uint8Array(bodyArray.length + imgfile.byteLength + endBoundaryArray.length);
formDataArray.set(bodyArray, 0);
formDataArray.set(new Uint8Array(imgfile), bodyArray.length);
formDataArray.set(endBoundaryArray, bodyArray.length + imgfile.byteLength);
const url = `${this.settings.baseUrl}/uploads.json`;
const headers = {
"Api-Key": this.settings.apiKey,
"Api-Username": this.settings.disUser,
"Content-Type": `multipart/form-data; boundary=${boundary}`
};
const response = await requestUrl({
url: url,
method: "POST",
body: formDataArray,
throw: false,
headers: headers,
});
if (response.status == 200) {
const jsonResponse = response.json();
console.log(`Upload Image jsonResponse: ${JSON.stringify(jsonResponse)}`);
imageUrls.push(jsonResponse.url);
} else {
new NotifyUser(this.app, `Error uploading image: ${response.status}`).open();
console.error(`Error uploading image: ${JSON.stringify(response.json)}`);
}