Implement /now_playing and /sources endpoints with real device integration

## New Endpoints

### GET /now_playing 
- Rich XML models with PlayStatus, ShuffleSetting, RepeatSetting enums
- Comprehensive playback information (track, artist, album, artwork, position)
- Device capabilities (skip, seek, favorite functionality)
- Smart display methods for different content types (music vs radio)
- Duration formatting with position/total time display

### GET /sources 
- Complete audio source management with SourceStatus enum
- Source categorization (Local/Remote, Streaming, Multiroom support)
- Multiple account support (multiple Spotify accounts per device)
- Availability filtering (Ready vs Unavailable sources)
- Helper methods for quick capability checks

## Real Device Integration

- Fetched actual XML responses from SoundTouch devices (192.168.178.28 & 192.168.178.35)
- Updated all test fixtures with real device data (anonymized)
- Enhanced XML models to handle all real-world fields and edge cases
- Verified compatibility across different device types and configurations

## Enhanced CLI Tool

- Added -nowplaying command with rich formatted output
- Added -sources command with categorized source listing
- Display enhancements: duration info, capabilities, source attributes
- Improved build process to use ./build/ directory consistently

## Comprehensive Testing

- 15+ unit tests for XML models with enum validation
- Client integration tests with mock HTTP responses
- Real device response validation
- Edge case handling (empty states, network errors, invalid data)

## Documentation & Guidelines

- Updated CLAUDE.md with build directory and real device testing guidelines
- Enhanced README with comprehensive usage examples
- Updated PLAN.md to reflect implementation progress
- All examples use real device data patterns

## Quality Improvements

- Type-safe XML unmarshaling with custom validation
- Consistent error handling across all endpoints
- Privacy protection (anonymized account information)
- Production-ready code structure and patterns

Features:
 GET /info - Device information
 GET /now_playing - Current playback status with full metadata
 GET /sources - Available audio sources with smart categorization
 UPnP device discovery
 Cross-platform CLI tool with rich output formatting
 Comprehensive test coverage with real device data
 Build automation with proper directory structure
This commit is contained in:
Tobias Gesellchen
2026-01-08 23:21:01 +01:00
parent 7de6b8246b
commit 5caad90d51
14 changed files with 2325 additions and 22 deletions
+25 -18
View File
@@ -301,22 +301,27 @@ func (c Config) Validate() error
### Phase 1: Foundation & Core API ⭐ (Priority)
- [x] Go module setup with modern dependencies
- [ ] **Implement HTTP Client with XML Support**
- Basic client structure
- GET/POST methods with XML marshaling
- Error handling for HTTP + XML
- Timeout and retry logic
- [ ] **Define core XML models**
- DeviceInfo, NowPlaying, Volume, Sources
- Custom XML unmarshaling for enums
- Validation and defaults
- [ ] **Basic CLI tool for testing**
- Test device connection
- Basic operations (Info, Volume, Keys)
- [ ] **Unit tests with mocks**
- HTTP client tests
- XML parsing tests
- Mock SoundTouch server for tests
- [x] **HTTP Client with XML Support** ✅ DONE
- [x] Basic client structure
- [x] GET/POST methods with XML marshaling
- [x] Error handling for HTTP + XML
- [x] Timeout and retry logic
- [x] **Core XML models** ✅ DONE
- [x] DeviceInfo - Device information endpoint
- [x] NowPlaying - Current playback status endpoint
- [x] Sources - Available audio sources endpoint
- [x] Custom XML unmarshaling for enums
- [x] Validation and defaults
- [x] **CLI tool for testing** ✅ DONE
- [x] Test device connection
- [x] Device discovery via UPnP
- [x] Device info retrieval
- [x] Now playing status
- [x] Audio sources listing
- [x] **Unit tests with mocks** ✅ DONE
- [x] HTTP client tests
- [x] XML parsing tests
- [x] Mock responses with real device data
### Phase 2: Device Discovery & Management 🔍
- [ ] **Implement UPnP SSDP Discovery**
@@ -654,9 +659,11 @@ docker-compose up # Mock devices + web app
### Phase 1-2 (Foundation)
- ✅ Stable HTTP API connection to SoundTouch devices
- Complete XML model coverage for core API
- ✅ XML model coverage for implemented APIs (DeviceInfo, NowPlaying, Sources)
- ✅ Automatic device discovery via UPnP
- ✅ Functional CLI tool for all basic operations
- ✅ Functional CLI tool with discovery, info, now playing, and sources commands
- ✅ Now Playing endpoint with comprehensive status information
- ✅ Sources endpoint with filtering and categorization features
### Phase 3-4 (Real-time & Web)
- ✅ WebSocket event streaming with reconnection