Lecteur de comic book

J'écris depuis quelques semaines une application web pour lire les comic books au format numérique, c'est-à-dire une collection d'images sous forme d'archive zippée. Quelques notes en vrac sur les problématiques de développement

Pourquoi un telle application ?

Limite de la lecture sur pc / portable

J'ai lu pendant des années les bédés numériques avec Evince, logiciel gnome pour lire les pdfs mais qui se charge parfaitement bien des formats cbz & co. Mais ce n'est pas toujours très agréable ou confortable de lire sur pc ou sur portable ; liseuse ou tablette sont des outils mieux adaptés.

Limites des montages réseaux nfs / samba

Les bédés sont stockés sur un disque dur branché à la raspi et partagées sur le réseau local via NFS et/ou samba. Aucune difficulté donc a priori d'y accéder sur une tablette sauf que cela restait plutôt pénible de lire une bédé sur la tablette androïd : obliger d'avoir un partage samba actif et de télécharger la bédé sur la tablette (tablette que j'ai définitivement abandonné). Il était même impossible de lire avec la tablette Ubuntu.

Limite de l'application web de Calibre

La solution à ces problèmes paraissait évidente : pour pouvoir lire simplement des bédés sur ma tablette, une application web pourrait faire l'affaire. je me suis alors tourné vers Calibre, logiciel de gestion de bouquins qui possède une serveur web capable de rendre accessible sur le réseau les bibliothèques qu'il gère. Je l'utilise déjà pour les ebooks ; je pouvais aussi l'utiliser pour les bédés...

Sauf que, outre l'ergonomie de l'application qui ne me plait guère, Calibre force l'organisation des contenus dans une hiérarchie de dossiers strictes :

<auteur> / <titre> (id) / fichier

Une structure parfaitement valide et justifiable (1) dans le cadre de Calivre et (2) pour la gestion de bouquins qu'on classe effectivement le plus souvent par leurs auteurs. Mais pour les bédés, le classement se fait plutôt par série :

<serie> / <arc?> / fichiers

En tous cas c'est comme ça que je range les miennes et je n'avais pas vraiment envie de changer.

Écrire sa propre application web de lecture de bédé

Il ne restait donc plus qu'une seule solution si je voulais pouvoir lire des bédés sur la tablette : écrire ma propre application web.

Le navigateur de ubport (Ubuntu Touch)

Comme le but c'est avant tout de pouvoir lire des comic books sur ma tablette ubuntu, faut bien que l'application web tourne sur son navigateur web. Très peu d'informations sur ce logiciel si ce n'est qu'il est basé sur webkit. Donc, en plus de l'usage d'un polyfill pour les composants web, il a fallu faire quelques compromis :

lire des archives cbz

La fonction principale de l'application est bien-sûr de lire des bédés au formats numériques : des archives `cbz`, qui sont simplement des zip classiques. Il existe d'autres formats mais je ne m'en occuperais pas (sérieusement : pourquoi les gens utilisent encore rar ?). J'ai testé deux librairies de lecture/écriture d'archives zip :

  • JSZip, que je connais depuis des années et qui me semblait être l'outil idéal.
  • zip.js, que j'ai découvert à l'occasion de ce dev et qui a finit par me plaire le plus.

benchmarks...

Stratégies de lecture

A écrire...

Stockage des images avec indexedDB

Si on ne dézippe pas côté serveur, une archive cbz d'une cinquantaine de Mo peut être un peu longue à dézipper / transformer en liste d'images côté navigateur (quelques secondes)

A écrire...

Chargement peut prendre du temps. D'où l'idée de stocker les images dans le navigateur. Localstorage est limité, donc utilisation de IndexedDB.

Node.js sur la raspi

Installer node.js sur la raspi n'a absolument rien de compliqué :

sudo apt install nodejs