Skip to content

RodolpheThienard/medman

Repository files navigation

Gestionnaire de fichiers multimédia

L’objectif de ce mini-projet est de créer une application en ligne commande pour gérer une collection de fichiers multimédia. L’application proposera une double interface utilisateur :

  • les arguments pourront être passés en paramètre de l’exécutable,

  • si l’exécutable est lancé sans argument, un mode interactif sera proposé à l’utilisateur.

L’utilisateur saisira une commande suivie d’arguments. Les commandes à implémenter sont les suivantes :

  • scan : analyser récursivement un répertoire pour collecter les fichiers supportés

    • l’analyse doit extraire les métadonnées du fichier

  • search : effectue une recherche sur les données gérées (format de la requête ?)

  • scrap : récupérer des données sur le web pour un ensemble de fichiers

  • write2md : génèrer un fichier Markdown contenant le résultat d’une requête

  • `write2??? : générer des playlists, …​

  • tag : ajoute un tag à un ensemble de fichiers (requêtes). Les données analysées peuvent être sauvegardées au format JSON pour une réutilisation ultérieure.

Ce sujet contient des parties obligatoires et des parties optionnelles. Les parties optionnelles sont là pour vous donner des pistes d’évolutions possibles concernant cette application. Enfin, le sujet est volontairement peu contraignant afin de vous laisser proposer vos propres évolutions.

Caution
  • Compilez et exécutez votre programme après chaque modification.

  • Pensez à valider régulièrement votre travail avec git.

  • Respectez le guide de style Rust dans votre code source.

  • En particulier, documentez vos API conformément aux recommandations.

Structure du projet

Le projet initial est géré avec cargo et est structuré en plusieurs modules et fichiers.

  1. Quelles bibliothèques externes sont utilisées dans le projet ? Expliquez en une phrase leur utilité et donnez l’URL de leur documentation

    Répondre ici
    Bibliothèque 1 : ...
  2. Expliquez le rôle de chacun des modules/fichiers du projet et examinez attentivement les exportations (mot-clé pub)

    Répondre ici
    Modules
    Fichiers

Structure de données initiale pour les fichiers audio

Dans un premier temps, seuls les fichiers audio seront pris en compte.

  1. Trouvez et documentez dans le code source l’ébauche d’API pour gérer les fichiers audio

Implémentation des fonctionnalités

Certaines des fonctionnalités ci-dessous sont à intégrer obligatoirement dans le projet. D’autres sont optionnelles. L’usage de bibliothèques externes pour l’implémentation est non seulement autorisé mais même encouragé.

Analyse d’un répertoire (scan)

La fonction scan (obligatoire) doit analyser récursivement un répertoire pour collecter les fichiers supportés. L’analyse doit extraire les métadonnées du fichier. Ces dernières sont issues du système de fichiers (date de création, …​) ou extraites du fichier de média à l’aide d’une bibliothèque spécifique (mp3-metadata, ogg_metadata, …​).

Les données analysées peuvent être sauvegardées par exemple au format JSON pour une réutilisation ultérieure. Des bibliothèques comme Serde pour sérialiser/désérialiser ou json peuvent être utiliser pour cela.

La fonction search (obligatoire) effectue une recherche sur les données gérées et retourne l’ensemble des médias correspondant. Le format de la requête doit permettre d’interroger les différents champs des fichiers médias. Vous pouvez par exemple vous inspirer d’une partie de la syntaxe d’outils de recherche par mots-clé comme Apache Lucene.

Générer une liste au format Markdown (write2md)

La fonction write2md (obligatoire) permet de génèrer un fichier Markdown contenant le résultat d’une requête. La bibliothèque markdown-gen permet par exemple de générer du Markdown.

Générer une playlist (write2???)

La fonction write2??? génère une playlist à partir du résultat d’une requête destiné à un logiciel externe comme vlc.

Cette fonctionnalité étant très proche de la précédente, la définition d’une abstraction représentant le type de sortie (affichage, markdown, playlist, …​) permettrait d’améliorer la conception du programme.

Enrichir les données à partir du web (scrap)

La fonction scrap (optionnelle) récupère des données sur le web pour un ensemble de fichiers. Ces métadonnées complémentaires viendront enrichir les informations conservées pour chaque fichier afin d’en améliorer l’affichage ou de permettre des recherches plus précises.

Ajouter des métadonnées (tag)

La fonction tag (optionnelle) ajoute un mot-clé à un ensemble de fichiers (requête). Ce mot-clé peut ensuite être stocké dans le fichier lui-même afin d’être utilisable à l’extérieure de l’application.

Un type abstrait pour généraliser à d’autres types de fichiers

L’idée est de pouvoir généraliser les fonctionnalités ci-dessus à d’autres types de média (photos, vidéo, …​).

  1. Proposez un type abstrait représentant un fichier de média quelconque.

  2. Modifiez votre implémentation des fichiers audio pour utiliser ce tye abstrait

Pour la généralisation, vous pouvez vous restreindre à un sous-ensemble des fonctionnalités proposées ci-dessus.

Extension à d’autres types de média

  1. Implémentez le type abstrait pour un autre type de média de votre choix (photos, vidéo, …​).

Références

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published