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
|
|
Le projet initial est géré avec cargo
et est structuré en plusieurs modules et fichiers.
-
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 iciBibliothèque 1 : ...
-
Expliquez le rôle de chacun des modules/fichiers du projet et examinez attentivement les exportations (mot-clé
pub
)Répondre iciModules Fichiers
Dans un premier temps, seuls les fichiers audio seront pris en compte.
-
Trouvez et documentez dans le code source l’ébauche d’API pour gérer les fichiers audio
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é.
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, …).
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.
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.
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.
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.
L’idée est de pouvoir généraliser les fonctionnalités ci-dessus à d’autres types de média (photos, vidéo, …).
-
Proposez un type abstrait représentant un fichier de média quelconque.
-
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.
-
Implémentez le type abstrait pour un autre type de média de votre choix (photos, vidéo, …).
-
Quelques bibliothèques externes en lien avec ce projet
-
kamadak-exif pour extraite les métadonnées 'images
-
ffmpeg-next pour interagir avec FFMPEG
-
console pour agrémenter les affichages
-
pancurses pour créer une IHM dans le terminal
-
terminal_cli pour créer un appli CLI nteractive
-