====== Cahier des Charges ====== ===== Introduction ===== Virtual Comics Library (abrégé VCL) est une application qui permet de gérer et consulter une bibliothèque de bandes dessinées virtuelles. ==== Terminologie ==== * **Volume :** Elément le plus petit dans la bibliothèque, Représente son équivalent physique (ensemble de pages reliées). Correspond à un fichier .cb* sur le système de fichiers. * **Série :** Ensemble de volumes et métadonnées associées. * **Catégorie :** Ensemble de catégories et séries. * **Tag :** Méta-information sur une série * **Catalogue :** Ensemble de Catégories et Séries situés dans un même emplacement physique sur un système de fichiers (distant ou local). * **Bibliothèque :** Ensembles de catalogues de l’application. Est spécifique à une installation. ==== Objectifs ==== * Doit permettre de gérer plusieurs catalogues soit sur un système de fichiers local soit situé sur un serveur distant (en utilisant le protocole http) * Doit permettre de classer les séries dans un arbre de catégories. * Doit permettre d’ajouter des « tags » aux séries * Doit permettre de lire un volume * Affichage en simple page ou double page * Sens de lecture GàD ou DàG * Doit permettre de modifier les informations d’une série * Doit permettre de créer une série vide * Doit permettre d’adapter un fragment de site web en série ou volume * Effectue la création à l’aide de plugins * Doit fournir une bibliothèque permettant d’abstraire les interactions avec les données. ==== Modules ==== * //libVCL :// Fournit une bibliothèque d’abstraction des interactions avec les catalogues et leurs objets. * //Library :// Permet la consultation et modification graphique du contenu des catalogues. * //Reader :// Permet la consultation d’un volume. Doit pouvoir être utilisé en standalone * //Editor :// Permet la modification d’un volume. Doit pouvoir être utilisé en standalone. * //Downloader :// Permet le téléchargement d’un site vers un catalogue. Utilisation en ligne de commande possible. ===== Fonctionnalités ===== ==== Interface Utilisateur (général) ==== * Interface Single Window * Utilise des onglets pour la navigation * Restore les onglets ouverts lors de la réouverture du programme ==== Bibliothèque ==== * Affiche la liste des Catalogues, Catégories et Volumes dans une TreeView sur la gauche. * Affiche une liste des Volumes (si une série est sélectionnée) ou Séries (si une Catégorie est sélectionnée) au centre sous la forme d’une grille de couvertures. * Affiche les informations de l’élément sélectionné dans un panneau sur la droite. * Permet la gestion (ajout, suppression, déplacement) de Séries, Volumes et Catégories. //Image: Bibliothèque// ==== Liseuse ==== * Permet de consulter le contenu d’un Volume * Est présenté dans un onglet lancé depuis la Bibliothèque ou en standalone. * Affiche les images contenues dans le fichier du volume. * Supporte l’affichage en « simple page » ou « double page » en détectant de manière automatique si une image contenant deux pages doit être affichée * Gère la lecture Gauche à Droite (Comics) et Droite à Gauche (Mangas) * Affiche un tiroir de miniatures qui permet de naviguer dans le Volume //Image: Liseuse// ==== Crawler ==== * Permet de télécharger une Série à partir d’un site web n’offrant pas de Catalogue * Utilise des Plugins pour reconnaitre les différents sites pris en charge. * Les plugins sont chargés à partir de fichiers Javascript à l’aide de Nashorn. * Mise à jour automatique des plugins publics à travers de l’API Github //Image: Crawler// ==== libVCL (Bibliothèque d’abstraction) ==== * Fournit une API publique pour interagir de manière unifiée aux données * Gère le téléchargement et mise en cache des objets distants (catalogues et volumes) === API Publique === {{ :heig:classschema-apiv2.png?nolink |API Publique de libVCL}} ===== Implémentation ===== ==== Libraries et Frameworks ==== * JavaFX * Java.util.concurrent (Executors et Futures) * JSoup (html crawler): http://jsoup.org/ * Unirest (wrapper http): http://unirest.io/ * SQlite & OrmLite: http://ormlite.com/ * Java 7Zip Bindings: http://sevenzipjbind.sourceforge.net/ * //Utilitaires// * Gradle (build system): http://gradle.org/ * Git (version control)