added presets to browsing
parent
6026f487c1
commit
0b5041572f
|
|
@ -87,6 +87,7 @@ void DevicePluginBose::setupDevice(DeviceSetupInfo *info)
|
||||||
connect(soundTouch, &SoundTouch::bassCapabilitiesReceived, this, &DevicePluginBose::onBassCapabilitiesObjectReceived);
|
connect(soundTouch, &SoundTouch::bassCapabilitiesReceived, this, &DevicePluginBose::onBassCapabilitiesObjectReceived);
|
||||||
connect(soundTouch, &SoundTouch::zoneReceived, this, &DevicePluginBose::onZoneObjectReceived);
|
connect(soundTouch, &SoundTouch::zoneReceived, this, &DevicePluginBose::onZoneObjectReceived);
|
||||||
connect(soundTouch, &SoundTouch::requestExecuted, this, &DevicePluginBose::onRequestExecuted);
|
connect(soundTouch, &SoundTouch::requestExecuted, this, &DevicePluginBose::onRequestExecuted);
|
||||||
|
connect(soundTouch, &SoundTouch::presetsReceived, this, &DevicePluginBose::onPresetsReceived);
|
||||||
m_soundTouch.insert(info->device(), soundTouch);
|
m_soundTouch.insert(info->device(), soundTouch);
|
||||||
return info->finish(Device::DeviceErrorNoError);
|
return info->finish(Device::DeviceErrorNoError);
|
||||||
|
|
||||||
|
|
@ -163,37 +164,37 @@ void DevicePluginBose::executeAction(DeviceActionInfo *info)
|
||||||
|
|
||||||
if (action.actionTypeId() == soundtouchPowerActionTypeId) {
|
if (action.actionTypeId() == soundtouchPowerActionTypeId) {
|
||||||
//bool power = action.param(soundtouchPowerActionPowerParamTypeId).value().toBool();
|
//bool power = action.param(soundtouchPowerActionPowerParamTypeId).value().toBool();
|
||||||
QUuid requestId = soundTouch->setKey(KEY_VALUE::KEY_VALUE_POWER); //only toggling possible
|
QUuid requestId = soundTouch->setKey(KEY_VALUE::KEY_VALUE_POWER, true); //only toggling possible
|
||||||
m_pendingActions.insert(requestId, info);
|
m_pendingActions.insert(requestId, info);
|
||||||
connect(info, &DeviceActionInfo::aborted, this, [requestId, this] {m_pendingActions.remove(requestId);});
|
connect(info, &DeviceActionInfo::aborted, this, [requestId, this] {m_pendingActions.remove(requestId);});
|
||||||
|
|
||||||
} else if (action.actionTypeId() == soundtouchMuteActionTypeId) {
|
} else if (action.actionTypeId() == soundtouchMuteActionTypeId) {
|
||||||
QUuid requestId = soundTouch->setKey(KEY_VALUE::KEY_VALUE_MUTE); //only toggling possible
|
QUuid requestId = soundTouch->setKey(KEY_VALUE::KEY_VALUE_MUTE, true); //only toggling possible
|
||||||
m_pendingActions.insert(requestId, info);
|
m_pendingActions.insert(requestId, info);
|
||||||
connect(info, &DeviceActionInfo::aborted, this, [requestId, this] {m_pendingActions.remove(requestId);});
|
connect(info, &DeviceActionInfo::aborted, this, [requestId, this] {m_pendingActions.remove(requestId);});
|
||||||
|
|
||||||
} else if (action.actionTypeId() == soundtouchPlayActionTypeId) {
|
} else if (action.actionTypeId() == soundtouchPlayActionTypeId) {
|
||||||
QUuid requestId = soundTouch->setKey(KEY_VALUE::KEY_VALUE_PLAY);
|
QUuid requestId = soundTouch->setKey(KEY_VALUE::KEY_VALUE_PLAY, true);
|
||||||
m_pendingActions.insert(requestId, info);
|
m_pendingActions.insert(requestId, info);
|
||||||
connect(info, &DeviceActionInfo::aborted, this, [requestId, this] {m_pendingActions.remove(requestId);});
|
connect(info, &DeviceActionInfo::aborted, this, [requestId, this] {m_pendingActions.remove(requestId);});
|
||||||
|
|
||||||
} else if (action.actionTypeId() == soundtouchPauseActionTypeId) {
|
} else if (action.actionTypeId() == soundtouchPauseActionTypeId) {
|
||||||
QUuid requestId = soundTouch->setKey(KEY_VALUE::KEY_VALUE_PAUSE);
|
QUuid requestId = soundTouch->setKey(KEY_VALUE::KEY_VALUE_PAUSE, true);
|
||||||
m_pendingActions.insert(requestId, info);
|
m_pendingActions.insert(requestId, info);
|
||||||
connect(info, &DeviceActionInfo::aborted, this, [requestId, this] {m_pendingActions.remove(requestId);});
|
connect(info, &DeviceActionInfo::aborted, this, [requestId, this] {m_pendingActions.remove(requestId);});
|
||||||
|
|
||||||
} else if (action.actionTypeId() == soundtouchStopActionTypeId) {
|
} else if (action.actionTypeId() == soundtouchStopActionTypeId) {
|
||||||
QUuid requestId = soundTouch->setKey(KEY_VALUE::KEY_VALUE_STOP);
|
QUuid requestId = soundTouch->setKey(KEY_VALUE::KEY_VALUE_STOP, true);
|
||||||
m_pendingActions.insert(requestId, info);
|
m_pendingActions.insert(requestId, info);
|
||||||
connect(info, &DeviceActionInfo::aborted, this, [requestId, this] {m_pendingActions.remove(requestId);});
|
connect(info, &DeviceActionInfo::aborted, this, [requestId, this] {m_pendingActions.remove(requestId);});
|
||||||
|
|
||||||
} else if (action.actionTypeId() == soundtouchSkipNextActionTypeId) {
|
} else if (action.actionTypeId() == soundtouchSkipNextActionTypeId) {
|
||||||
QUuid requestId = soundTouch->setKey(KEY_VALUE::KEY_VALUE_NEXT_TRACK);
|
QUuid requestId = soundTouch->setKey(KEY_VALUE::KEY_VALUE_NEXT_TRACK, true);
|
||||||
m_pendingActions.insert(requestId, info);
|
m_pendingActions.insert(requestId, info);
|
||||||
connect(info, &DeviceActionInfo::aborted, this, [requestId, this] {m_pendingActions.remove(requestId);});
|
connect(info, &DeviceActionInfo::aborted, this, [requestId, this] {m_pendingActions.remove(requestId);});
|
||||||
|
|
||||||
} else if (action.actionTypeId() == soundtouchSkipBackActionTypeId) {
|
} else if (action.actionTypeId() == soundtouchSkipBackActionTypeId) {
|
||||||
QUuid requestId = soundTouch->setKey(KEY_VALUE::KEY_VALUE_PREV_TRACK);
|
QUuid requestId = soundTouch->setKey(KEY_VALUE::KEY_VALUE_PREV_TRACK, true);
|
||||||
m_pendingActions.insert(requestId, info);
|
m_pendingActions.insert(requestId, info);
|
||||||
connect(info, &DeviceActionInfo::aborted, this, [requestId, this] {m_pendingActions.remove(requestId);});
|
connect(info, &DeviceActionInfo::aborted, this, [requestId, this] {m_pendingActions.remove(requestId);});
|
||||||
|
|
||||||
|
|
@ -202,9 +203,9 @@ void DevicePluginBose::executeAction(DeviceActionInfo *info)
|
||||||
QUuid requestId;
|
QUuid requestId;
|
||||||
bool shuffle = action.param(soundtouchShuffleActionShuffleParamTypeId).value().toBool();
|
bool shuffle = action.param(soundtouchShuffleActionShuffleParamTypeId).value().toBool();
|
||||||
if (shuffle) {
|
if (shuffle) {
|
||||||
requestId = soundTouch->setKey(KEY_VALUE::KEY_VALUE_SHUFFLE_ON);
|
requestId = soundTouch->setKey(KEY_VALUE::KEY_VALUE_SHUFFLE_ON, true);
|
||||||
} else {
|
} else {
|
||||||
requestId = soundTouch->setKey(KEY_VALUE::KEY_VALUE_SHUFFLE_OFF);
|
requestId = soundTouch->setKey(KEY_VALUE::KEY_VALUE_SHUFFLE_OFF, true);
|
||||||
}
|
}
|
||||||
m_pendingActions.insert(requestId, info);
|
m_pendingActions.insert(requestId, info);
|
||||||
connect(info, &DeviceActionInfo::aborted, this, [requestId, this] {m_pendingActions.remove(requestId);});
|
connect(info, &DeviceActionInfo::aborted, this, [requestId, this] {m_pendingActions.remove(requestId);});
|
||||||
|
|
@ -214,11 +215,11 @@ void DevicePluginBose::executeAction(DeviceActionInfo *info)
|
||||||
QUuid requestId;
|
QUuid requestId;
|
||||||
QString repeat = action.param(soundtouchRepeatActionRepeatParamTypeId).value().toString();
|
QString repeat = action.param(soundtouchRepeatActionRepeatParamTypeId).value().toString();
|
||||||
if (repeat == "None") {
|
if (repeat == "None") {
|
||||||
requestId = soundTouch->setKey(KEY_VALUE::KEY_VALUE_REPEAT_OFF);
|
requestId = soundTouch->setKey(KEY_VALUE::KEY_VALUE_REPEAT_OFF, true);
|
||||||
} else if (repeat == "One") {
|
} else if (repeat == "One") {
|
||||||
requestId = soundTouch->setKey(KEY_VALUE::KEY_VALUE_REPEAT_ONE);
|
requestId = soundTouch->setKey(KEY_VALUE::KEY_VALUE_REPEAT_ONE, true);
|
||||||
} else if (repeat == "All") {
|
} else if (repeat == "All") {
|
||||||
requestId = soundTouch->setKey(KEY_VALUE::KEY_VALUE_REPEAT_ALL);
|
requestId = soundTouch->setKey(KEY_VALUE::KEY_VALUE_REPEAT_ALL, true);
|
||||||
}
|
}
|
||||||
m_pendingActions.insert(requestId, info);
|
m_pendingActions.insert(requestId, info);
|
||||||
connect(info, &DeviceActionInfo::aborted, this, [requestId, this] {m_pendingActions.remove(requestId);});
|
connect(info, &DeviceActionInfo::aborted, this, [requestId, this] {m_pendingActions.remove(requestId);});
|
||||||
|
|
@ -242,31 +243,31 @@ void DevicePluginBose::executeAction(DeviceActionInfo *info)
|
||||||
QUuid requestId;
|
QUuid requestId;
|
||||||
QString status = action.param(soundtouchPlaybackStatusActionPlaybackStatusParamTypeId).value().toString();
|
QString status = action.param(soundtouchPlaybackStatusActionPlaybackStatusParamTypeId).value().toString();
|
||||||
if (status == "Playing") {
|
if (status == "Playing") {
|
||||||
requestId = soundTouch->setKey(KEY_VALUE::KEY_VALUE_PLAY);
|
requestId = soundTouch->setKey(KEY_VALUE::KEY_VALUE_PLAY, true);
|
||||||
} else if (status == "Paused") {
|
} else if (status == "Paused") {
|
||||||
requestId = soundTouch->setKey(KEY_VALUE::KEY_VALUE_PAUSE);
|
requestId = soundTouch->setKey(KEY_VALUE::KEY_VALUE_PAUSE, true);
|
||||||
} else if (status == "Stopped") {
|
} else if (status == "Stopped") {
|
||||||
requestId = soundTouch->setKey(KEY_VALUE::KEY_VALUE_STOP);
|
requestId = soundTouch->setKey(KEY_VALUE::KEY_VALUE_STOP, true);
|
||||||
}
|
}
|
||||||
m_pendingActions.insert(requestId, info);
|
m_pendingActions.insert(requestId, info);
|
||||||
connect(info, &DeviceActionInfo::aborted, this, [requestId, this] {m_pendingActions.remove(requestId);});
|
connect(info, &DeviceActionInfo::aborted, this, [requestId, this] {m_pendingActions.remove(requestId);});
|
||||||
|
|
||||||
} else if (action.actionTypeId() == soundtouchActivatePresetActionTypeId) {
|
} else if (action.actionTypeId() == soundtouchSavePresetActionTypeId) {
|
||||||
|
|
||||||
QUuid requestId;
|
QUuid requestId;
|
||||||
QString preset = action.param(soundtouchActivatePresetActionPresetNumberParamTypeId).value().toString();
|
QString preset = action.param(soundtouchSavePresetActionPresetNumberParamTypeId).value().toString();
|
||||||
if (preset.contains("1")) {
|
if (preset.contains("1")) {
|
||||||
requestId = soundTouch->setKey(KEY_VALUE::KEY_VALUE_PRESET_1);
|
requestId = soundTouch->setKey(KEY_VALUE::KEY_VALUE_PRESET_1, true);
|
||||||
} else if (preset.contains("2")) {
|
} else if (preset.contains("2")) {
|
||||||
requestId = soundTouch->setKey(KEY_VALUE::KEY_VALUE_PRESET_2);
|
requestId = soundTouch->setKey(KEY_VALUE::KEY_VALUE_PRESET_2, true);
|
||||||
} else if (preset.contains("3")) {
|
} else if (preset.contains("3")) {
|
||||||
requestId = soundTouch->setKey(KEY_VALUE::KEY_VALUE_PRESET_3);
|
requestId = soundTouch->setKey(KEY_VALUE::KEY_VALUE_PRESET_3, true);
|
||||||
} else if (preset.contains("4")) {
|
} else if (preset.contains("4")) {
|
||||||
requestId = soundTouch->setKey(KEY_VALUE::KEY_VALUE_PRESET_4);
|
requestId = soundTouch->setKey(KEY_VALUE::KEY_VALUE_PRESET_4, true);
|
||||||
} else if (preset.contains("5")) {
|
} else if (preset.contains("5")) {
|
||||||
requestId = soundTouch->setKey(KEY_VALUE::KEY_VALUE_PRESET_5);
|
requestId = soundTouch->setKey(KEY_VALUE::KEY_VALUE_PRESET_5, true);
|
||||||
} else if (preset.contains("6")) {
|
} else if (preset.contains("6")) {
|
||||||
requestId = soundTouch->setKey(KEY_VALUE::KEY_VALUE_PRESET_6);
|
requestId = soundTouch->setKey(KEY_VALUE::KEY_VALUE_PRESET_6, true);
|
||||||
} else {
|
} else {
|
||||||
qCWarning(dcBose()) << "Unhandled preset number: " << preset;
|
qCWarning(dcBose()) << "Unhandled preset number: " << preset;
|
||||||
info->finish(Device::DeviceErrorInvalidParameter);
|
info->finish(Device::DeviceErrorInvalidParameter);
|
||||||
|
|
@ -289,9 +290,18 @@ void DevicePluginBose::browseDevice(BrowseResult *result)
|
||||||
Device *device = result->device();
|
Device *device = result->device();
|
||||||
if (device->deviceClassId() == soundtouchDeviceClassId) {
|
if (device->deviceClassId() == soundtouchDeviceClassId) {
|
||||||
SoundTouch *soundTouch = m_soundTouch.value(device);
|
SoundTouch *soundTouch = m_soundTouch.value(device);
|
||||||
QUuid requestId = soundTouch->getSources();
|
if (result->itemId() == "presets") {
|
||||||
|
QUuid requestId = soundTouch->getPresets();
|
||||||
m_asyncBrowseResults.insert(requestId, result);
|
m_asyncBrowseResults.insert(requestId, result);
|
||||||
connect(result, &BrowseResult::aborted, this, [this, requestId]{m_asyncBrowseResults.remove(requestId);});
|
connect(result, &BrowseResult::aborted, this, [this, requestId]{m_asyncBrowseResults.remove(requestId);});
|
||||||
|
} else {
|
||||||
|
BrowserItem presetItem("presets", "Presets", true, false);
|
||||||
|
presetItem.setIcon(BrowserItem::BrowserIcon::BrowserIconFavorites);
|
||||||
|
QUuid requestId = soundTouch->getSources();
|
||||||
|
result->addItem(presetItem);
|
||||||
|
m_asyncBrowseResults.insert(requestId, result);
|
||||||
|
connect(result, &BrowseResult::aborted, this, [this, requestId]{m_asyncBrowseResults.remove(requestId);});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -300,10 +310,19 @@ void DevicePluginBose::browserItem(BrowserItemResult *result)
|
||||||
Device *device = result->device();
|
Device *device = result->device();
|
||||||
if (device->deviceClassId() == soundtouchDeviceClassId) {
|
if (device->deviceClassId() == soundtouchDeviceClassId) {
|
||||||
SoundTouch *soundTouch = m_soundTouch.value(device);
|
SoundTouch *soundTouch = m_soundTouch.value(device);
|
||||||
|
|
||||||
|
if (result->itemId() == "presets") {
|
||||||
|
QUuid requestId = soundTouch->getPresets();
|
||||||
|
m_asyncBrowseItemResults.insert(requestId, result);
|
||||||
|
connect(result, &BrowserItemResult::aborted, this, [this, requestId]{m_asyncBrowseItemResults.remove(requestId);});
|
||||||
|
} else {
|
||||||
|
BrowserItem presetItem("presets", "Presets", true, false);
|
||||||
|
presetItem.setIcon(BrowserItem::BrowserIcon::BrowserIconFavorites);
|
||||||
QUuid requestId = soundTouch->getSources();
|
QUuid requestId = soundTouch->getSources();
|
||||||
m_asyncBrowseItemResults.insert(requestId, result);
|
m_asyncBrowseItemResults.insert(requestId, result);
|
||||||
connect(result, &BrowserItemResult::aborted, this, [this, requestId]{m_asyncBrowseItemResults.remove(requestId);});
|
connect(result, &BrowserItemResult::aborted, this, [this, requestId]{m_asyncBrowseItemResults.remove(requestId);});
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void DevicePluginBose::executeBrowserItem(BrowserActionInfo *info)
|
void DevicePluginBose::executeBrowserItem(BrowserActionInfo *info)
|
||||||
|
|
@ -311,6 +330,29 @@ void DevicePluginBose::executeBrowserItem(BrowserActionInfo *info)
|
||||||
Device *device = info->device();
|
Device *device = info->device();
|
||||||
if (device->deviceClassId() == soundtouchDeviceClassId) {
|
if (device->deviceClassId() == soundtouchDeviceClassId) {
|
||||||
SoundTouch *soundTouch = m_soundTouch.value(device);
|
SoundTouch *soundTouch = m_soundTouch.value(device);
|
||||||
|
if (info->browserAction().itemId().startsWith("presets")) {
|
||||||
|
QUuid requestId;
|
||||||
|
int number = info->browserAction().itemId().split("&").last().toInt();
|
||||||
|
if (number == 1) {
|
||||||
|
requestId = soundTouch->setKey(KEY_VALUE::KEY_VALUE_PRESET_1, false);
|
||||||
|
} else if (number == 2) {
|
||||||
|
requestId = soundTouch->setKey(KEY_VALUE::KEY_VALUE_PRESET_2, false);
|
||||||
|
} else if (number == 3) {
|
||||||
|
requestId = soundTouch->setKey(KEY_VALUE::KEY_VALUE_PRESET_3, false);
|
||||||
|
} else if (number == 4) {
|
||||||
|
requestId = soundTouch->setKey(KEY_VALUE::KEY_VALUE_PRESET_4, false);
|
||||||
|
} else if (number == 5) {
|
||||||
|
requestId = soundTouch->setKey(KEY_VALUE::KEY_VALUE_PRESET_5, false);
|
||||||
|
} else if (number == 6) {
|
||||||
|
requestId = soundTouch->setKey(KEY_VALUE::KEY_VALUE_PRESET_6, false);
|
||||||
|
} else {
|
||||||
|
qCWarning(dcBose()) << "Unhandled preset number: " << number;
|
||||||
|
info->finish(Device::DeviceErrorInvalidParameter);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
m_asyncExecuteBrowseItems.insert(requestId, info);
|
||||||
|
connect(info, &BrowserActionInfo::aborted, this, [this, requestId]{m_asyncExecuteBrowseItems.remove(requestId);});
|
||||||
|
} else {
|
||||||
SourcesObject sources = m_sourcesObjects.value(device);
|
SourcesObject sources = m_sourcesObjects.value(device);
|
||||||
foreach (SourceItemObject source, sources.sourceItems) {
|
foreach (SourceItemObject source, sources.sourceItems) {
|
||||||
if (source.source == info->browserAction().itemId()) {
|
if (source.source == info->browserAction().itemId()) {
|
||||||
|
|
@ -324,6 +366,7 @@ void DevicePluginBose::executeBrowserItem(BrowserActionInfo *info)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void DevicePluginBose::onPluginTimer()
|
void DevicePluginBose::onPluginTimer()
|
||||||
|
|
@ -513,3 +556,24 @@ void DevicePluginBose::onZoneObjectReceived(QUuid requestId, ZoneObject zone)
|
||||||
qDebug(dcBose()) << "-> member:" << member.deviceID;
|
qDebug(dcBose()) << "-> member:" << member.deviceID;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void DevicePluginBose::onPresetsReceived(QUuid requestId, QList<PresetObject> presets)
|
||||||
|
{
|
||||||
|
//SoundTouch *soundtouch = static_cast<SoundTouch *>(sender());
|
||||||
|
//Device *device = m_soundTouch.key(soundtouch);
|
||||||
|
|
||||||
|
if (m_asyncBrowseResults.contains(requestId)) {
|
||||||
|
BrowseResult *result = m_asyncBrowseResults.take(requestId);
|
||||||
|
foreach (PresetObject preset, presets) {
|
||||||
|
BrowserItem item("presets&"+QString::number(preset.presetId), QString("Preset %1").arg(QString::number(preset.presetId)), false, true);
|
||||||
|
item.setDescription(preset.ContentItem.source+" "+preset.ContentItem.itemName);
|
||||||
|
item.setThumbnail(preset.ContentItem.containerArt);
|
||||||
|
result->addItem(item);
|
||||||
|
}
|
||||||
|
result->finish(Device::DeviceErrorNoError);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (m_asyncBrowseItemResults.contains(requestId)) {
|
||||||
|
//TODO
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -87,6 +87,7 @@ private slots:
|
||||||
void onBassCapabilitiesObjectReceived(QUuid requestId, BassCapabilitiesObject bassCapabilities);
|
void onBassCapabilitiesObjectReceived(QUuid requestId, BassCapabilitiesObject bassCapabilities);
|
||||||
void onGroupObjectReceived(QUuid requestId, GroupObject group);
|
void onGroupObjectReceived(QUuid requestId, GroupObject group);
|
||||||
void onZoneObjectReceived(QUuid requestId, ZoneObject zone);
|
void onZoneObjectReceived(QUuid requestId, ZoneObject zone);
|
||||||
|
void onPresetsReceived(QUuid requestId, QList<PresetObject> presets);
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // DEVICEPLUGINBOSE_H
|
#endif // DEVICEPLUGINBOSE_H
|
||||||
|
|
|
||||||
|
|
@ -201,12 +201,12 @@
|
||||||
"displayName": "Skip Next"
|
"displayName": "Skip Next"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": "69969904-5bb4-401d-bede-9f31fe52d16a",
|
"id": "6c47e736-e2e0-47d4-9b96-7f56d2342b4d",
|
||||||
"name": "activatePreset",
|
"name": "savePreset",
|
||||||
"displayName": "Activate preset",
|
"displayName": "Save preset",
|
||||||
"paramTypes": [
|
"paramTypes": [
|
||||||
{
|
{
|
||||||
"id": "2a69f545-41a9-4e84-9cc6-65a5a9600b7e",
|
"id": "04ac6e10-922d-4774-861f-060897d3a6c0",
|
||||||
"name": "presetNumber",
|
"name": "presetNumber",
|
||||||
"displayName": "Preset number",
|
"displayName": "Preset number",
|
||||||
"type": "QString",
|
"type": "QString",
|
||||||
|
|
|
||||||
|
|
@ -162,7 +162,7 @@ QUuid SoundTouch::getBassCapabilities()
|
||||||
return requestId;
|
return requestId;
|
||||||
}
|
}
|
||||||
|
|
||||||
QUuid SoundTouch::setKey(KEY_VALUE keyValue)
|
QUuid SoundTouch::setKey(KEY_VALUE keyValue, bool pressed)
|
||||||
{
|
{
|
||||||
QUuid requestId = QUuid::createUuid();
|
QUuid requestId = QUuid::createUuid();
|
||||||
QUrl url;
|
QUrl url;
|
||||||
|
|
@ -174,7 +174,12 @@ QUuid SoundTouch::setKey(KEY_VALUE keyValue)
|
||||||
QXmlStreamWriter xml(&content);
|
QXmlStreamWriter xml(&content);
|
||||||
xml.writeStartDocument("1.0");
|
xml.writeStartDocument("1.0");
|
||||||
xml.writeStartElement("key");
|
xml.writeStartElement("key");
|
||||||
|
if (pressed) {
|
||||||
xml.writeAttribute("state", "press");
|
xml.writeAttribute("state", "press");
|
||||||
|
} else {
|
||||||
|
xml.writeAttribute("state", "release");
|
||||||
|
}
|
||||||
|
|
||||||
xml.writeAttribute("sender", "Gabbo");
|
xml.writeAttribute("sender", "Gabbo");
|
||||||
switch (keyValue){
|
switch (keyValue){
|
||||||
case KEY_VALUE_PLAY:
|
case KEY_VALUE_PLAY:
|
||||||
|
|
@ -225,6 +230,24 @@ QUuid SoundTouch::setKey(KEY_VALUE keyValue)
|
||||||
case KEY_VALUE_SHUFFLE_OFF:
|
case KEY_VALUE_SHUFFLE_OFF:
|
||||||
xml.writeCharacters("SHUFFLE_OFF");
|
xml.writeCharacters("SHUFFLE_OFF");
|
||||||
break;
|
break;
|
||||||
|
case KEY_VALUE_PRESET_1:
|
||||||
|
xml.writeCharacters("PRESET_1");
|
||||||
|
break;
|
||||||
|
case KEY_VALUE_PRESET_2:
|
||||||
|
xml.writeCharacters("PRESET_2");
|
||||||
|
break;
|
||||||
|
case KEY_VALUE_PRESET_3:
|
||||||
|
xml.writeCharacters("PRESET_3");
|
||||||
|
break;
|
||||||
|
case KEY_VALUE_PRESET_4:
|
||||||
|
xml.writeCharacters("PRESET_4");
|
||||||
|
break;
|
||||||
|
case KEY_VALUE_PRESET_5:
|
||||||
|
xml.writeCharacters("PRESET_5");
|
||||||
|
break;
|
||||||
|
case KEY_VALUE_PRESET_6:
|
||||||
|
xml.writeCharacters("PRESET_6");
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
qWarning(dcBose) << "key not yet implemented";
|
qWarning(dcBose) << "key not yet implemented";
|
||||||
return "0";
|
return "0";
|
||||||
|
|
@ -239,7 +262,8 @@ QUuid SoundTouch::setKey(KEY_VALUE keyValue)
|
||||||
emitRequestStatus(requestId, reply);
|
emitRequestStatus(requestId, reply);
|
||||||
});
|
});
|
||||||
|
|
||||||
if (keyValue == KEY_VALUE_POWER) {
|
//Power button needs to be released immediatelly after beeing pressed
|
||||||
|
if (keyValue == KEY_VALUE_POWER && pressed) {
|
||||||
QUrl url;
|
QUrl url;
|
||||||
url.setHost(m_ipAddress);
|
url.setHost(m_ipAddress);
|
||||||
url.setScheme("http");
|
url.setScheme("http");
|
||||||
|
|
@ -262,6 +286,7 @@ QUuid SoundTouch::setKey(KEY_VALUE keyValue)
|
||||||
return requestId;
|
return requestId;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
QUuid SoundTouch::setVolume(int volume)
|
QUuid SoundTouch::setVolume(int volume)
|
||||||
{
|
{
|
||||||
QUuid requestId = QUuid::createUuid();
|
QUuid requestId = QUuid::createUuid();
|
||||||
|
|
@ -850,6 +875,10 @@ void SoundTouch::parseData(QUuid requestId, const QByteArray &data)
|
||||||
}
|
}
|
||||||
emit bassCapabilitiesReceived(requestId, bassCapabilities);
|
emit bassCapabilitiesReceived(requestId, bassCapabilities);
|
||||||
} else if (xml.name() == "presets") {
|
} else if (xml.name() == "presets") {
|
||||||
|
QList<PresetObject> presets;
|
||||||
|
qDebug(dcBose) << "Presets";
|
||||||
|
while(xml.readNextStartElement()){
|
||||||
|
if(xml.name() == "preset"){
|
||||||
PresetObject preset;
|
PresetObject preset;
|
||||||
if(xml.attributes().hasAttribute("id")) {
|
if(xml.attributes().hasAttribute("id")) {
|
||||||
preset.presetId = xml.attributes().value("id").toInt();
|
preset.presetId = xml.attributes().value("id").toInt();
|
||||||
|
|
@ -860,8 +889,10 @@ void SoundTouch::parseData(QUuid requestId, const QByteArray &data)
|
||||||
if(xml.attributes().hasAttribute("updatedOn")) {
|
if(xml.attributes().hasAttribute("updatedOn")) {
|
||||||
preset.updatedOn = xml.attributes().value("updatedOn").toULong();
|
preset.updatedOn = xml.attributes().value("updatedOn").toULong();
|
||||||
}
|
}
|
||||||
|
qDebug(dcBose) << "Preset" << preset.presetId;
|
||||||
while(xml.readNextStartElement()){
|
while(xml.readNextStartElement()){
|
||||||
if(xml.name() == "ContentItem"){
|
|
||||||
|
if (xml.name() == "ContentItem") {
|
||||||
if(xml.attributes().hasAttribute("source")) {
|
if(xml.attributes().hasAttribute("source")) {
|
||||||
preset.ContentItem.source = xml.attributes().value("source").toString();
|
preset.ContentItem.source = xml.attributes().value("source").toString();
|
||||||
}
|
}
|
||||||
|
|
@ -871,11 +902,30 @@ void SoundTouch::parseData(QUuid requestId, const QByteArray &data)
|
||||||
if(xml.attributes().hasAttribute("sourceAccount")) {
|
if(xml.attributes().hasAttribute("sourceAccount")) {
|
||||||
preset.ContentItem.sourceAccount = xml.attributes().value("sourceAccount").toString();
|
preset.ContentItem.sourceAccount = xml.attributes().value("sourceAccount").toString();
|
||||||
}
|
}
|
||||||
}else {
|
|
||||||
|
while(xml.readNextStartElement()){
|
||||||
|
if (xml.name() == "itemName") {
|
||||||
|
preset.ContentItem.itemName = xml.readElementText();
|
||||||
|
} else if (xml.name() == "containerArt"){
|
||||||
|
preset.ContentItem.containerArt = xml.readElementText();
|
||||||
|
} else {
|
||||||
|
qCWarning(dcBose()) << "Presets: unhandled XML element" << xml.name();
|
||||||
xml.skipCurrentElement();
|
xml.skipCurrentElement();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
emit presetsReceived(requestId, preset);
|
|
||||||
|
} else {
|
||||||
|
qCWarning(dcBose()) << "Presets: unhandled XML element" << xml.name();
|
||||||
|
xml.skipCurrentElement();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
presets.append(preset);
|
||||||
|
} else {
|
||||||
|
qCWarning(dcBose()) << "Presets: unhandled XML element" << xml.name();
|
||||||
|
xml.skipCurrentElement();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
emit presetsReceived(requestId, presets);
|
||||||
|
|
||||||
} else if (xml.name() == "group") {
|
} else if (xml.name() == "group") {
|
||||||
GroupObject group;
|
GroupObject group;
|
||||||
|
|
|
||||||
|
|
@ -60,7 +60,7 @@ public:
|
||||||
QUuid getPresets(); //Get information related to the user's SoundTouch presets.
|
QUuid getPresets(); //Get information related to the user's SoundTouch presets.
|
||||||
|
|
||||||
//ACTIONS
|
//ACTIONS
|
||||||
QUuid setKey(KEY_VALUE keyValue); //Start and control playback on a product.
|
QUuid setKey(KEY_VALUE keyValue, bool pressed); //Start and control playback on a product.
|
||||||
QUuid setVolume(int volume); //Set the volume of a product.
|
QUuid setVolume(int volume); //Set the volume of a product.
|
||||||
QUuid setSource(ContentItemObject contentItem); //Select a product's source.
|
QUuid setSource(ContentItemObject contentItem); //Select a product's source.
|
||||||
QUuid setZone(ZoneObject zone); //Create a zone of synced products.
|
QUuid setZone(ZoneObject zone); //Create a zone of synced products.
|
||||||
|
|
@ -95,7 +95,7 @@ signals:
|
||||||
void zoneReceived(QUuid requestId, ZoneObject);
|
void zoneReceived(QUuid requestId, ZoneObject);
|
||||||
void bassCapabilitiesReceived(QUuid requestId, BassCapabilitiesObject bassCapabilities);
|
void bassCapabilitiesReceived(QUuid requestId, BassCapabilitiesObject bassCapabilities);
|
||||||
void bassReceived(QUuid requestId, BassObject bass);
|
void bassReceived(QUuid requestId, BassObject bass);
|
||||||
void presetsReceived(QUuid requestId, PresetObject presets);
|
void presetsReceived(QUuid requestId, QList<PresetObject> presets);
|
||||||
void groupReceived(QUuid requestId, GroupObject group);
|
void groupReceived(QUuid requestId, GroupObject group);
|
||||||
|
|
||||||
void requestExecuted(QUuid requestId, bool success);
|
void requestExecuted(QUuid requestId, bool success);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue