removed browser actions, added browse item

This commit is contained in:
Boernsman 2019-10-18 20:45:59 +02:00
parent 83003d0270
commit ac3ce25b6b
3 changed files with 55 additions and 12 deletions

View File

@ -81,6 +81,11 @@ void DevicePluginSonos::setupDevice(DeviceSetupInfo *info)
QByteArray refreshToken = pluginStorage()->value("refresh_token").toByteArray(); QByteArray refreshToken = pluginStorage()->value("refresh_token").toByteArray();
pluginStorage()->endGroup(); pluginStorage()->endGroup();
if (refreshToken.isEmpty()) {
info->finish(Device::DeviceErrorAuthenticationFailure);
return;
}
sonos = new Sonos(hardwareManager()->networkManager(), "0a8f6d44-d9d1-4474-bcfa-cfb41f8b66e8", "3095ce48-0c5d-47ce-a1f4-6005c7b8fdb5", this); sonos = new Sonos(hardwareManager()->networkManager(), "0a8f6d44-d9d1-4474-bcfa-cfb41f8b66e8", "3095ce48-0c5d-47ce-a1f4-6005c7b8fdb5", this);
connect(sonos, &Sonos::connectionChanged, this, &DevicePluginSonos::onConnectionChanged); connect(sonos, &Sonos::connectionChanged, this, &DevicePluginSonos::onConnectionChanged);
connect(sonos, &Sonos::householdIdsReceived, this, &DevicePluginSonos::onHouseholdIdsReceived); connect(sonos, &Sonos::householdIdsReceived, this, &DevicePluginSonos::onHouseholdIdsReceived);
@ -345,14 +350,14 @@ void DevicePluginSonos::browseDevice(BrowseResult *result)
QString householdId = result->device()->paramValue(sonosGroupDeviceHouseholdIdParamTypeId).toString(); QString householdId = result->device()->paramValue(sonosGroupDeviceHouseholdIdParamTypeId).toString();
if (result->itemId().isEmpty()){ if (result->itemId().isEmpty()){
BrowserItem item; BrowserItem item;
item.setId("favorites"); item.setId("/favorites");
item.setIcon(BrowserItem::BrowserIconFavorites); item.setIcon(BrowserItem::BrowserIconFavorites);
item.setExecutable(false); item.setExecutable(false);
item.setBrowsable(true); item.setBrowsable(true);
item.setDisplayName("Favorites"); item.setDisplayName("Favorites");
result->addItem(item); result->addItem(item);
result->finish(Device::DeviceErrorNoError); result->finish(Device::DeviceErrorNoError);
} else if (result->itemId() == "favorites") { } else if (result->itemId() == "/favorites") {
sonosConnection->getFavorites(householdId); sonosConnection->getFavorites(householdId);
m_pendingBrowseResult.insert(householdId, result); m_pendingBrowseResult.insert(householdId, result);
connect(result, &BrowseResult::aborted,[householdId, this](){m_pendingBrowseResult.remove(householdId);}); connect(result, &BrowseResult::aborted,[householdId, this](){m_pendingBrowseResult.remove(householdId);});
@ -364,7 +369,18 @@ void DevicePluginSonos::browseDevice(BrowseResult *result)
void DevicePluginSonos::browserItem(BrowserItemResult *result) void DevicePluginSonos::browserItem(BrowserItemResult *result)
{ {
Q_UNUSED(result) Device *parentDevice = myDevices().findById(result->device()->parentId());
Sonos *sonosConnection = m_sonosConnections.value(parentDevice);
if (!sonosConnection)
return;
qCDebug(dcSonos()) << "Browser Item" << result->itemId();
QString householdId = result->device()->paramValue(sonosGroupDeviceHouseholdIdParamTypeId).toString();
if (result->itemId().startsWith("/favorites")) {
sonosConnection->getFavorites(householdId);
m_pendingBrowserItemResult.insert(householdId, result);
connect(result, &BrowserItemResult::aborted,[householdId, this](){m_pendingBrowserItemResult.remove(householdId);});
}
} }
void DevicePluginSonos::executeBrowserItem(BrowserActionInfo *info) void DevicePluginSonos::executeBrowserItem(BrowserActionInfo *info)
@ -375,9 +391,12 @@ void DevicePluginSonos::executeBrowserItem(BrowserActionInfo *info)
return; return;
QString groupId = info->device()->paramValue(sonosGroupDeviceGroupIdParamTypeId).toString(); QString groupId = info->device()->paramValue(sonosGroupDeviceGroupIdParamTypeId).toString();
QUuid requestId = sonosConnection->loadFavorite(groupId, info->browserAction().itemId()); if (info->browserAction().itemId().startsWith("/favorites")) {
m_pendingBrowserExecution.insert(requestId, info); QString favoriteId = info->browserAction().itemId().remove("/favorite/");
connect(info, &BrowserActionInfo::aborted,[requestId, this](){m_pendingBrowserExecution.remove(requestId);}); QUuid requestId = sonosConnection->loadFavorite(groupId, favoriteId);
m_pendingBrowserExecution.insert(requestId, info);
connect(info, &BrowserActionInfo::aborted,[requestId, this](){m_pendingBrowserExecution.remove(requestId);});
}
} }
void DevicePluginSonos::onConnectionChanged(bool connected) void DevicePluginSonos::onConnectionChanged(bool connected)
@ -428,11 +447,11 @@ void DevicePluginSonos::onFavouritesReceived(const QString &householdId, QList<S
foreach(Sonos::FavouriteObject favourite, favourites) { foreach(Sonos::FavouriteObject favourite, favourites) {
MediaBrowserItem item; MediaBrowserItem item;
item.setId(favourite.id); item.setId(result->itemId() + "/" + favourite.id);
item.setExecutable(true); item.setExecutable(true);
item.setBrowsable(false); item.setBrowsable(false);
if (!favourite.imageUrl.isEmpty()) { if (!favourite.imageUrl.isEmpty()) {
item.setThumbnail(favourite.imageUrl); item.setThumbnail(favourite.imageUrl);
} else { } else {
item.setIcon(BrowserItem::BrowserIconFavorites); item.setIcon(BrowserItem::BrowserIconFavorites);
} }
@ -442,8 +461,30 @@ void DevicePluginSonos::onFavouritesReceived(const QString &householdId, QList<S
qDebug(dcSonos()) << "Favourite: " << favourite.name << favourite.description; qDebug(dcSonos()) << "Favourite: " << favourite.name << favourite.description;
} }
result->finish(Device::DeviceErrorNoError); result->finish(Device::DeviceErrorNoError);
} else { }
qDebug(dcSonos()) << "Received unhandled favourites list";
if (m_pendingBrowserItemResult.contains(householdId)) {
BrowserItemResult *result = m_pendingBrowserItemResult.take(householdId);
if (!result)
return;
QString favoriteId = result->itemId().remove("/favorites/");
foreach(Sonos::FavouriteObject favourite, favourites) {
if (favourite.id == favoriteId) {
MediaBrowserItem item;
item.setId(result->itemId());
item.setExecutable(true);
item.setBrowsable(false);
if (!favourite.imageUrl.isEmpty()) {
item.setThumbnail(favourite.imageUrl);
} else {
item.setIcon(BrowserItem::BrowserIconFavorites);
}
item.setDisplayName(favourite.name);
item.setDescription(favourite.description);
result->finish(item);
}
}
} }
} }

View File

@ -66,6 +66,7 @@ private:
QHash<QUuid, QPointer<DeviceActionInfo> > m_pendingActions; QHash<QUuid, QPointer<DeviceActionInfo> > m_pendingActions;
QHash<QString, BrowseResult *> m_pendingBrowseResult; QHash<QString, BrowseResult *> m_pendingBrowseResult;
QHash<QString, BrowserItemResult *> m_pendingBrowserItemResult;
QHash<QUuid, BrowserActionInfo *> m_pendingBrowserExecution; QHash<QUuid, BrowserActionInfo *> m_pendingBrowserExecution;

View File

@ -24,8 +24,9 @@
"name": "connected", "name": "connected",
"displayName": "Connected", "displayName": "Connected",
"displayNameEvent": "Connected changed", "displayNameEvent": "Connected changed",
"defaultValue": true, "defaultValue": false,
"type": "bool" "type": "bool",
"cached": false
}, },
{ {
"id": "48b5c1bf-7df0-45d0-9ba3-290fc3acddc3", "id": "48b5c1bf-7df0-45d0-9ba3-290fc3acddc3",