Projet ADE

Logiciel produit par David Darras et Aymane Amessegher, INFO4, Polytech Grenoble, 2025

Table des matières

  1. Introduction
  2. Pré-requis
  3. Installation
  4. Architecture de l'application
  5. Structure des fichiers

1. Introduction

L'application ADE met à disposition un accès direct aux emplois du temps des formations UGA. Un intérêt commun : une information visible par l'étudiant, l'intervenant et la scolarité, consultable à distance et mise à jour régulièrement. Cependant, cette application très pratique n'est pas open source et a un style un peu désuet. Notre objectif principal est de recréer ADE pour Polytech Grenoble en Rust avec le crate egui.

2. Pré-requis

  1. Rust est un langage qui se base sur le concept de propriété et d'emprunt, ce qui offre de nombreux avantages : sécurité de la mémoire, absence de garbage collector, meilleure gestion de la concurrence, etc. D'où le choix de ce langage pour ce projet, en plus d'apprendre un nouveau langage de programmation.
  2. cargo est l'outil de gestion de paquets et de construction pour le langage Rust, utilisé pour compiler, tester, et gérer les dépendances du projet.
  3. egui est une bibliothèque Rust qui permet à la fois de créer des applications lourdes (c'est-à-dire des applications de bureau) avec une interface utilisateur graphique, mais aussi des applications légères en compilant le code en WebAssembly, pouvant être lancées dans un navigateur Internet.
  4. Flask est un framework web en Python qui permet de créer simplement des applications web. Il offre les fonctionnalités de base pour la création d'un serveur web, comme le routage des URL, la gestion des requêtes et des réponses, etc. en se basant sur une API REST (Representational State Transfer), permettant ainsi à notre serveur python et notre application lourdre de communiquer entre elles via des requêtes HTTP standard.
  5. reqwest et tokio sont des crates qui permettent de faire des requêtes HTTP et de gérer des opérations asynchrones en Rust de manière simple et efficace.
  6. icalendar est une crate Rust qui permet de construire et de parser des calendriers au format iCalendar. Les fichiers envoyés par le serveur sont au format : *.ics.
  7. Un évènement désigne un cours planifié pour une certaine période, dans une salle spécifique avec un intervenant désigné.
    Exemple :
    Date           : 14/03/2025
    Cours          : (AR) Applications réparties
    Fillière       : INFO4
    Professeur     : DECHAMBOUX BOYER FABIENNE
    Salle          : IM2AG Amphi F022
    Heure de début : 08h00
    Heure de fin   : 09h30

3. Installation

  1. Installer Git pour télécharger le repository avec la commande :
    git clone https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/24-25/21/docs.git
  2. Installer Python ainsi que le module Flask
    pip install Flask
  3. Lancer le serveur backend :
    python resources/backend/server.py
  4. Installer Rust pour pouvoir compiler le projet avec cargo et lancer l'application lourde :
    cargo run

4. Architecture de l'application

Frontend

Backend

Database

5. Structure des fichiers

Vue d'ensemble de l'arborescence des fichiers

La structure des répertoires du projet ADE est comme suit :
Les sections suivantes détailleront chaque répertoire et son contenu.

ade_project
  ├ documents                     Documentation 
  ├ resources
  │   ├ backend                   
  │   │   ├ ics                   Base de données regroupant tous les fichiers *.ics
  │   │   │   ├  INFO3.ics        Emploi du temps des INFO3
  │   │   │   ├  INFO4.ics        Emploi du temps des INFO4
  │   │   │   └  ...              
  │   │   └ server.py             Serveur python pour le backend avec une API REST     
  │   ├ cache                     Espace utilisé par le client pour stocker les données téléchargées
  │   ├ model                     Modèles graphiques dont on s'est inspiré
  │   └ preview                   Thumbnails de l'avancement du projet pour le logbook
  │   └ ADE-project.pdf           Présentation bref du projet durant la soutenance de mi-parcours
  ├ src
  │   ├ util
  │   │   ├ event_builder.rs      Traduis les évènements dans les fichiers *.ics en objet Event
  │   │   ├ event_partition.rs    Partitionne les événements en fonction de leur date pour qu'il ne se superpose pas
  │   │   └ ics_downloader.rs     Télécharge les fichiers *.ics s'ils ne sont pas dans le cache
  │   ├ widget
  │   │   ├ calendar.rs           Objet graphique calendrier : utile pour sélectionner une date
  │   │   ├ column.rs             Objet graphique colonne : Une colonne par jour de la semaine
  │   │   ├ event.rs              Objet graphique évènement : Il comporte les dates de début et fin du cours, la localisation, le nom du cours et le nom du professeur
  │   │   └ schedule.rs           Objet graphique emploi du temps : Il réunit les colonnes et les évènements
  │   ├ app.rs                    Application graphique regroupant le calendrier, la liste des fillières et l'emploi du temps
  │   ├ common.rs                 Constantes utilisées dans le projet : Ensemble des jours de la semaine, des mois, heure minimale et maximale dans le planing, etc.
  │   ├ main.rs                   Point d'entrée de l'application
  │   ├ util.rs                   
  │   └ widget.rs
  ├ target                        Ensemble des fichiers générés par cargo lors de la compilation
  ├ .gitignore                    Exclusion des fichiers binaires pour ne pas les push repo
  ├ Cargo.lock                    Verrouillage des versions des dépendances
  ├ Cargo.toml                    Configuration de cargo - Indiquer la version des crates utilisés
  └ logbook.md                    Journal de bord du projet

/documents

Ensemble des fichiers destiné à la documentation du projet.

/resources

Regroupe le code du serveur backend, les previews pour le logbook et les images de l'application.

/src

Code source de l'application ADE.

/target

Ensemble des fichiers générés par cargo lors de la compilation.

Retour en haut