Documentation for controlling and preserving Bose SoundTouch devices
This document summarizes the implementation of advanced content selection features for the Bose SoundTouch Go client, including full support for the LOCAL_INTERNET_RADIO streamUrl format and LOCAL_MUSIC/STORED_MUSIC content selection.
All content selection features from the SoundTouch WebServices API Wiki are now fully implemented with comprehensive API methods, CLI commands, tests, and documentation.
SelectContentItem(contentItem *models.ContentItem) errorSelectLocalInternetRadio(location, sourceAccount, itemName, containerArt string) errorhttps://stream.example.com/radio)http://contentapi.gmuth.de/station.php?name=Station&streamUrl=ActualStream)SelectLocalMusic(location, sourceAccount, itemName, containerArt string) errorSelectStoredMusic(location, sourceAccount, itemName, containerArt string) errorAll API methods are exposed through comprehensive CLI commands:
soundtouch-cli source internet-radiosoundtouch-cli --host <device> source internet-radio \
--location "http://contentapi.gmuth.de/station.php?name=MyStation&streamUrl=https://stream.example.com/radio" \
--name "My Station" \
--artwork "https://example.com/art.png"
soundtouch-cli source local-musicsoundtouch-cli --host <device> source local-music \
--location "album:983" \
--account "3f205110-4a57-4e91-810a-123456789012" \
--name "Welcome to the New"
soundtouch-cli source stored-musicsoundtouch-cli --host <device> source stored-music \
--location "6_a2874b5d_4f83d999" \
--account "d09708a1-5953-44bc-a413-123456789012/0" \
--name "Christmas Album"
soundtouch-cli source content (Advanced)soundtouch-cli --host <device> source content \
--source LOCAL_INTERNET_RADIO \
--location "https://stream.example.com/radio" \
--name "My Stream" \
--type stationurl \
--presetable
Comprehensive test suites implemented for all new functionality:
/examples/content-selection/ with working codeComplete working example demonstrating:
The streamUrl format uses a proxy server that accepts the actual stream URL as a parameter:
http://contentapi.gmuth.de/station.php?name=StationName&streamUrl=ActualStreamURL
contentItem := &models.ContentItem{
Source: "LOCAL_INTERNET_RADIO",
Type: "stationurl",
Location: "http://contentapi.gmuth.de/station.php?name=Antenne%20Chillout&streamUrl=https://stream.antenne.de/chillout/stream/aacp",
IsPresetable: false,
ItemName: "Antenne Chillout",
ContainerArt: "https://www.radio.net/300/antennechillout.png",
}
SelectContentItem() allows maximum controlSelectLocalInternetRadio(), etc.) provide simpler interfacesAll convenience methods create properly structured ContentItem objects:
Type assignment based on sourceIsPresetable defaults to trueItemName when not providedBased on the wiki structure, these related features are also supported:
// streamUrl format
location := "http://contentapi.gmuth.de/station.php?name=MyStation&streamUrl=https://stream.example.com/radio"
err := client.SelectLocalInternetRadio(location, "", "My Station", "")
// Direct ContentItem
contentItem := &models.ContentItem{
Source: "LOCAL_INTERNET_RADIO",
Type: "stationurl",
Location: location,
ItemName: "My Station",
IsPresetable: true,
}
err := client.SelectContentItem(contentItem)
# streamUrl format
soundtouch-cli --host 192.168.1.100 source internet-radio \
--location "http://contentapi.gmuth.de/station.php?name=MyStation&streamUrl=https://stream.example.com/radio" \
--name "My Station"
# Direct stream
soundtouch-cli --host 192.168.1.100 source internet-radio \
--location "https://stream.example.com/radio" \
--name "Direct Stream"
This implementation has been verified to:
Status: ๐ COMPLETE - All requested content selection features are fully implemented and ready for use!