feat: Working sync between Navidrome & iPod
First full session of vibecoding with agents, super cool! Signed-off-by: SindreKjelsrud <sindre@kjelsrud.dev>
This commit is contained in:
commit
758076fe32
15 changed files with 6303 additions and 0 deletions
156
README.md
Normal file
156
README.md
Normal file
|
|
@ -0,0 +1,156 @@
|
|||
# NaviPod
|
||||
|
||||
A native Rust application to sync songs and albums from your self-hosted Navidrome instance to your iPod running either stock OS or Rockbox.
|
||||
|
||||
## Features
|
||||
|
||||
- 🎵 Sync songs and albums from Navidrome
|
||||
- 📱 Support for iPod stock OS
|
||||
- 🎸 Support for Rockbox firmware
|
||||
- ⚙️ Configurable sync options
|
||||
- 🔄 Incremental sync support
|
||||
|
||||
## Installation
|
||||
|
||||
```bash
|
||||
cargo build --release
|
||||
```
|
||||
|
||||
## Configuration
|
||||
|
||||
1. Copy `config.example.toml` to `config.toml`:
|
||||
```bash
|
||||
cp config.example.toml config.toml
|
||||
```
|
||||
|
||||
2. Edit `config.toml` with your settings:
|
||||
```toml
|
||||
[navidrome]
|
||||
url = "http://localhost:4533"
|
||||
username = "your_username"
|
||||
password = "your_password"
|
||||
|
||||
[ipod]
|
||||
mount_point = "/media/ipod"
|
||||
firmware = "rockbox" # or "stock"
|
||||
|
||||
[sync]
|
||||
albums = true
|
||||
playlists = false
|
||||
format = "mp3"
|
||||
```
|
||||
|
||||
3. Alternatively, use environment variables (prefixed with `NAVIPOD__`):
|
||||
```bash
|
||||
export NAVIPOD__NAVIDROME__URL="http://localhost:4533"
|
||||
export NAVIPOD__NAVIDROME__USERNAME="your_username"
|
||||
export NAVIPOD__NAVIDROME__PASSWORD="your_password"
|
||||
export NAVIPOD__IPOD__MOUNT_POINT="/media/ipod"
|
||||
export NAVIPOD__IPOD__FIRMWARE="rockbox"
|
||||
```
|
||||
|
||||
**Note:** Navidrome must have JSON API enabled (default in recent versions). The application uses Subsonic API with `f=json` parameter.
|
||||
|
||||
## Usage
|
||||
|
||||
### GUI Application
|
||||
|
||||
Launch the graphical interface:
|
||||
|
||||
```bash
|
||||
navipod-gui
|
||||
```
|
||||
|
||||
The GUI provides:
|
||||
- Input fields for Navidrome URL, username, and password
|
||||
- Firmware type selector (Stock/Rockbox)
|
||||
- Mount point browser
|
||||
- Real-time sync status and progress
|
||||
- Error display
|
||||
|
||||
### Command Line
|
||||
|
||||
```bash
|
||||
# Sync all configured content
|
||||
navipod sync
|
||||
|
||||
# Sync specific album
|
||||
navipod sync --album "Album Name"
|
||||
|
||||
# List available albums
|
||||
navipod list-albums
|
||||
|
||||
# Check iPod connection
|
||||
navipod check
|
||||
```
|
||||
|
||||
## Requirements
|
||||
|
||||
- Rust 1.70+ (and Cargo)
|
||||
- C compiler (for building native dependencies)
|
||||
- iPod mounted and accessible
|
||||
- Navidrome instance running and accessible
|
||||
- Navidrome with JSON API support (enabled by default)
|
||||
|
||||
### NixOS Setup
|
||||
|
||||
If you're using NixOS, enter the development shell:
|
||||
|
||||
```bash
|
||||
nix-shell
|
||||
```
|
||||
|
||||
This will provide Rust, Cargo, and all necessary build tools. The `shell.nix` file is already configured for this project.
|
||||
|
||||
## Building
|
||||
|
||||
```bash
|
||||
# On NixOS, first enter the development shell:
|
||||
nix-shell
|
||||
|
||||
# Build in release mode
|
||||
cargo build --release
|
||||
|
||||
# The binaries will be at:
|
||||
# - target/release/navipod (CLI)
|
||||
# - target/release/navipod-gui (GUI)
|
||||
```
|
||||
|
||||
### Running the GUI
|
||||
|
||||
```bash
|
||||
# Make sure you're in nix-shell first:
|
||||
nix-shell
|
||||
|
||||
# After building, run:
|
||||
./target/release/navipod-gui
|
||||
|
||||
# Or use cargo run:
|
||||
cargo run --bin navipod-gui
|
||||
```
|
||||
|
||||
**Note:** If you encounter Wayland or X11 library errors:
|
||||
1. Make sure you're in `nix-shell` (it provides all necessary libraries)
|
||||
2. The GUI will automatically use X11 if Wayland is not available
|
||||
3. If you still have issues, try:
|
||||
```bash
|
||||
WAYLAND_DISPLAY= WINIT_UNIX_BACKEND=x11 ./target/release/navipod-gui
|
||||
```
|
||||
|
||||
## Development
|
||||
|
||||
```bash
|
||||
# Run in debug mode
|
||||
cargo run -- sync
|
||||
|
||||
# Run tests
|
||||
cargo test
|
||||
|
||||
# Check code
|
||||
cargo check
|
||||
```
|
||||
|
||||
## License
|
||||
|
||||
MIT OR Apache-2.0
|
||||
|
||||
Loading…
Add table
Add a link
Reference in a new issue