Laureline's Wiki

Laureline's Wiki

Architecture

Architecture

Modèle de Domaine

Le coeur de l'application se concentre sur la gestion d'une bibliothèque de livres virtuels.

<uml title=“Modèle de Domaine”> hide methods hide empty fields hide class circle hide interface circle

class Catalog class CatalogNode {

+name

} class Category class Series class VolumeMetadata {

+number
+title

} class SeriesMetadata {

+authors[*]
+artists[*]
+released
+summary

} class Tag {

+name

}

class Volume {

}

class Page {

}

CatalogNode <|– Category CatalogNode <|– Series

Catalog - “1” Category: root CatalogNode “*” – Category: children

CatalogNode - “*” VolumeMetadata: volumes VolumeMetadata *–> “0..1” SeriesMetadata: metadata Series *→ “1” SeriesMetadata: metadata

SeriesMetadata o–> “*” Tag: tags VolumeMetadata → Volume Volume –> Page </uml>

Une bibliothèque est divisée en plusieurs Catalogues qui représentent les différentes sources d'informations soit locales soit distantes. Chaque catalogue permet d'organiser ses enfants dans un arbre de Catégories et de Séries. Les catégories permettant de grouper les séries (et les catégories). La librairie n'impose pas de signification particulière quant aux critères de catégorisations. Un utilisateur pourrait par exemple choisir de catégoriser ses séries par genre alors qu'un autre par année de parution.

Les séries et les catégories peuvent toutes deux contenir des Volumes qui représentent un exemplaire physique. Etant donné que certaines maisons de publication éditent parfois des compilations de plusieurs chapitres (courant dans l'industrie du comics ou les “chapitres” individuels d'une douzaine sont publiés chaque semaine et sont ensuite republiés en un volume contenant tous les chapitres d'un arc) en un seul volume aucunne signification particulière n'est imposée à la notion de volume dans la librairie.

Chaque série, en plus de contenir ses volumes, possède aussi des informations concernant son ou ses auteurs et dessinateurs, son année de publication, un résumé de la série et les Tags qualifiant la série.

Un volume qui n'est pas situé dans une série mais une catégorie est considéré comme un One-Shot et possède alors les mêmes informations qu'une série.

Composants du Système

<uml title=“Composants du Système”>

package “ch.vcl.api” {

interface Catalog
component CatalogFactory
interface Volume
interface VolumeFactory
component VolumeLoader
component VolumeWriter
component VolumeStore
component ThumbnailStore

Catalog -- CatalogFactory

VolumeStore -- Catalog
ThumbnailStore -- Catalog
Volume "*" . Catalog

VolumeLoader -- VolumeFactory
VolumeWriter -- VolumeFactory

Volume <.. VolumeLoader: loads
Volume <.. VolumeWriter: writes

}

package “ch.vcl.crawler” {

interface CrawlerFactory
component Crawler
component Builder

CrawlerFactory --> Crawler: builds
Builder <. Crawler

}

package “ch.vcl.desktop” {

interface Config
component Library
component Reader
component Editor
component CrawlerUI

Library --> Reader
Library --> Editor
Library --> CrawlerUI

CrawlerUI - CrawlerFactory

Library -> Config
Config -> Catalog

}

</uml>

L'application est séparée en trois parties:

  • libvcl
    • api fournit un api permettant de manipuler les différents types de catalogues de manière transparente.
    • crawler fournit un api permettant de télécharger un série depuis un site de publication.
  • desktop est la partie graphique permettant d'afficher et manipuler les éléments de la librairie.

API libVCL

L'api permet de rendre transparents les différents modes de stockage des catalogues (XML, SQLite) ainsi que les différents emplacements (Local ou Distant HTTP).

  • CatalogFactory permet d'instancier les différents types de catalogues et leur objets dépendants de manière transparente pour les utilisateurs de l'API.
  • VolumeStore permet de charger un volume depuis le disque en fonction de ses meta-informations stockées dans le catalogue.
  • ThumbnailStore permet de récupérer les miniatures correspondant à un volume depuis ses meta-informations dans le catalogue.
  • VolumeLoader charge le contenu d'un catalogue en fonction de son moteur de stockage. Gère aussi une mise en cache en cas de données distantes pour permettre une consultation hors ligne.
  • VolumeWriter écrit le contenu d'un catalogue (local) en fonction de son moteur de stockage.

Crawler libVCL

Le crawler est un module permettant de composer une série à partir d'un site web (ex: mangafox.me).

  • CrawlerFactory fournit une instance d'un crawler approprié pour une url spécifiée.
  • Crawler parse la structure html du site web pour en extraire les informations sur la série concernée. Crée un descripteur contenant la liste des volumes et des images qui les composent.
  • Builder télécharge les images et compose les différents volumes de la série. Les volumes sont ensuite sauvegardés sur le disque et ajoutés au catalogue spécifié.

Desktop

L'application bureau affiche le contenu des différents catalogues des utilisateurs en utilisant les fonctionnalités fournies par l'API et le crawler.

  • Config stocke les préférences de l'applications tels que les emplacements des catalogues de l'utilisateur ainsi que ses préférences de lecture.
  • Library affiche le contenu des catalogues de l'utilisateur et permet de modifier les catalogues locaux.
  • Reader permet de lire un volume
  • Editor permet de créer/modifier un volume
  • CrawlerUI fournit une interface graphique pour l'utilisation du crawler.