Stella

Au bout d’un projet libre : le code (3 / 4)

Du code, du code, DU COOOOOOOOOOOOOOOODE.

🌟🌟🌟

Cet article fait partie d’une série de 4 articles enthousiastes sur la création de projets libres :

  1. L’idée
  2. Le plan
  3. Le code
  4. La suite

🌟🌟🌟

Avant-propos

L’idée

Si vous avez bien suivi notre article précédent, vous devez avoir quelques idées en tête pour créer des applications. Choisissez-en une, définissez bien où vous voulez aller à long terme, et bichonnez le plan de vos premières briques.

Chacun ses passions. J’en ai plein, vraiment plein, mais pour aujourd’hui j’ai choisi d’en retenir deux : les flux RSS et les clients lourds. Ne jugez pas mes passions, je ne jugerai pas les vôtres, OK ?

Alors sans surprise, nous allons ici nous lancer dans la réalisation d’un lecteur de flux RSS. Étonnant, non ?

L’objectif

Nous ne ferons pas le lecteur RSS le plus puissant de tous les temps, en tout cas pas tout de suite. Nous allons plutôt nous atteler à faire un petit lecteur mignon, craquant, choupi, mais surtout… fonctionnel.

En effet, l’objectif principal de cette première mouture est d’avoir un programme à utiliser dans la vraie vie. Dans notre cas, notre lecteur affichera les articles par flux, et ouvrira les pages lorsque l’on cliquera dessus. Il ira chercher ses flux dans un fichier de configuration. Simple mais efficace.

D’un point de vue de l’interface, nous aurons un panneau à gauche avec la liste des flux, et à droite la liste des liens du flux sélectionné.

Les outils

Mandatory Related XKCD™
Le XKCD obligatoire. Avant d’arriver à une orgie ingérable d’outils enchevêtrés, on va plutôt choisir quelques petits modules innocents.

Pour faire un petit lecteur de flux en Python, nous allons chercher des outils adaptés. C’est important, pour se simplifier la vie, de prendre le temps de trouver les modules qui nous permettront d’écrire moins de code et d’avoir de meilleures fonctionnalités.

Voici les principaux modules que nous utiliserons :

Et c’est parti pour le show

Nous voilà embarqués dans un petit projet. Quelques minutes, quelques heures, quelques jours, cela dépendra de votre idée et de vos compétences. Mais plus vite vous aurez du code utilisé, plus vite vous trouverez la motivation de l’améliorer à long terme.

Vous pouvez lire le code de ce petit projet. Nous allons ici voir, commit par commit, comment arriver au résultat, pour mettre en avant le cheminement.

Commit n°1 : fenêtre

Première étape, et non des moindres : essayons déjà d’afficher une fenêtre. Cette étape se fait avec le code de base de GTK pour créer une application.

La fonction do_activate est appelée lorsque run est lancé. Elle crée une fenêtre, assure que l’application se ferme lorsque la fenêtre se ferme, et affiche la fenêtre.

Commit n°2 : liste de flux

Deuxième étape : ajoutons les flux à gauche !

Notre fenêtre ne sera plus une fenêtre standard, nous allons créer une classe Window qui en hérite. À la création, nous ajouterons un conteneur horizontal de boîtes, avec les flux (Gtk.StackSidebar) qui activeront les liens (Gtk.Stack).

Commit n°3 : liste d’articles

On ajoute la liste des liens. Chaque liste de liens (correspondant à un flux) est un TreeView, et ces listes seront ajoutées dans la pile.

Commit n°4 : ouverture des liens

Pour ouvrir les liens, on utilise le module webbrowser qui se charge d’ouvrir le navigateur avec l’URL données. Le navigateur est ouvert lorsque la ligne correspondant à l’article est activée.

Commit n°5 : lecteur de flux

On pourrait croire que la lecture des flux est une opération délicate. Il n’en est rien. Avec feedparser, il nous suffit de trois petites lignes pour changer notre jeu de test en de vraies données.

Commit n°6 : configuration

À la place des données mises dans le code, il serait bon d’utiliser un fichier de configuration. Ce fichier de configuration sera un brave fichier INI, ouvert par ConfigParser. On remplacera ensuite les flux factices par ceux du fichier de configuration.

Le format du fichier est simple. Les sections correspondent aux flux, elles contiennent une seule clé : url, qui contient sans grande surprise l’URL du flux.

Commit n°7 : mise à jour automatique

Mettons à jour les flux ! Pour cela, nous utiliserons un timeout gentiment proposé par GLib, et qui lancera la fonction update toutes les 300 secondes.

La fonction update ajoute les flux, comme c’était fait avant une seule fois au lancement. Comme cette fonction est lancée plusieurs fois, elle vide au préalable les flux, avant de les rajouter.

Commit n°8 : sélection du fil actif après mise-à-jour

Vider les flux, c’est bien, mais si le flux était sélectionné il ne le sera plus. Pas très pratique !

On a différentes solutions pour corriger cela. La plus simple est de garder en mémoire le flux sélectionné, de tout mettre à jour et de sélectionner le flux précédemment sélectionné.

Engrenage

Un papillon
Vous voyez l’histoire du battement d’aile de papillon qui provoque une tempête à l’autre bout de la Terre ? Bah là, on en est juste au battement d’aile. C’est déjà un début.

Ce n’est pas le meilleur lecteur de flux RSS, nous sommes d’accord. Mais avouez que la prouesse est belle : nous avons avec moins de 70 lignes de code un programme fonctionnel, que nous pouvons utiliser au jour le jour sans trop souffrir.

À ce moment-là, vous êtes déjà à la meilleure place pour vous encourager. Forcez-vous quelques temps à utiliser votre création, et si tout se passe bien vous aurez des démangeaisons à chaque bug trouvé, à chaque fonctionnalité que vous aimeriez avoir.

Avec le temps, vous aurez un outil qui correspond à vos besoins. Cet outil devrait commencer à plus vous ressembler, et à moins ressembler aux autres outils du genre.

C’est une bonne base. Une bonne base avant la suite