---
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)
- [Music Player (written in Rust)](https://github.com/tsirysndr/music-player/)
- [fd](https://github.com/sharkdp/fd) (for filesystem walking)
- [global config in rust](https://github.com/PhilipDaniels/rust-config-example)
- [Bind unix port in hyper server]([https://github.com/hyperium/hyper/issues/2102](https://github.com/hyperium/hyper/issues/2102))

## [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.

Para hacer la primera operación en el server, puedo hacer un nuevo thread (con tokio ojalá) e instanciar un cliente que haga la petición.
## [Outtakes](Project%20checklists.md#Completion)

### Was the goal archived?

Yes/No, because of...

### What did go well?

- Item

### What did go wrong?

- Item