SongStorage
This project consists of developing a command-line tool that manages a storage folder of audio files and a metadata database, supporting add/delete/edit operations, searching, playlist archiving (“savelists”), and audio playback.
Phase 1: Storage Structure, DB Schema & CLI Validation
Set up Storage folder, persistent DB, and input validation.
- Create DB schema (filename, artist, title, release date, tags, format)
- Validate paths, audio types, and command syntax
- Produce clear errors/logs
Functional Output: CLI accepts valid commands and updates the DB/Storage structure accordingly.
Phase 2: Add & Delete Song Operations
Implement safe file import and removal with metadata handling.
- Copy audio file into Storage
- Insert metadata + generated ID in DB
- Delete file + DB entry by ID
Functional Output: Songs are added/removed consistently in both Storage and DB.
Phase 3: Metadata Modification
Implement selective metadata editing.
- Update only specified fields
- Validate formats (dates, tags)
- Log operations and errors
Functional Output: Metadata for a song is updated accurately by ID.
Phase 4: Search Engine & Criteria System
Implement flexible search logic based on multiple filters.
- Support field=condition pairs (artist=…, format=…, tags contain …)
- Allow combining rules with AND
- Return matching song metadata
Functional Output: Search returns correct matches for given criteria.
Phase 5: Savelist Creation (Archive Builder)
Create an archive containing songs matching search criteria.
- Evaluate search rules
- Collect matching files
- Build custom archive (no compression required) with metadata index
Functional Output: A valid savelist archive is produced containing selected songs.
Phase 6: Playback Support, Logging & CLI Refinement
Add optional audio playback and finalize logging/UX.
- Use 3rd-party library to play song by ID
- Add detailed logs for all commands
- Improve help, outputs, and error messages
Functional Output: Songs can be played; all operations are logged; user interacts with a polished CLI.