8 Commits
Author SHA1 Message Date
Tobias Gesellchen 2768838bad style: apply golangci-lint --fix for all remaining issues
Applied automatic fixes using golangci-lint --fix which resolved:
- All remaining wsl_v5 whitespace issues (28 issues)
- All whitespace formatting issues (1 issue)
- Improved code formatting consistency across the entire codebase

All tests passing and functionality preserved.
2026-02-01 22:11:12 +01:00
Tobias Gesellchen a74dc96e50 style: fix whitespace and wsl_v5 linting issues
- Remove unnecessary trailing/leading whitespace
- Add missing whitespace above return statements, if statements, and loops
- Fix whitespace around variable declarations and assignments
- Improve code readability by following Go whitespace conventions
- Maintain functionality while improving code style consistency

Addresses majority of wsl_v5 and whitespace linting rules.
2026-02-01 21:56:13 +01:00
Tobias Gesellchen 83e289ab38 feat: implement comprehensive /supportedURLs endpoint with feature mapping system
 New Features:
- Implement missing /supportedURLs endpoint with full XML parsing
- Add comprehensive endpoint-to-feature mapping system (15+ features, 9 categories)
- Create device capability analysis with personalized recommendations
- Add intelligent device classification (Premium, Standard, Basic, Essential, Limited)

🔧 CLI Enhancements:
- Add 'supported-urls' command with --features and --verbose flags
- Add 'analyze' command for comprehensive device capability analysis
- Add 'station list' command for saved station management
- Add 'source availability' and 'source compare' commands
- Enhanced service availability checking across all commands

📚 Models & API:
- New SupportedURLsResponse model with rich helper methods
- Enhanced ServiceAvailability model with validation utilities
- New EndpointFeature mapping system with CLI command references
- Feature completeness scoring and partial implementation detection

🧪 Testing:
- 35+ new test cases covering all functionality
- Comprehensive feature mapping validation tests
- Service availability integration tests with real device scenarios
- Mock server tests for error handling and edge cases

📖 Documentation:
- New FEATURE-MAPPING-GUIDE.md with comprehensive usage examples
- Updated API documentation with correct implementation status
- CLI command reference organized by feature category
- Device troubleshooting guide with capability checking

🎯 Key Capabilities:
- Device feature coverage scoring (0-100%)
- Essential vs optional feature classification
- Personalized CLI command recommendations
- Missing capability detection with usage impact analysis
- Smart device type classification based on supported endpoints

This resolves the documentation inconsistency where /supportedURLs was marked as
implemented but was actually missing from the client. The new implementation goes
far beyond basic endpoint listing to provide intelligent device capability analysis
and personalized usage recommendations.
2026-01-31 20:23:30 +01:00
Tobias Gesellchen fb6e67cd86 docs: Clarify alternative to non-functional /trackInfo endpoint
- Specify that '/now_playing' endpoint is the API alternative
- Clarify that CLI 'now' command (playback status) is the CLI alternative
- Distinguish between the two 'now' CLI commands (playback vs clock)
- Update warning messages to be more specific about alternatives
2026-01-11 00:17:45 +01:00
Tobias Gesellchen 0e6dffead0 docs: Mark /trackInfo endpoint as non-functional on real devices
Based on real device testing, the /trackInfo endpoint returns
'AllegroWebserver timeout' errors despite being documented in the
official Bose SoundTouch Web API v1.0 specification.

## Changes

- Updated API coverage from 89% to 84% (16/19 functional endpoints)
- Marked /trackInfo as  Non-functional in all documentation
- Added warning comments to GetTrackInfo() method
- Updated CLI command with warning message
- Recommend using /now_playing instead for track information

## Real Device Evidence

- Device: SoundTouch at 192.168.178.28:8090
- Error: 'AllegroWebserver timeout: /trackInfo'
- Status: Endpoint documented but not working on hardware

This reflects the reality that some officially documented endpoints
may not function properly on actual devices, emphasizing the importance
of real hardware testing in API implementation.
2026-01-11 00:16:07 +01:00
Tobias Gesellchen 62a67818d2 Fix golangci-lint issues: resolve range copy, naming, and whitespace violations
- Fix range copy issues in cmd_network.go (use indexing instead of copying 168-byte structs)
- Rename DiscoveryService to Service to avoid package name stuttering
- Update all references to use new Service constructor names
- Apply automatic whitespace fixes using golangci-lint --fix
- Reduce linting issues from 32 to 7 (only cyclomatic complexity remains)

