--- created: 2024-03-26 16:02 updated: 2024-03-26 16:09 status: Backlog --- # Juno ## Resources - [Navidrome](https://www.navidrome.org) - [Azuracast](https://www.azuracast.com/) - [Cadence](https://github.com/kenellorando/cadence) (Use Icecast and Liquidsoap) - [forte](https://github.com/kaangiray26/forte) - [Simple MPD in Rust](https://dev.to/tsirysndr/how-i-built-a-simple-music-player-daemon-in-rust-with-a-cliweb-ui-51e0) - [fd](https://github.com/sharkdp/fd) (for filesystem walking) ## [Kickoff](Project%20checklists.md#Kickoff) ### Completion Criteria This project will be completed when: Have a working CLI music player with the following features: - [ ] Play local files or remote streams (like youtube streams). - [ ] Local or remote (HTTP) audio output. - [ ] [MPRIS](https://wiki.archlinux.org/title/MPRIS) support - [ ] Dynamic server-client design: - [ ] On start it attach to a socket, a local unix file socket (default) or a port to allow for remote connections ([MPD](https://wiki.archlinux.org/title/Music_Player_Daemon) like). - [ ] If a second instance is invoque on the same socket, it will act as a client to the process running on that socket, allowing to modify the playback and exiting immediately ([MPC](https://www.musicpd.org/clients/mpc/) like). - [ ] By default the server process will end when the queue is empty unless it's ran in _"daemon"_ mode. This allows to continue using the clients to add more music later. ### Brainstorm Regarding the Client-Server setup: - In _"daemon"_ mode, a path is needed so the server knows where to find the music. The clients can only add files from that path. - The server needs an endpoint to return the available songs under the provided path. - The server needs an endpoint that return the current information of the playback - The communication between client / other front ends and server is with gRPC The queue should have a soft limit and a hard limit. - Soft Limit: Cannot add more than this limit, it's also the same limit when quering the current queue. - Hard limit: The actual limit of the query, items above this limit are truncated. I don't remember why but this was important and useful. ## [Outtakes](Project%20checklists.md#Completion) ### Was the goal archived? Yes/No, because of... ### What did go well? - Item ### What did go wrong? - Item