Giter Site home page Giter Site logo

medman's Introduction

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

medman's People

Contributors

kyuzial avatar github-classroom[bot] avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.