Développement connecteur avec factures HTML


#1

Bonjour,

Ça fait un petit moment que je suis Cozy (plutôt dans l’ombre) et avec la sortie de la nouvelle version, je me suis décidé à apporter ma petite pierre en développant quelques connecteurs pour les services que j’utilise et qui ne sont pas encore présent (Netflix et Spotify pour commencer).

J’ai globalement réussi à avoir les informations que je voulais, mais il me reste un dernier problème que je n’arrive pas à résoudre : les factures. Ces deux services proposes les factures sous forme HTML (et encore chez Spotify, je sais pas si on peut appeler ça une facture… :laughing:). Le problème c’est que je préfèrerai récupérer une version PDF, il y a bien des bibliothèques qui me permettrait de le faire (i.e. https://www.npmjs.com/package/html-pdf) mais du coup j’ai un problème avec l’API de cozy-konnector-libs qui a besoin d’une URL pour sauvegarder le fichier (saveFiles).

Bref je me demandais s’il y avait une solution… J’ai rapidement regardé sur quelques autres connecteurs mais tous semble gérer des fichiers PDF.


#2

Hello @toobian,

Bienvenue à bord :slight_smile:

:fireworks:Que mil nuages chantent tes louanges !!!:fireworks:

Pour te répondre, j’invoque le dieu des connecteurs : ô @doubleface, es-tu des nôtres ?


#3

Je suis également intéresssé par la réponse, https://theoldreader.com ayant également des “factures” html :slight_smile:
Est-ce qu’une surcharge prenant des streams plutôt que des urls serait envisageable ?


#4

Bonjour à tous, excellente nouvelle!

Oui, il est possible de sauver des fichiers sous forme de stream mais pas avec l’aide de saveFiles ou saveBills malheureusement. (Il me semble d’ailleurs que ce ne serait pas une énorme évolution, j’ai ajouté une issue dans cozy-konnector-libs).

Mais pour une solution à ton problème à court terme, tu vas devoir utiliser directement cozyClient

D’ailleurs, si tu regardes le code saveFiles, lorsqu’il y a un attribut fileurl, on crée un stream avec request-promise et on le passe directement à cozy.files.create.

Dis moi si ça te suffit pour t’en sortir, sinon, je pourrais essayer de bricoler un code d’exemple.


#5

Merci pour la réponse, je vais partir sur cozy.files.create pour le moment.


#6

Petite update pour ceux qui souhaiteraient un exemple, j’ai enfin fini la première version de mon connecteur et l’utilisation de cozy.files.create est visible ici.


#7

Encore un update, ma PR sur cozy-konnector-libs a été mergée hier, du coup saveFiles gèrera bientôt nativement les streams :slight_smile:


#8

Je suis presque tenté d’ouvrir un compte payant chez theoldreader juste pour tester. @laedit, tu peux nous montrer ce que donne le pdf en question en terme de rendu ?


#9

@doubleface suite à tes retours, je suis en train de changer la génération pour utiliser PDFjs (moins lourd en terme de dépendances mais gère les tables contrairement à PDFKit).
Il me reste encore à parser la facture HTML pour récupérer les données, mais en terme de design ça devrait ressembler à ça (l’image n’est pas nette mais je n’arrive pas à faire mieux pour le moment).


#10

Ca me semble nickel!


#11

Par contre j’ai remarqué que l’utilisation de filestream pose problème dans l’utiilisation de saveBills et plus particulièrement de addData en environement standalone ou test (pas pu vérifier sur une vraie stack cozy pour le moment) à cause de cozy-client-js-stub.js : dans son stub de data.create, il créé un uuid à partir de l’item via JSON.stringify, hors l’item comprenant un stream au travers de l’attribut filestream cela lève une erreur.

Faudrait-il que saveFiles supprime l’attribut filestream après utilisation pour éviter tout problème ?