Laureline's Wiki

Laureline's Wiki

Crawler

Crawler

Crawler

Le crawler est implémenté comme un module “standalone” qui peut être lancé depuis le menu principal de l'application. Il implémente une interface pour intéragir avec le module de l'API.

Les boutons sont mis à jour en fonction de l'état du système en utilisant les bindings javafx afin de gérer facilement les mises à jour.

Cette interface utilise les procédures asynchrones fournies par l'API. Ceci permet à l'interface de reporter à l'utilisateur la progression des différentes étapes de manière fluide.

ProgressFuture<WebSeries> future = crawler
  .crawlAsync(url)
  .whenProgressAsync(this::onCrawlProgress, PlatformExecutor.instance)
  .whenMessageAsync(this::onCrawlMessage, PlatformExecutor.instance)
  .whenCompleteAsync(this::onCrawlComplete, PlatformExecutor.instance);
  
private void onCrawlProgress(ProgressFuture<WebSeries> future) {
  // Met à jour la barre de progression
  crawlProgress.setProgress(future.getProgress());
  crawlCount.setText(String.format("%d/%d", future.getCurrent(), future.getMaximum()));
}
    
private void onCrawlMessage(ProgressFuture<WebSeries> future) {
  // Affiche le message dans le log
  log.appendText(future.getMessage() + "\n");
}

L'utilisation des méthodes de rapport asynchrones (whenCompleteAsync, whenProgressAsync, …) en conjonction avec un Executor spécial permettant aux méthodes d'être executées dans le contexte de l'UI permet une gestion très simple du rapport de progression.

L'interface permet aussi de charger et sauvegarder des descripteurs dans le pipeline afin de permettre aux utilisateurs de conserver les métadonnées pour un téléchargement ultérieur.