Nom et coordonnées

  • nom : Anmol Kapil
  • nom d’utilisateur GitLab : zepredos
  • fuseau horaire : UTC+5:30

Titre

Un CLI léger et réactif pour la gestion de bibliothèques médias

Brève description du travail réalisé

  1. Mettre en place le dépôt et la CI
    • Créer le dépôt medialode
    • Valider la configuration CMake et la CI (compilations Linux/macOS/Windows)
    • Vérifier la compilation d’un « hello world » sur tous les systèmes d’exploitation
  2. Intégrer et récupérer Boost et les autres dépendances
  3. Définir la spécification du protocole IPC
    • Rédiger les messages JSON-over-WebSocket pour les requêtes à la base de données et les commandes de l’analyseur
    • Ajouter un document Markdown ipc-spec dans docs/
  4. Squelette du serveur SQLite
    • Créer la cible binaire libmgr-server
    • Ouvrir au démarrage un socket d’écoute UNIX/websocket (Boost.Beast)
    • Répondre à un RPC ping par { "status": "ok" }
  5. Orchestration de l’analyse des dossiers
    • Ajouter le RPC « scan-folders » : il reçoit une liste de chemins et les enregistre dans une table de la base
    • Conserver l’état de l’analyse dans une table folders (path, last_scan)
  6. Mode WAL et schéma de base
    • Activer PRAGMA journal_mode = WAL à l’ouverture de la base
    • Définir les tables
  7. Cadre générique pour les processus d’analyse
    • Créer un libmgr-scan-worker binary qui :
    • Se connecte au serveur par WebSocket
    • Écoute les commandes scan-file
    • Renvoie file-scanned avec les métadonnées, ou file-error
  8. Processus d’analyse des images
    • À la réception de scan-file, si l’extension fait partie de {png,jpg,…}, extraire les dimensions
  9. Processus d’analyse audio
    • Pour les fichiers audio : extraire la durée et la fréquence d’échantillonnage
  10. Processus d’analyse vidéo
    • Pour les fichiers vidéo : extraire la durée et la résolution
  11. Processus d’analyse des langages et des scripts
    • Pour les fichiers .js, .py, etc. : tenter une analyse syntaxique à blanc afin de détecter les erreurs
    • Rapporter « syntaxe OK » ou le message d’erreur
  12. Structure de base du CLI
    • Créer un libmgr-cli binary doté de sous-commandes
  13. Implémenter list types
    • libmgr-cli list types → affiche les types de médias pris en charge
  14. Implémenter list files
    • libmgr-cli list files --type audio --folder /path
  15. Arrêt propre et persistance
    • S’assurer qu’à la réception de SIGINT, le serveur arrête proprement les processus de travail et valide la base
  16. Documentation et exemples
    • Créer un README avec des quickstarts pour le serveur et le CLI

Code fusionné

Code non fusionné

Ce qu’il reste à faire

  1. Processus d’analyse des plugins
    • Réutiliser la vstpuppet logic existante pour les formats VST2 et VST3
    • Extraire le nombre de paramètres, une capture d’écran de l’interface et les métadonnées du plugin
  2. Supervision des processus et gestion des plantages
    • Le serveur doit lancer un processus de travail par type de média
    • Surveiller la terminaison des processus enfants ; en cas de plantage, marquer le fichier comme défectueux et relancer le processus
  3. File de travail et traitement par lots
    • Implémenter une Redis-like queue dans SQLite :
    • CREATE TABLE queue (file_id, worker_type, status);
    • Le serveur met en file les fichiers nouveaux ou modifiés ; les processus de travail en tirent l’élément suivant
  4. Implémenter la recherche par étiquettes
    • libmgr-cli search --tag livecoding
  5. Surveillance des dossiers en temps réel
    • Passer du scan-folders manuel à un mode de surveillance persistant
    • Mettre en file de nouvelles tâches d’analyse à chaque nouvel événement du système de fichiers
  6. Cache et chargement paresseux des aperçus
    • Générer des aperçus et des vignettes pour les différents types de fichiers médias et les stocker dans une base d’aperçus
    • Ne pas régénérer un aperçu si la vignette existe déjà et que le fichier n’a pas changé
  7. Corriger le pipeline de CI
  8. Mettre à jour la documentation et le README en conséquence