added presets to browsing

master
Boernsman 2020-02-14 17:42:46 +05:00
parent 6026f487c1
commit 0b5041572f
5 changed files with 182 additions and 67 deletions

View File

@ -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
}
}

View File

@ -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

View File

@ -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",

View File

@ -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;

View File

@ -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);