Remaining issues are architectural complexity violations that require manual refactoring.
2026-01-10 00:02:59 +01:00
Tobias Gesellchen 433368788b feat: complete CLI feature parity with original main.go
🎉 100% Feature Complete CLI Refactoring

MAJOR IMPROVEMENTS:
- Refactored from monolithic 149-complexity main.go to modular urfave/cli structure
- Added ALL missing commands for complete feature parity (47/47 features)
- Reduced golangci-lint issues by 70% (108+ → 32)

NEW COMMAND FILES:
- cmd_bass.go - Bass control (get/set/up/down/capabilities)
- cmd_balance.go - Balance control (get/set/left/right/center)
- cmd_clock.go - Clock management (time + display settings)
- cmd_network.go - Network information (info/ping/URL)
- cmd_zone.go - Multi-room zones (get/create/add/remove/dissolve)
- cmd_playback.go - Enhanced with key commands (volume-up/down, power, mute, etc.)
- cmd_info.go - Enhanced with preset selection and track info

COMPLETE FEATURE MAPPING:
 Discovery: discover devices [--all]
 Device Info: info, name get/set, capabilities, presets, track
 Playback: play start/pause/stop/next/prev, key send/power/mute/thumbs-up/down/volume-up/down
 Volume: volume get/set/up/down (with safety warnings, defaults: ±2)
 Bass: bass get/set/up/down/capabilities (defaults: ±1)
 Balance: balance get/set/left/right/center (defaults: ±5)
 Sources: source list/select/spotify/bluetooth/aux (with account support)
 Clock: clock get/set/now + display enable/disable/brightness/format (supports Unix timestamps, auto format)
 Network: network info/ping/url
 Zones: zone get/status/members/create/add/remove/dissolve/set
 Presets: preset selection by number (1-6)

PRESERVED FEATURES:
 All safety warnings and limits maintained
 Default increment/decrement values preserved
 Environment variable support (SOUNDTOUCH_HOST, SOUNDTOUCH_PORT)
 Extended format support (Unix timestamps, 'now', 'auto' clock format)
 Source account parameters for streaming services
 Zone deviceID@ip format support

ENHANCED USER EXPERIENCE:
 Organized subcommand hierarchy instead of 47 flat flags
 Comprehensive help system for each command
 Consistent flag naming (--host, --port, --timeout)
 Rich error messages with success/warning indicators
 Input validation and safety checks

ARCHITECTURAL IMPROVEMENTS:
 Modular command structure for better maintainability
 Shared utilities in common.go
 Consistent error handling and client configuration
 Clean separation of concerns

EXAMPLES:
# Discovery
soundtouch-cli discover devices --all --timeout 15s

# Volume control
soundtouch-cli volume set --host 192.168.1.100 --level 50
soundtouch-cli volume up --host 192.168.1.100 --amount 3

# Bass/Balance control
soundtouch-cli bass set --host 192.168.1.100 --level 3
soundtouch-cli balance left --host 192.168.1.100 --amount 5

# Key commands
soundtouch-cli key power --host 192.168.1.100
soundtouch-cli key send --host 192.168.1.100 --key SHUFFLE_ON

# Source selection
soundtouch-cli source select --host 192.168.1.100 --source SPOTIFY --account myaccount
soundtouch-cli source bluetooth --host 192.168.1.100

# Clock management
soundtouch-cli clock set --host 192.168.1.100 --time now
soundtouch-cli clock display format --host 192.168.1.100 --format 24

# Zone management
soundtouch-cli zone create --host 192.168.1.100 --members 192.168.1.101,192.168.1.102

Breaking Changes:
- CLI now uses subcommands instead of flat flags (functional equivalent provided for all commands)

RESULT: Transformed a 149-complexity monolithic CLI into a clean, organized,
feature-complete tool with 100% functionality preservation and significant UX improvements! 🚀
2026-01-09 23:54:10 +01:00
Tobias Gesellchen 97677bc8d1 feat: refactor soundtouch-cli to use urfave/cli framework
- Added urfave/cli/v2 dependency for better CLI structure
- Created modular command structure with separate files:
  - common.go: Shared utilities and client setup
  - cmd_discover.go: Device discovery commands
  - cmd_info.go: Device information commands
  - cmd_volume.go: Volume control commands
  - cmd_playback.go: Playback control commands
  - cmd_source.go: Source selection commands
- Replaced giant main() function (complexity 149) with organized subcommands
- Added proper flag handling and validation
- Improved help text and user experience

WIP: Some issues remain (flag conflicts, missing commands)
Next: Complete remaining commands and fix conflicts
2026-01-09 23:35:23 +01:00